Что такое Stealth-адрес?

Stealth-адреса, будем называть их по-русски “адреса-невидимки” — это еще один вполне стандартный способ сокрытия платежей несмотря на тот факт, что Blockchain является открытой базой адресов. В отличие от CoinJoin и CoinShuffle здесь не происходит запутываний, здесь сокрытие происходит совсем по другому принципу — благодаря протоколу Диффи-Хеллмана (Меркла).

Иллюстрация к протоколу Диффи-Хеллмана
Иллюстрация к протоколу Диффи-Хеллмана

Протокол Диффи-Хеллмана позволяет сторонам по публичному каналу обменяться данными для получения, т.н. shared secret, или “общего ключа”. Общий ключ таким образом остается секретным при сторонах, а затем может быть использован для установления полноценного секретного соединения на основе классического симметричного шифрования или как-либо еще. Надежность протокола Диффи-Хеллмана основана на том факте, что как обычно, у атакующего не хватит компьютерных мощностей на поиск секретной составляющей, даже подслушав публичные ключи. Хорошую иллюстрацию дает соответствующая страница Википедии: здесь Алиса и Боб путем обмена публичной информацией об одной составляющей случайно выбранного ими цвета, в результате слияния цветов получили один на всех разделяемый секрет (“общий ключ”) с условием, что атакующий не может произвести обратную операцию.

Именно этот принцип и заложен в основе адресов-невидимок, только протокол Диффи-Хеллмана применили к эллиптическим кривым, на которых построена криптография Биткоин. Работает следующим образом:

  1. Желающий принимать платежи (продавец) создает пару ключей: приватный d и публичный Q. Затем Q можно сообщить по публичным каналам желающему осуществить платеж (покупателю) или попросту опубликовать у себя на сайте. В дальнейшем Q никак не будет фигурировать в Blockchain, а посему его следов не останется.
  2. Покупатель так же создает свою пару ключей: публичный P и приватный e. Полученный публичный ключ P отправляется продавцу в поле метаданных платежа.
  3. Используя публичный ключ продавца Q и свой приватный ключ e, покупатель может получить c — общий ключ. Продавец проделывает похожие манипуляции со своим приватным ключом и публичным ключом покупателя и получает тот же самый c. Из c при помощи преобразований можно получить собственно адрес платежа A (покупатель сделал это в пункте 2). Адрес платежа случаен при условии, что покупатель создавал ключи случайным образом. Адрес известен только двум сторонам.
  4. Продавец слушает или сканирует Blockchain на предмет stealth-платежей и к каждому из них применяет преобразования из пункта 3 (либо покупатель сообщает о совершении платежа как-либо еще). Если на основе метаданных какой-либо транзакции и собственного приватного ключа d, продавцу удалось получить адрес и он совпал с адресом транзакции A, то продавец может быть уверен, что платеж совершен.
  5. Комбинируя c со своим приватным ключом d, продавец может получить новый приватный ключ, дающий ему доступ к кошельку A.

Известно, что один из простых и надежных способов сохранения приватности платежей является создание новых адресов под каждую новую транзакцию — это должно стать привычкой. Но иногда это не удобно, например, когда хочется оставить адрес для пожертвований неизменным и просто ждать сюрприза. Адреса-невидимки позволяют слегка решить эту проблему. Это просто один из способов создания новых адресов для каждой новой транзакции. В этом случае ответственность за создание новых адресов возложена на желающего осуществить перевод, а для продавца плюс дополнительная приватность.

Описанная математика конечно же должна быть реализована в коде кошельков и доступна простым людям, но адреса-неведимки пока еще не выбрались из лабораторий. Все надежды на грядущий DarkWallet, который на днях добрался до стадии Alpha 6.

По теме