Избежание слияний: методы повышения Политика конфиденциальности в протоколе Bitcoin
Разработчик Bitcoin CORE Майк Хирн обсуждает утечки Политика конфиденциальности и новую технику, которую он назвал «избегание слияния».
Майк Хирн — разработчик программного обеспечения, работающий в команде разработчиков Bitcoin CORE , а также в Google. В этой статье Майк обсуждает некоторые утечки Политика конфиденциальности Bitcoin и новую технику, которая пока не имеет названия, но которую он называет избегание слияния.
Введение в Политика конфиденциальности Bitcoin
К сожалению, несмотря на репутацию биткоина в прессе, его пользователи в настоящее время допускают утечку большого объема личной информации.
Удручающе легко, что кто-то Словарь о вашем балансе, истории торговли и т. д. Защита этой информации является базовой функцией любой полезной финансовой системы.
Вот несколько утечек, которые возникают при ежедневном использовании.
Повторное использование адреса
Многие проблемы с Политика конфиденциальности в Bitcoin вызваны тем, что злоумышленник узнает, какие выходы принадлежат одному и тому же кошельку. Если вы можете это вычислить, вы можете узнать баланс кошелька и, возможно, с кем он торговал.
Наиболее распространенный способ, которым это происходит, — повторное использование адресов. Это легко понять, поскольку популярные сайты, такие как blockchain.info, индексируют выходы и транзакции по адресу, что позволяет быстро находить все транзакции, которые ссылаются на любой заданный адрес.
Повторное использование адресов имеет много разных корневых причин. Вот несколько примеров:
1. Проблемы с кошельком конечного пользователя
Библиотека bitcoinj всегда повторно использует адреса по Политика, таким образом, выдавая много личной информации. Для этого есть две причины. ONE заключается в том, что до разработки HD-кошельков постоянное использование ключей приводило к аннулированию старых резервных копий кошельков.
У Bitcoin-Qt есть «пул ключей», чтобы попытаться решить эту проблему, но это только откладывает проблему: пул ключей может быть тихо исчерпан, что приведет к той же проблеме. Недействительные резервные копии могут привести к потере денег.
После внедрения HD-кошельков (что уже происходит) эта проблема исчезнет, и останется только вторая проблема — нехватка памяти на бюджетных телефонах. Повторное использование адресов может потребоваться на таких устройствах, но на более дорогих телефонах и настольных компьютерах/ноутбуках проблем возникнуть T должно.
2. Проблемы с серверным кошельком
Не существует публичных реализаций кошельков с открытым исходным кодом, которые масштабируются до кошельков с очень большим количеством ключей. Насколько мне известно, биржам и основным платежным процессорам пришлось реализовать множество пользовательского кода, чтобы обойти отсутствие масштабируемости Bitcoin-Qt (и bitcoinj).
Это вынуждает получателей повторно использовать адреса.
3. Социальные условности
Люди вставляют статические адреса в подписи на форумах, QR-коды и ETC.
Со временем нам нужно будет добиться прогресса во всех этих вопросах, чтобы сократить повторное использование адресов. HD-кошельки и платежный протокол являются важными инструментами, которые помогут нам достичь этого.
Изменить выходы

ONE из самых раздражающих утечек Политика конфиденциальности в Bitcoin является то, что посторонние узнают нижние границы вашего баланса.
Как это работает, можно интуитивно понять с помощью аналогии с наличными деньгами. С бумажными деньгами, если вы отдаете купюру в 500 CHF, чтобы заплатить за напиток стоимостью всего 5 CHF, бармен узнает, что ваш баланс составляет не менее 495 CHF. Конечно, он может быть выше, но по крайней мере не ниже. У Bitcoin та же проблема.
Основной причиной этой проблемы является несоответствие между размером платежа, который вы хотите сделать, и доступными вам монетами (выходами).
Если несоответствие происходит в ONE направлении, у вас будет много крошечных выходов, и осуществление платежей на любые не крошечные суммы начнет обходиться в большие комиссии, поскольку генерируемые вами транзакции будут огромными.
Если несоответствие в другую сторону, то для оплаты небольшой вещи потребуется использовать большую монету, а выдаваемая сдача будет содержать ценную информацию о том, насколько вы богаты.
Сетевой трафик
Соединения Bitcoin P2P не зашифрованы. ONE из причин заключается в том, что большая часть данных, проходящих через сеть P2P, является публичной, поэтому шифрование кажется бессмысленным.
Другая причина заключается в том, что по своей природе, когда вы подключаетесь к P2P-сети, вашими участниками могут быть абсолютно все, кто угодно, и делать все, что угодно, например, это могут быть узлы, управляемые АНБ.
И это даже не плохо! Почему бы АНБ T запускать узлы? Если бы кто-то сказал им не делать этого, это означало бы наличие некоего центрального органа, который диктует, кто может запускать Bitcoin , а кто T. Мы этого T хотим.
Так что шифрование данных полезно, когда у вас есть четкое представление о том, кто должен их видеть, а кто T. Шифрование общедоступных данных для случайных людей, о которых вы ничего не знаете, — не так уж и полезно.
Несмотря на все это, есть еще четыре причины, по которым шифрование соединений было бы полезно.
The первая причина для Фильтры Блума.
Это компактные представления того, что относится к вашему кошельку: как правило, какие адреса/ключи в нем находятся. Фильтр ONE и может быть шумным, то есть вы T можете считывать адреса напрямую из фильтра, вы можете только применить его к цепочке блоков и посмотреть, что соответствует.
Фильтры могут иметь ложные срабатывания, поэтому узел никогда не может быть уверен, действительно ли адрес ваш или нет. Это довольно хорошо, но даже при высоком уровне ложных срабатываний это все равно сужает круг монет, которыми вы можете владеть, довольно значительно.
Фильтры Блума не являются публичной информацией, они просто передаются клиенту и узлу, к которому он подключается. Поэтому было бы неплохо скрыть их от пассивных подслушивателей, например, людей, которые делят вашу точку доступа Wi-Fi.
The вторая причина заключается в том, что, хотя транзакции являются публичными, их исходный IP-адрес не является (или не должен быть таковым).
Однако злоумышленник, который может отслеживать множество интернет-соединений, может довольно надежно определить, где началась транзакция, точно зафиксировав время ее первого появления и изучив первый момент ее прохождения по оптоволоконному LINK.
Похоже, что некоторые разведывательные агентства могли бы проводить такой анализ. Шифрование ссылок T гарантирует исправления этой проблемы, поскольку временной анализ все еще может быть возможен, но это определенно усложняет его.
The третья причиназаключается в том, что если бы шифрование было объединено с аутентификацией «доверие при первом использовании» (TOFU), то даже активным MITM-мошенникам было бы сложнее проводить атаки Сивиллы на кошельки и передавать им неверные данные.
Это важнее для клиентов SPV, чем для полных узлов, но обе стороны могут выиграть.
The последняя причина при правильной реализации использование SSL для P2P-соединений затруднит их идентификацию и блокировку с помощью устройств глубокой проверки пакетов.
МонетаПрисоединиться
Из всех вышеперечисленных проблем решение проблемы утечки данных через выходные данные изменений является ONE из наиболее горячо обсуждаемых (хотя многие люди T осознают, что они обсуждают его).
TheПредложение CoinJoin получил много внимания и несколько начальных реализаций. Некоторые люди видят в этом в первую очередь инструмент Политика конфиденциальности , а другие — способ попытаться обойти отслеживание монет.
При использовании в целях Политика конфиденциальности его можно лучше всего описать как способ попытаться удалить информацию, которая уже была раскрыта.
Однако у CoinJoin есть ряд серьезных проблем, которые делают желательной альтернативу.
Его крайне сложно реализовать, он уязвим для атак Сивиллы/DoS (в данном контексте это часто одно и то же), юридически сомнителен, и неясно, работает ли вообще обфускация.
TheКража на рынке овец видел, как кто-то утверждал, что отслеживает монеты через миксеры и миксеры, и, по-видимому, с некоторым успехом. ONE из инструментов трассировщика были атаки Sybil/DoS на сервисы смешивания, так что это не теоретическая проблема.
Хотя игрушечные реализации не так уж сложны в реализации, надежные реальные реализации с правильной обработкой тайм-аутов, проверками безопасности, хорошей интеграцией пользовательского интерфейса кошелька и ETC. требуют гораздо больше усилий.
Пока только blockchain.info удалось создать ONE (на sharedcoin.com), и вам просто нужно верить, что он T KEEP логи. В противном случае любой, у кого есть логи, мог бы распутать.
Возможно, наименее обсуждаемой проблемой является пользовательский опыт.
Транзакция CoinJoin требует участия других людей. Чем больше людей примет участие, тем лучше. Однако пик Bitcoin в настоящее время составляет всего около ONE транзакции в секунду.
Даже если бы все транзакции были объединены с помощью CoinJoined и все встречались в одной точке (к черту, централизация!), вам все равно пришлось бы ждать 10–15 секунд, чтобы собрать достаточно участников для смешивания.
Это только для запуска протокола. Затем все эти участники должны будут извлечь транзакцию-кандидата и подписать ее. Если тайм-аут, все придется начинать сначала.
В плохих условиях этот процесс может легко занять минуту или даже больше, особенно если у некоторых участников нестабильные сети (например, телефоны) и они используют Tor. Учитывая, что мы пытаемся улучшить производительность, а не уменьшить ее, это само по себе кажется большой проблемой.
Хотя увеличение трафика и использования помогло бы решить эту проблему, даже если бы трафик увеличился вдвое, разделение единой центральной точки встречи немедленно вернуло бы время ожидания на ONE позицию.
Эту проблему можно решить, выполняя CoinJoins в фоновом режиме, без привязки к фактическим расходам.
Это решает проблему ожидания в очереди в кофейне, но затем за эти транзакции необходимо платить комиссию, и может быть сложно объяснить людям, почему их баланс внезапно упал за одну ночь из-за неожиданного налога на Политика конфиденциальности .
Такого рода неприятный сюрприз сделал бы Bitcoin довольно непривлекательным для обычных пользователей. Это также поднимает вопрос о том, когда и как часто это делается.
Избегание слияния
Поскольку распространенной причиной утечек Политика конфиденциальности является несоответствие размеров доступных монет требуемым, похоже, мы могли бы подойти к проблеме с другой стороны: избегать создания любых утечек информации, которые необходимо удалить в первую очередь.

Рассмотрим случай ALICE, работницы кофейни, которая получает зарплату.
ALICE отлично справляется со своей работой, и ее начальник отмечает это, выплачивая ей более высокую, чем обычно, зарплату.
Ее коллега Боб подозревает, что ему платят T , чем ALICE , и хочет это знать, поэтому убеждает ALICE сделать ему небольшой платеж сразу после дня выплаты зарплаты (возможно, они заключают пари, и Боб выигрывает).
С обычным Bitcoin кошелек Алисы, вероятно, будет использовать ее зарплатный вывод, и изменение покажет, сколько она получает. Даже если она уже сделала несколько платежей, Боб может Социальные сети цепочку транзакций в обратном направлении, пока не найдет достаточно круглое число на нужную дату и сделать вывод, что это, скорее всего, ее зарплатный платеж.
Plain CoinJoin ей тоже T поможет. Она бы ввела ONE большой вход в микс и получила бы ONE большой выход.
Она могла бы Request множество меньших выходов, но вход все равно будет размером с зарплату и в нужную дату. Если только множество людей, которые получают зарплаты размером с кофейню, не разделяют одну и ту же транзакцию CoinJoin, утечка T была устранена.
Что ей действительно нужно, так это избегать когда-либо такого большого одиночного выхода в первую очередь. Давайте назовем это избеганием слияния.
Когда она представляет свойRequest на оплату BIP 70 она просит у своего работодателя купюры разных номиналов, как будто она покупает наличные в пункте обмена валюты.
Request также указывает уникальный адрес для каждого выхода. Платежный протокол не определяет, как кошелек должен удовлетворить этот Request, но он допускает возможность того, что кошелек отправителя отправит несколько независимых транзакций, чтобы удовлетворить желаемые выходы.
[после цитаты]
Если ее работодатель использует старый кошелек, который T понимает избегания слияний, он сгенерирует и отправит ей одну гигантскую транзакцию, которая будет содержать множество входов (от всех сортов кофе) и все запрошенные ею выходы.
Это будет выглядеть очень похоже на транзакцию CoinJoin, но у нее только один участник. Однако нет способа узнать это, просто взглянув на цепочку блоков.
Если ее работодатель использует более новый кошелек, который понимает предотвращение слияний, то произойдет нечто лучшее — она получит ряд различных, более мелких транзакций, каждая из которых создаст ONE или два запрошенных ею выхода.
Ничто не LINK их вместе. Поскольку она доверяет своему работодателю, который не тратит дважды, она может растянуть трансляцию так, что даже время не выдаст их.
Если выбор выходов выбран разумно, она никогда не окажется в ситуации, когда у нее будут выходы неловко большие или маленькие для определенного платежа. Боб просто увидит небольшую транзакцию, которая дает небольшой выход сдачи, и неважно, как далеко он проследит, он никогда не найдет выход размером с зарплату. ALICE побеждает!
Выходы сдачи могут утечь данные другим способом. Боб потерпел неудачу в своей попытке Словарь зарплату Алисы, проследив цепочку блоков в обратном направлении, но он все еще может посмотреть выход сдачи полученного им платежа, чтобы узнать, что с ним происходит.
Если впоследствии это изменение объединяется со многими другими и создается огромная сумма платежа, он внезапно понимает, что у ALICE должно быть по крайней мере столько денег.
Здесь CoinJoin, похоже, должен работать — если изменение попадает в микс, кто может сказать, кому принадлежат выходы? Но это хрупко. Даже если выходы имеют случайный размер, при отсутствии предотвращения слияния они будут снова рекомбинироваться для осуществления крупного платежа.
Если ALICE случайно упомянет, что собирается в отпуск со своим парнем, Боб может посмотреть на результаты микса, в который были внесены ее изменения, и подождать, пока некоторые из результатов будут рекомбинированы.
Если 1/3 отдачи останется неизрасходованной, 1/3 будет потрачена без какого-либо существенного объединения, а еще 1/3 будет объединена в платеж в размере 5000 долларов вечером перед тем, как ALICE упомянет о своем отпуске, то можно с большой долей вероятности предположить, что поездка обойдется ей в 5000 долларов.
Свойства реализации
У этой схемы есть несколько преимуществ, которые делают ее удобной для реализации:
- Его можно писать постепенно – простой и не очень умный алгоритм может, тем не менее, все еще улучшить чью-то Политика конфиденциальности. Позже можно разработать и внедрить лучший алгоритм, но он T требует сложных глобальных обновлений. Это хорошо подходит для модели разработки добровольных рывков и рывков, конкурирующих кошельков, которая есть у Bitcoin .
- Он очень прост и не имеет движущихся частей или больших конечных автоматов. Вам T нужно беспокоиться о случайном мобильном телефоне на другом конце света, который въедет в туннель в неподходящий момент или запустит глючную повторную реализацию программного обеспечения.
- Нет никакой централизации, даже никаких временных серверов встреч.
- Никаких юридических рисков нет, поскольку вы не полагаетесь на какие-либо услуги, которые можно было бы считать инструментами для отмывания денег.
- Он надежный. Выше я привел примеры того, как CoinJoin может работать, но при этом давать утечку при наличии очень малого количества дополнительной информации. Уклонение от слияния T имеет такой проблемы.
Есть и некоторые недостатки:
- Насколько хороша ваша Политика конфиденциальности , во многом зависит от того, насколько умно люди, отправляющие вам деньги, создают транзакции. Таким образом, ваша Политика конфиденциальности зависит от людей, у которых может не быть особого стимула что-либо с этим делать. Надеюсь, что обычное программное обеспечение кошелька будет делать все правильно по умолчанию.
- Это увеличивает количество транзакций, хотя накладные расходы не так высоки, как вы могли бы подумать — транзакция — это просто список входов, выходов и двухполевой заголовок (версия и время блокировки). Входы и выходы на самом деле не изменяются в хорошей реализации CoinJoin, а версия/время блокировки могут быть легко сжаты/кодированы varint для экономии места. Разница будет порядка байтов, а не килобайтов.
- Он полагается на платежный протокол. Но на него полагается многое, и платежный протокол имеет решающее значение для борьбы с повторным использованием адресов, что необходимо для работы всех предлагаемых схем Политика конфиденциальности . Важно, чтобы мы сделали BIP70 максимально простым и распространенным.
Избегание слияния T мешает отслеживанию монет. Некоторые люди могут захотеть внедрить системы CoinJoin только по этой причине.
Однако я T могу себе представить, чтобы это стало широко распространенным. Если Политика конфиденциальности людей защищается другими способами, то CoinJoin становится системой «помощи ворам спрятать украденные деньги», что снижает стимул к участию, еще больше увеличивает юридический риск и заставляет людей задуматься, почему их приложения-кошельки просят их платить комиссию просто для того, чтобы защитить людей, которых они, скорее всего, считают плохими.
Кроме того,Инцидент на овечьем рынкепоказывает, что децентрализованная борьба с преступностью как метод иногда является единственным вариантом: никто не попросит полицию помочь вернуть украденные деньги от продажи наркотиков, и ни одно правительство не станет помогать, даже если они это сделают.
Эта статья была первоначально опубликована наСередина
Изображение клавиатуры Политика конфиденциальностичерез Shutterstock
Mike Hearn
Майк Хирн — разработчик программного обеспечения, специализирующийся на низкоуровневом системном программном обеспечении. Ранее он работал в Google, а сейчас фокусируется на системе виртуальной валюты Bitcoin .
