Split-key: покупка красивого адреса без доверия продавцу
Кто сгенерировал красивый адрес, тот сгенерировал и его приватный ключ — если только поиск не шёл по публичному ключу. Как устроена покупка со split-key, какая за ней арифметика, от чего она защищает, а от чего нет, и как проверить это самому.
На этой странице
У каждого магазина готовых красивых адресов одна и та же дыра, и никакими правилами она не затыкается: чтобы получить адрес, продавец получил и его приватный ключ. Вам могут сказать, что копию удалили. Показать это вам не могут.
Покупка со split-key не спорит с этой предпосылкой, а убирает её. Продавец по-прежнему делает дорогую работу — миллионы адресов в секунду на видеокартах, — и при этом ни разу не владеет тем ключом, который окажется у вас.
Арифметика
Ключи TRON живут на кривой secp256k1: приватный ключ — это число d, а соответствующий публичный — точка d·G. Полезно здесь то, что отображение складывается:
`` (d + s)·G = d·G + s·G ``
Значит, поиск можно разделить надвое:
- Браузер выбирает случайное
dи отправляет наружу только публичную половинуP = d·G. - Ферма перебирает смещения
s = 1, 2, 3, …, считаетP + s·Gи каждый раз проверяет адрес. Она не знаетd, а значит, не знает иd + s. - Ферма возвращает то
s, которое попало в ваш шаблон. - Браузер вычисляет
d + s— приватный ключ найденного адреса.
Смещение передаётся открыто, потому что само по себе ничего не стоит: без d это просто число, а восстановить d из P — это задача дискретного логарифма, на неразрешимости которой secp256k1 и построена.
Кто что знает
| Вы | Продавец | |
|---|---|---|
Ваша половина d | да | нет |
Публичная половина P | да | да |
Смещение s | да | да |
Итоговый ключ d + s | да | нет |
Нет ни одного шага, на котором готовый ключ существовал бы на оборудовании продавца. Ни в памяти, ни в логе, ни в резервной копии — половинки там просто не встречаются.
От чего это не защищает
Split-key не панацея, и магазин, намекающий на обратное, продаёт вам спокойствие, а не безопасность.
- Он не проверяет код продавца. Браузер обязан действительно создать ключ локально. Откройте инструменты разработчика, посмотрите вкладку Network в момент заказа и убедитесь: со страницы уходят 128 hex-символов публичного ключа, а не 64 символа приватного.
- Он не спасает от плохого случайного числа. Если
dвзято из предсказуемого источника, итоговый ключ тоже предсказуем.crypto.getRandomValuesлюбого современного браузера подходит; «случайное» число, набранное руками, — нет. - Он не отменяет отравление адресов. Запоминающееся окончание облегчает мошеннику подделку похожего адреса. Полный адрес всё равно надо сверять перед каждым переводом.
- Он ничего за вас не сохраняет. Это и есть настоящая плата, и она жёсткая: продавец не восстановит вашу половину, потому что никогда её не имел. Потеряете — адрес пропал навсегда.
Почему это дольше, чем покупка со склада
Адрес с полки сгенерирован заранее, поэтому выдача мгновенная. Адрес со split-key не существует, пока кто-нибудь не поищет его именно под ваш публичный ключ, и чужой заказ тут не переиспользуешь. Закладывайте время поиска для выбранной длины плюс время на запуск видеокарты.
Для четырёх-пяти символов это неподходящий инструмент: ваш собственный ноутбук найдёт такой адрес за секунды через бесплатный генератор в браузере, и тогда второй стороны не существует вовсе. Split-key оправдывает себя примерно с семи символов, где поиску нужно железо, которое проще арендовать, чем купить.
Как убедиться, что всё сработало
Когда смещение пришло, браузер должен сделать две вещи прежде, чем что-либо показать: вывести адрес из d + s и сверить его с обещанным. Если они разошлись — ключ не тот, и показывать нечего.
Проверку можно повторить независимо. Импортируйте ключ в TronLink и сравните все 34 символа адреса, который он покажет. Кошелёк выводит адрес из самого ключа, поэтому совпадение доказывает, что ключ правильный, — доверять какому-либо сайту для этого не нужно.
Частые вопросы
Смещение — это секрет?
Нет, и быть им не должно. Смещение — лишь половина сложения, а вторая половина из браузера не выходила. Его публикация не сообщит злоумышленнику ничего такого, чего он не мог бы вычислить из самого адреса.
Может ли продавец подобрать ключ, которым сможет пользоваться и сам?
Для вашего заказа — нет. Ферма получает P, и для любого адреса, достижимого из P, тратить средства можно только зная ваше d. Подсунуть вместо этого посторонний адрес он, конечно, может — именно поэтому браузер и проверяет, что выданный ключ даёт ровно обещанный адрес.
Что будет, если я потеряю свою половину?
Адрес потерян, восстановить его нечем. Это не правило, а арифметический факт: у продавца половина суммы, и вторую он из неё не достанет. Сохраните свою половину сразу, как только её показали, и не в том браузере, который её создал.
Это то же самое, что мультиподпись?
Нет. Мультиподпись означает, что несколько ключей могут подписывать операции одного аккаунта. Split-key — разовый приём построения: два числа складываются один раз, и на выходе получается обычный единственный приватный ключ обычного аккаунта TRON.
У HaoKey это есть?
Да, на каждой маске каталога — вариант «без доверия» рядом с обычной кнопкой покупки. На нашей странице безопасности он стоит первым из трёх способов не доверять нам ключ.