BIP47, ГАДКИЙ УТЁНОК

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Одно из главных бедствий протокола 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 для уведомления используется простой адрес с [https://vk.com/wall-62032126?s=28&q=OP_RETURN|OP_RETURN], в v2 – multisig-скрипт ([https://vk.com/wall-62032126?s=18&q=bloom-multisig|bloom-multisig]) с OP_RETURN, а в v3 и v4 — просто multisig-скрипт ([https://vk.com/wall-62032126?s=92&q=cfilter-multisig|cfilter-multisig]). Поэтому описываемые в этой статье механизмы, включая криптографические методы, применимы ко всем четырем версиям. На сегодня в реализациях PayNym в Samourai и Sparrow Wallet используется первая версия BIP47.

Навигация:

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

Принципы работы BIP47 и PayNym ?

Инструкции: использование PayNym ?

Построение BIP47-транзакции в Samourai Wallet ?

Построение BIP47-транзакции в Sparrow Wallet ?

Как работает BIP47 ?

Многоразовый платежный код ?

Криптографический метод: [https://vk.com/wall-62032126?s=16&q=Elliptic-Curve%20Diffie-Hellman|Elliptic-Curve Diffie-Hellman] (ECDH) ?

Транзакция уведомления ?

Построение транзакции уведомления ?

Получение транзакции уведомления ?

Платежная транзакция BIP47 ?

Получение BIP47-платежа и получение закрытого ключа ?

Возврат BIP47-платежа ?

Производные варианты использования PayNym ?

Мое мнение о BIP47 ?

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

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

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

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

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

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

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

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

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

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

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

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

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

Большая часть таких случаев повторного использования приходится на биржи, которые при этом руководствуются соображениями простоты и эффективности. И на сегодняшний день BIP47 является наилучшим решением для пресечения этого явления на биржах. Переход биржевых кошельков на этот стандарт позволил бы значительно снизить общий уровень повторного использования адресов, не создавая больших сложностей для этих субъектов сети. Измерение общего показателя по сети в данном случае совершенно уместно. Действительно, переиспользование адреса является проблемой не только для его обладателя, но и для всех, кто отправляет транзакции на этот адрес. Утрата конфиденциальности в Биткойне действует как вирус, распространяясь от пользователя к пользователю. Отслеживание общего показателя для всех транзакций сети позволяет нам осознать масштабы явления.

Принципы работы BIP47 и PayNym

Цель BIP47 состоит в том, чтобы предложить пользователям простой способ получать большое количество платежей без повторного использования адресов. Принцип его работы основан на использовании многоразового платежного кода.

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

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

Для совершения обмена обоим пользователям необходимо иметь биткойн-кошелек с поддержкой BIP47, как, например, PayNym в Samurai или Sparrow Wallet. Связывание платежных кодов двух пользователей позволит установить между ними секретный канал. Для этого отправителю понадобится выполнить транзакцию-уведомление в блокчейне Биткойна; далее я расскажу об этом подробнее.

Связывание платежных кодов двух пользователей создает совместный секрет, позволяющий генерировать большое количество уникальных адресов получения BTC (2^32, если быть точным). Таким образом, в действительности платеж с BIP47 отправляется не на платежный код, а на вполне классического вида адреса, генерируемые из платежных кодов протагонистов.

То есть платежный код работает как виртуальный идентификатор, полученный из seed-значения кошелька. В структуре деривации [https://vk.com/wall-62032126?s=89&q=HD-%D0%BA%D0%BE%D1%88%D0%B5%D0%BB%D1%8C%D0%BA%D0%B0|HD-кошелька] платежный код находится на глубине 3, на уровне счетов кошелька.

Его цель деривации отмечена как 47? (0x8000002F), от BIP47. Путь деривации многоразового платежного кода будет, например, таким:

m/47'/0'/0'/

И для примера того, как выглядит сам платежный код, вот мой:

PM8TJSBiQmNQDwTogMAbyqJe2PE2kQXjtgh88MRTxsrnHC8zpEtJ8j7Aj628oUFk8X6P5rJ7P5qDudE4Hwq9JXSRzGcZJbdJAjM9oVQ1UKU5j2nr7VR5

Он также может быть закодирован в QR-код для облегчения коммуникации:

Что касается PayNym-ботов — картинок с роботами, которые можно встретить в криптотвиттере, — то это просто визуальные представления вашего платежного кода, сгенерированные Samourai Wallet. Они создаются с помощью хеш-функции, что делает каждое такое изображение уникальным. Вот так выглядит мой, с идентификатором:

+throbbingpond8B1

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

Для пользователя процесс платежа по BIP47 через PayNym выглядит очень просто. Допустим, Алиса хочет отправить несколько платежей Бобу:

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

Алиса открывает кошелек Samurai или Sparrow и сканирует либо вставляет платежный код Боба.

Алиса включает отслеживание PayNym Боба, нажимая «Follow». Эта операция не записывается в блокчейн и совершенно бесплатна.

Алиса устанавливает-соединение между своим PayNym и PayNym Боба, нажимая «Connect». Эта операция выполняется ончейн, и Алиса должна заплатить комиссию за транзакцию, а также фиксированную комиссию Samourai в размере 15 000 сатоши за предоставление услуги. Этот шаг называется «транзакцией уведомления».

После подтверждения транзакции уведомления Алиса может создать платежную транзакцию по BIP47 в адрес Боба. Его кошелек при этом автоматически сгенерирует новый пустой адрес получения, закрытый ключ для которого есть только у Боба.

Транзакция уведомления, т.е. установление соединения между вашим PayNym и PayNym получателя, является обязательным предварительным шагом для осуществления BIP47-платежей. С другой стороны, как только это будет сделано, отправитель сможет совершить множество (2^32) платежей получателю, не беспокоясь о повторном использовании адресов и без необходимости в повторной транзакции уведомления.

Как видите, есть две раздельные операции, позволяющие установить соединение между PayNym пользователей: Follow и Connect. Операция установления соединения («Connect») соответствует транзакции уведомления по BIP47, которая представляет собой простую биткойн-транзакцию с определенной информацией, передаваемой в OP_RETURN выходе. Она помогает установить зашифрованное соединение между двумя пользователями для последующего создания общего секрета, необходимого для генерации новых пустых адресов для получения BTC.

С другой стороны, операция включения отслеживания («Follow» или «Link») позволяет установить соединение между пользователями в Soroban, зашифрованном протоколе связи на основе Tor, специально разработанном командами Samourai.

Резюмируя:

Простое отслеживание («follow») PayNym другого пользователя абсолютно бесплатно. Это помогает установить зашифрованное офчейн соединение, в частности, для использования инструментов коллаборативных (Stowaway или...


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

Комментарии: