Домой Технологии и рынок BIP47, гадкий утёнок

BIP47, гадкий утёнок

0

Одно из главных бедствий протокола Bitcoin — повторное использование адресов. Прозрачность и распределенность сети делает эту практику опасной для конфиденциальности пользователей. Чтобы избежать связанных с этим проблем, рекомендуется для получения каждого нового платежа использовать новый пустой адрес […]

«Он слишком крупный, — сказали они все, и индийский петух, который, казалось, родился со шпорами и считал себя императором, надулся, как судно со всеми поднятыми парусами, и пошел прямо на него с красными от великой ярости глазами. Бедный утенок не знал, остановиться ли ему или идти: ему было горько оттого, что все утки двора презирали его».

Одно из главных бедствий протокола Bitcoin — повторное использование адресов. Прозрачность и распределенность сети делает эту практику опасной для конфиденциальности пользователей. Чтобы избежать связанных с этим проблем, рекомендуется использовать новый пустой адрес для получения каждого нового платежа, что в некоторых случаях может быть затруднительно.

Этот компромисс стар, как сама уайтпейпер Накамото. Уже в ней Сатоши предупреждал о рисках повторного использования адресов:

«В качестве дополнительной меры безопасности для каждой транзакции следует использовать новую пару ключей, чтобы они не были связаны с общим владельцем».

Существует множество решений для получения нескольких платежей без переиспользования адреса, каждое со своими компромиссами и недостатками. Одно из них — BIP47, предложение по реализации в Биткойне многоразовых платежных кодов, разработанное Юстусом Ранвье и опубликованное еще в 2015 году. Цель — позволить проводить несколько транзакций с одним и тем же пользователем без повторного использования адреса.

Первоначально это предложение было очень холодно принято частью сообщества, и так и не было добавлено в Bitcoin Core. До сих пор некоторые программы предпочитают внедрять его самостоятельно. Так, Samourai Wallet разработал собственную реализацию BIP47: PayNym. Сегодня эта реализация доступна, очевидно, в Samourai Wallet для смартфонов и Sparrow Wallet для ПК.

Со временем Samourai стали развивать и новые функции, непосредственно связанные с PayNym. К сегодняшнему дню они предлагают уже целую экосистему инструментов для оптимизации конфиденциальности пользователей на основе PayNym и BIP47.

В этой статье я расскажу подробно о принципах BIP47 и PayNym, механизмах работы этих протоколов и некоторых практических приложениях, которые из них следуют. Я здесь буду говорить только о первой версии BIP47, той, что сейчас используется для PayNym, однако версии 2, 3 и 4 работают практически таким же образом.

Единственное существенное различие заключается в транзакции уведомления. В v1 для уведомления используется простой адрес с OP_RETURN, в v2 – multisig-скрипт (bloom-multisig) с OP_RETURN, а в v3 и v4 — просто multisig-скрипт (cfilter-multisig). Поэтому описываемые в этой статье механизмы, включая криптографические методы, применимы ко всем четырем версиям. На сегодня в реализациях PayNym в Samourai и Sparrow Wallet используется первая версия BIP47.

Навигация:

  • Проблема повторного использования адресов →
  • Принципы работы BIP47 и PayNym →
  • Инструкции: использование PayNym →
    • Построение BIP47-транзакции в Samourai Wallet →
    • Построение BIP47-транзакции в Sparrow Wallet →
  • Как работает BIP47 →
    • Многоразовый платежный код →
    • Криптографический метод: Elliptic-Curve Diffie-Hellman (ECDH) →
    • Транзакция уведомления →
    • Построение транзакции уведомления →
    • Получение транзакции уведомления →
    • Платежная транзакция BIP47 →
    • Получение BIP47-платежа и получение закрытого ключа →
    • Возврат BIP47-платежа →
  • Производные варианты использования PayNym →
  • Мое мнение о BIP47 →

Проблема повторного использования адресов

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

Кроме того, вы наверняка уже слышали от опытных и информированных биткойнеров о том, что адреса получения предназначены для одноразового использования, и потому для каждого нового входящего платежа необходимо генерировать новый адрес. Ладно, но почему так?

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

Как уже упоминалось выше, прозрачность и распределенность сети Bitcoin подразумевает, что любой пользователь, имеющий доступ к узлу сети, может наблюдать за всеми транзакциями платежной системы. Как результат, он может видеть и балансы адресов. Сатоши Накамото упоминал о возможности генерировать новые пары ключей — а значит, и новые адреса — для каждого нового платежа, поступающего в кошелек. Цель состоит в том, чтобы иметь дополнительную защиту — своего рода брандмауэр — на случай связывания идентификационных данных пользователя с одной из пар его ключей.

Сегодня, с развитием специализирующихся в блокчейн-анализе компаний и распространением на крипторынке практик KYC, генерирование новых пустых адресов для каждой новой транзакции является уже не дополнительной мерой безопасности, но обязательной мерой для каждого, кто хоть минимально беспокоится о собственной конфиденциальности.

Стремление к приватности — это не комфорт или фантазия биткойнера-максималиста. Этот параметр напрямую влияет на вашу личную безопасность и безопасность ваших средств. Приведу очень конкретный пример:

  • Боб покупает биткойны понемногу через регулярные промежутки времени, чтобы сгладить цену входа (усреднение долларовой стоимости). Он систематически отправляет приобретенные средства на один и тот же адрес получения. Покупает каждую неделю по 0,01 BTC и отправляет их на один и тот же адрес. Через два года Боб накопил на этом адресе полный BTC.
  • В пекарне за углом принимают оплату в BTC. Довольный возможностью удобно тратить BTC на повседневные нужды, Боб отправляется покупать булочку за сатоши. Для оплаты он использует сатоши с того же своего биткойн-адреса. Теперь пекарь знает, что Боб владеет биткойнами. Большой баланс кошелька (а пекарь может его посмотреть в один-два клика) может вызывать у людей зависть, и Боб рискует подвергнуться физическому нападению.

Повторное использование адресов позволяет наблюдателю установить неоспоримую связь между различными вашими UTXO, и иногда это значит — между вашей личностью и всем балансом вашего биткойн-кошелька.

Именно по этой причине большинство биткойн-кошельков автоматически генерируют новый адрес получения всякий раз, когда вы нажимаете кнопку «Получить». Поэтому для простого пользователя некастодиального кошелька необходимость использовать новые пустые адреса часто не доставляет больших неудобств. Однако для онлайн-бизнеса, биржи или кампании по сбору средств это ограничение может быстро стать неуправляемым.

Для таких организаций существует множество решений, каждое со своими преимуществами и недостатками, но на сегодняшний день и как мы увидим далее, BIP47 действительно выделяется из остальных.

Проблему повторного использования адресов в Биткойне не следует недооценивать. Как видно из приведенного ниже графика с oxt.me, общая доля повторного использования адресов пользователями Биткойна в настоящее время составляет ~50%:

Источник: bitnovosti.com