Почему биткойн-кошелькам нужны фильтры блокировки

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

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

В этой статье мы рассмотрим, почему биткойн-кошелькам нужны блочные фильтры, сначала посмотрим, сколько пользователей биткойнов используют полные узлы, как кошельки API предлагают хороший пользовательский интерфейс, но в конечном итоге приводят к тому, что все ваши транзакции связаны друг с другом, и как фильтры Блума не могут защитить конфиденциальность, как блочные фильтры являются единственным облегченным решением для обеспечения конфиденциальности сети кошелька, и, наконец, как все это можно реализовать с использованием связи только через Tor, чтобы также защитить IP-адрес пользователя.

Лишь немногие пользователи запускают полные узлы

Запуск и использование узла Биткойн — лучшее, что вы можете сделать, поскольку вы являетесь частью сети и вам не нужны посредники для получения и передачи данных о транзакциях. Однако очевидно, что запуск полного узла подходит не всем; существование и потребность в легких клиентах (простая проверка платежей) была даже предусмотрена Сатоши в официальном документе Биткойна.

Мы не можем знать, сколько пользователей используют полный узел, мы можем знать только количество узлов. По скромным оценкам, учитывающим только прослушивающие узлы, это число составит около 16 000, как видно на сайте Bitnodes.io. Более точные оценки, подсчитывающие как прослушивающие, так и непрослушивающие узлы, такие как инструмент подсчета узлов Люка Дашджара, показывают, что это число выше — около 53 000.

Также важно знать исторический контекст количества полных биткойн-узлов. Согласно истории подсчета узлов биткойнов Люка Дашджара, мы можем наблюдать, что использование узлов биткойнов далеко от своего пика. 13 января 2018 года их число достигло 205 000. Это было во многом связано с тем фактом, что биткойн достиг своего предыдущего рекордного максимума несколькими неделями ранее. В 2021 году мы можем наблюдать, что количество узлов также увеличилось с ростом цены, но достигло лишь почти 90 000.

Мы можем подтвердить, что на биткойн-узлах работает немного пользователей, и что это число не увеличивается с течением времени. Легкие кошельки гораздо проще использовать, чем биткойн-ноды, и нам нужно найти правильное решение для обеспечения конфиденциальности сети. Давайте посмотрим на наиболее используемую сегодня технологию — API-кошельки.

Поставщики услуг API-кошельков собирают ваши данные по умолчанию

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

Когда вы инициализируете стандартный биткойн-кошелек, вы импортируете или создаете мнемоническую начальную фразу и устанавливаете желаемый путь деривации (часто автоматически). Это дает вам главный открытый ключ, часто называемый xpub. Вот как это выглядит:

xpub6CUGRUonZSQ4TWtTMmzXdrXDtypWKiKrhko4egpiMZbpiaQL2jkwSB1icqYh2cfDfVxdx4df189oLKnC5fSwqPfgyP3hooxujYzAu3fDVmz

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

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

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

Почему фильтры Блума не обеспечивают конфиденциальность

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

Фильтры Блума — это вероятностные структуры данных, используемые для проверки того, является ли элемент членом набора. В контексте Биткойна фильтры Блума создаются легким клиентом и отправляются узлам сети, которые проверяют, существует ли совпадение между адресом (элементом) и данными блокчейна (набором). Если есть совпадение, данные транзакции отправляются легкому клиенту. Это вероятностный подход, поскольку бывают ложные срабатывания, но они позже отбрасываются легким клиентом.

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

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

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

Биткойн-кошелек нуждается в блокирующих фильтрах для обеспечения конфиденциальности

Еще в 2018 году реального решения этой проблемы не было, блочных фильтров еще не было. К счастью, они были представлены в следующем году в BIP157 и 158, а теперь реализованы в нескольких кошельках и биткойн-программах, таких как Wasabi, Blixt, Breez, LND и LDK. Их часто называют нейтрино. В этом разделе мы рассмотрим, как они работают и почему они являются правильным решением для обеспечения конфиденциальности в сети.

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

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

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

Блочные фильтры являются частью решения проблемы конфиденциальности сети, но для полноты картины необходимо кое-что еще.

Tor — последняя оставшаяся часть решения проблемы конфиденциальности сети

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

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

Например, сообщество Tor внедрило решение для обеспечения надежности связи под названием Conflux. Вместо того, чтобы делать один запрос, клиенты делают два запроса, используя два разных канала Tor, чтобы повысить вероятность быстрого завершения. Это, наряду с инновациями в загрузке кошелька для блочных фильтров, таких как Turbosync в кошельке Wasabi, приведет нас к будущему, в котором пользователю не придется выбирать между удобством использования и конфиденциальностью, но он сможет наслаждаться обоими.

Это гостевой пост от Густаво Флорес Эшаис. Выраженные мнения являются исключительно их собственными и не обязательно отражают точку зрения BTC Inc или Bitcoin Magazine.

Исходная ссылка