В этой статье мы попытались ответить на вопрос, что такое конфиденциальность и как ее можно достичь в биткойнах и других цифровых валютах.
Кроме того, здесь вы узнаете о конкретных механизмах достижения конфиденциальности, а также о том, как они применяются на практике.
Тема будет интересна тем, кто непосредственно работает с криптовалютами, а также любителям протоколов, повышающих уровень конфиденциальности пользователей.
Давайте определимся с терминами
Тема конфиденциальности и способов ее обеспечения достаточно обширна.Лучшее место для начала его изучения — понимание основных определений.
Понятие конфиденциальности включает в себя два основных компонента: неотслеживаемость и анонимность.
Неотслеживаемость, или неотслеживаемость, подразумевает невозможность приписать группу действий определенному пользователю в сети.
Анонимность, или анонимность, связана с невозможностью достоверно идентифицировать пользователя в данной сети.
Конфиденциальность в Биткойне по умолчанию
Биткойн обладает свойством анонимности, но на практике его очень легко потерять.Свойство неотслеживаемости также не полностью достигается.
Мы можем проанализировать график транзакций и сделать вывод об их причастности к определенным анонимным кошелькам.
Если хотя бы один адрес был скомпрометирован в условиях анонимности, то можно установить причастность определенных лиц.
Простейшая реализация биткойн-кошелька может обеспечить лишь минимальный уровень конфиденциальности.
Допустим, для каждого входящего платежа или изменения пользователь создает новый адрес.
В этом случае аудитор, анализирующий граф транзакций, уже не может достоверно связать конкретные факты, касающиеся действий пользователей и распределения валюты между ними.
Но даже в этой ситуации конфиденциальность не так безопасна, как может показаться.
Обычно в сети Биткойн ваша конфиденциальность зависит от ваших контрагентов.
Тот, кто принимает платеж, знает историю монет, а тот, кто отправляет монеты, знает, куда он их переводит. Более того, существует ряд метаданных, которые могут быть доступны посторонним: характер транзакции, данные кошелька, данные о местоположении пользователя и т. д. Какие данные транзакций следует скрывать в первую очередь, чтобы обеспечить максимальный уровень конфиденциальности? Сюда входит информация о происхождении монет, которая относится к свойству взаимозаменяемости или взаимозаменяемости.
Это очень важно для любых денег и ценностей.
На уровне протокола Биткойн это свойство обеспечивается (все монеты одинаковы и правила их обработки общие для всех), но на практике взаимозаменяемость легко нарушить.
Например, некоторые торговцы могут анализировать историю происхождения принятых монет и отклонять платежи, если у них есть сомнения по этому поводу.
Следующее, что имеет смысл скрыть, — это суммы переводов, адреса отправителя и получателя в теле транзакции.
Также важно скрыть сетевые адреса пользователей, чего обычно достигают с помощью даркнетов, использующих такие протоколы, как Freenet, TOR и I2P. Как скрыть суммы, историю и адреса?
CoinJoin
Самый простой метод запутывания графа транзакций называется CoinJoin. Вот с чего мы начнем.Его суть заключается в создании совместной транзакции, в результате которой происхождение отправляемых монет становится неоднозначным.
Формируется группа пользователей, которые создают общую транзакцию, в рамках которой одновременно осуществляется несколько платежей.
То есть пользователям не нужно создавать отдельные транзакции.
Эту идею впервые предложил Грегори Максвелл в 2013 году на популярном форуме BitcoinTalk. С тех пор было предложено и разработано множество модификаций этого метода.
Каждый из них улучшил определенные свойства платежа.
Давайте поговорим о том, как работает CoinJoin в чистом виде, а затем рассмотрим некоторые его наиболее интересные модификации.
Как работает CoinJoin
Представьте себе группу из трех пользователей, в которой каждый хочет приобрести товар в интернет-магазине (у каждого из них свой магазин).
Они создают одну транзакцию на три входа, по одному от каждого пользователя, три выхода, по одному на каждый интернет-магазин.
Кроме того, для перемен созданы еще три выхода.
Далее все результаты случайным образом перемешиваются.
Каждый пользователь дважды проверяет полученную транзакцию и подписывает соответствующую запись.
В случае успеха транзакция считается корректной, передается в сеть и получает подтверждение.
Отличия CoinJoin от обычной транзакции
На диаграмме ниже показана разница между графиками обычных транзакций и транзакциями CoinJoin.Вверху расположен график, где каждая транзакция имеет один или два выхода, а внизу транзакции уже имеют три выхода.
Нижний график более запутан и труден для анализа.
Когда CoinJoin реализуется в биткойн-кошельке, формируется большая группа пользователей.
Тогда транзакции могут иметь десятки входов и выходов (иногда больше).
Изображенный на плоскости график таких транзакций окажется весьма запутанным.
Монета, прошедшая цепочку таких транзакций, имеет тысячи возможных источников.
Среди всех вариантов сложно найти настоящий.
Chaumian CoinПрисоединиться
Мы подошли к модификации CoinJoin под названием Chaumian CoinJoin. И это предложил тот же Грегори Максвелл.Здесь задействован централизованный оператор и используется слепая подпись.
Оператор нужен для выполнения смешивания входов и выходов, а затем составления итоговой транзакции.
Но оператор не может украсть монеты или нарушить конфиденциальность смешивания благодаря слепой подписи.
Пользователь предварительно слепит данные перед передачей их оператору.
Когда оператор подписывает эти данные, он не видит реального контента.
Подписанные данные возвращаются пользователю, после чего он снимает ослепление и всё выглядит как обычная электронная подпись.
Как происходит взаимодействие пользователя и оператора при формировании общей транзакции? Каждый пользователь заранее готовит вход, куда тратятся его монеты, адрес для приема сдачи и слепой адрес для отправки платежа, после чего объединяет эти данные в одну последовательность и передает оператору.
Оператор проверяет ввод и сумму платежа, подписывает адрес вывода и возвращает подпись пользователю.
В этом случае оператор не видит адрес, на который пользователь хочет отправить платеж, так как он ослеплен.
Далее пользователь снимает ослепление с выходного адреса, анонимно переподключается к оператору и передает ему подписанный выходной адрес.
Оператор, в свою очередь, проверяет, что он действительно подписал этот адрес своим ключом и что у него уже есть соответствующий вход, но он не может знать, какой вход какому выходу соответствует. После того, как все пользователи выполнили такие действия, они снова анонимно подключаются к оператору и предоставляют подписи, подтверждающие владение монетами на входе общей транзакции.
Завершенная транзакция может быть распространена в сеть для подтверждения.
В этом случае ни пользователи, ни сам оператор не смогут деанонимизировать монеты на выходных адресах.
А в обычных условиях генерация транзакции занимает не более одной минуты.
Взаимодействие с пользователем должно осуществляться через анонимные сети передачи данных, которыми могут быть TOR, I2P или Bitmessage. Среди пользователей могут быть недобросовестные участники, цель которых – любыми способами сорвать процесс создания общей транзакции.
Существует целый список возможных сценариев поведения пользователей, в том числе мошеннических.
Для противодействия неблагоприятным сценариям разработан ряд механизмов защиты, которые позволяют честным пользователям гарантированно сформировать финальную транзакцию.
Механизмы защиты используют таймауты, отслеживание неизрасходованных выходов и т. д. Подробнее обо всех сценариях и механизмах защиты можно узнать отдельно.
Теперь рассмотрим следующую модификацию CoinJoin, которая называется CoinShuffle.
МонетаShuffle
Модификация CoinShuffle была предложена в 2014 году.Здесь больше нет центрального оператора и это стало преимуществом.
Пользователи самостоятельно формируют общую транзакцию, общаясь друг с другом.
Однако они по-прежнему не могут нарушить конфиденциальность смешивания выходных адресов.
Еще одним преимуществом данной методики является то, что пользователям не придется использовать дополнительные сети для анонимизации трафика, поскольку все необходимые свойства будут достигнуты с использованием одного P2P-протокола взаимодействия между участниками.
Здесь используется направленное шифрование, где используется пара ключей (открытый и закрытый).
Сообщение шифруется с помощью открытого ключа, и только владелец закрытого ключа может его расшифровать.
Для связи между участниками используется протокол DiceMix, а также обеспечивается противодействие нарушителям.
Визуально о CoinShuffle
Давайте разберемся, как работает CoinShuffle.Представьте себе небольшую группу пользователей: хитрую Алису, мудрого Боба, бородатого Чарли и оранжевого Дэйва.
У каждого из них есть по одной неизрасходованной монете в блокчейне Биткойна по адресам A, B, C и D соответственно.
Каждый хочет потратить монету и скрыть историю ее происхождения.
Для этого каждый член группы узнает адрес, на который должна быть отправлена монета A, B, C или D соответственно, но не раскрывает этот адрес другим членам.
Далее каждый генерирует новую пару ключей для направленного шифрования, после чего члены группы обмениваются между собой открытыми ключами для шифрования, причем новый открытый ключ подписывается закрытым ключом, соответствующим адресу с неизрасходованной монетой.
Все сообщения участников при последующих взаимодействиях будут подписаны таким же образом.
Это был первый этап.
Участники перемешиваются и выстраиваются в очередь.
Алиса будет первой, потому что она хитра, Боб будет вторым, потому что он мудр и т. д. Теперь Алиса берет A' и шифрует в направлении Дэйва, используя соответственно открытый ключ Дэйва.
Алиса снова шифрует полученный зашифрованный текст и направляет его Чарли.
Этот зашифрованный текст снова зашифрован, но на этот раз направлен на Боба.
Алиса отправляет результат шифрования Бобу.
Боб расшифровывает полученное сообщение своим секретным ключом.
Затем он берет B’ и шифрует его в направлении Дэйва, затем в сторону Чарли и добавляет в список.
Он случайным образом перемешивает этот список и передает его Чарли.
Чарли, в свою очередь, расшифровывает элементы списка своим закрытым ключом, добавляет в список C', зашифрованный, нацеленный на Дэйва, и перемешивает все элементы списка случайным образом.
Список передается Дейву, который его расшифровывает, получает открытые данные адресов для отправки монет, добавляет адрес D’, перемешивает его случайным образом и на основе этих адресов, известных транзакционных входов и сумм формирует общую транзакцию.
Дэйв распространяет шаблон транзакции среди остальных членов группы.
Далее каждый тщательно проверяет, содержит ли вывод транзакции нужный адрес и совпадает ли сумма.
Если все хорошо, участник подписывает транзакцию, подтверждая право собственности на свои входные монеты.
Участники обмениваются подписями, и если транзакция получает все необходимые подписи, она может быть распространена в сети для подтверждения.
Если один из участников начинает отклоняться от основного сценария взаимодействия, то остальные могут совместно проанализировать историю взаимодействия и удалить обидчиков из группы, чтобы повторить все без них.
Это важная особенность.
Обратите внимание, что готовые реализации CoinShuffle уже существуют. И на практике они эффективно работают даже на группах в несколько десятков пользователей.
В настоящее время ожидается интеграция этого протокола в некоторые биткойн-кошельки, в том числе мобильные.
Каковы недостатки метода CoinJoin?
Очевидно, что при оффчейн-взаимодействии для формирования транзакции существует большая сложность, т.е.необходимо организовать формирование групп и взаимодействие участников друг с другом.
Но более существенным недостатком является то, что CoinJoin в чистом виде не скрывает суммы переводов.
В результате он уязвим для анализа CoinJoin Sudoku, который основан на сопоставлении сумм выходов транзакций и позволяет разгадать историю происхождения монет после многократного ее запутывания.
Да, с этой проблемой можно бороться, например, используя для выходных значений транзакций только определенные суммы (0,1 BTC, 1 BTC, 10 BTC и т. д.), но это создает дополнительные трудности и ограничения.
Поэтому рассмотрим совершенно другой метод, решающий проблему открытых сумм перевода – Конфиденциальные транзакции.
Конфиденциальные транзакции
Особенность метода конфиденциальных транзакций (КТ) заключается в том, что он полностью скрывает от третьих лиц реальные суммы транзакционных входов и выходов.Любой может проверить, что сумма всех выходов не превышает сумму всех входов, чего уже достаточно для проверки этой транзакции.
Это стало возможным благодаря использованию доказательства с нулевым разглашением — это криптографическое доказательство знания определенной тайны, но без раскрытия последней.
Чтобы доказать, что сумма выходов не превышает сумму входов, используется обязательство Петерсена, основанное на преобразованиях в группе точек на эллиптической кривой.
В целях борьбы с неконтролируемой эмиссией монет данная схема обязательно использует доказательство использования действительных сумм на выходе транзакции.
Чтобы проверить, что были использованы неотрицательные суммы, не превышающие порядок базовой точки, применяются так называемые проверки диапазона.
И всё бы ничего, но создавать эти самые Range Proofs очень затратно с точки зрения вычислительных ресурсов.
Кроме того, они имеют очень большой объем.
Теоретически интегрировать Конфиденциальные транзакции в протокол Биткойн можно, но никто особо не торопится это делать из-за их большого объёма.
Однако уже существуют действующие системы учета, в которых успешно используются Конфиденциальные операции.
Кольцевые конфиденциальные транзакции
Следующий метод называется «Кольцевые конфиденциальные транзакции».Чтобы запутать историю происхождения монет, здесь используются кольцевые подписи.
Отправитель на входе своей транзакции обращается не к одному конкретному выходу (UTXO), а сразу к нескольким.
Далее с помощью кольцевой подписи он доказывает, что владеет монетами одного из нескольких выходов, но какого именно – не раскрывается.
Из этого следует, что однозначно проследить историю происхождения монет невозможно.
Использование кольцевых подписей таким способом впервые было предложено в протоколе CryptoNote, на котором работают несколько криптовалют. В кольцевых конфиденциальных транзакциях используется CT. Они позволяют создавать транзакции с несколькими входами и выходами, где происхождение каждого входа невозможно четко отследить, суммы перевода скрыты, а для создания транзакции не требуется взаимодействие с другими пользователями.
Скрытые адреса
Этот подход представляет собой технику тайного расчета адресов, на которые будут отправлены монеты.Эту идею впервые описал Питер Тодд. Открытые ключи используются в качестве идентификаторов пользователей: если вы хотите принимать платежи, вам необходимо раскрыть свой открытый ключ.
Отправитель использует свою пару ключей и ваш открытый ключ для расчета нового одноразового открытого ключа, который уже будет указан в транзакции как адрес.
Получается, что адрес, на который отправляются монеты, может быть известен только отправителю и получателю.
Стороннему наблюдателю невозможно установить связь между идентификатором пользователя и выходным адресом транзакции.
Применение на практике
Где эти методы применяются на практике?Команда Bitshares была одной из первых, кто реализовал CT в сочетании со Stealth Addresses не только для базовой валюты, но и для токенов, которые можно выпускать на платформе.
Криптовалюта Monero поддерживает кольцевые подписи и скрытые адреса для обеспечения высокого уровня конфиденциальности.
В январе 2017 года команда внедрила RingCT, а с обновлением от сентября 2017 года использование RingCT стало строго обязательным.
Также стоит отметить протокол Mimblewimble, использующий модифицированную версию CT, которая сейчас находится в активной разработке, но о ней мы поговорим позже.
Существует проект ZeroLink, который представляет собой фреймворк для создания конфиденциальных кошельков на основе методологии Chaumian CoinJoin. Примечательно, что он может работать с Биткойном, не требуя каких-либо изменений в самом протоколе.
Перейдем к часто задаваемым вопросам
— Можно ли использовать скрытые адреса в Биткойне? Да, вы можете использовать их сейчас; обновление протокола не требуется.Но для более широкой адаптации этого функционала необходимо строго указать порядок вычислений и форматы данных, чтобы все кошельки могли работать друг с другом и, соответственно, добавить эту функцию в сами кошельки.
Питер Тодд уже создал отдельный BIP для представления этой спецификации, но он все еще находится на рассмотрении.
— Эффективно ли использовать CoinJoin в чистом виде для биткойнов? Нет, в чистом виде он неэффективен, поскольку такие транзакции легко анализируются по суммам переводов.
Альтернативно, вы можете использовать одинаковые суммы для всех участников, избегая при этом доверенных миксеров, которые могут либо украсть монеты, либо нарушить конфиденциальность.
— Можно ли применить рассмотренные выше методы для обеспечения конфиденциальности в цифровых валютах, таких как Ethereum, Ripple и Stellar? Нет это не правда.
Ethereum, Ripple и Stellar используют совершенно другую модель транзакций и другой способ учета монет, к которым нельзя применить такие методы конфиденциальности.
Можно, конечно, попытаться искусственно интегрировать Стелс-адреса или конфиденциальные транзакции, но это будет крайне неэффективно с точки зрения эффективности валюты.
Причина в том, что Биткойн учитывает неизрасходованные выходные данные (т. е.
UTXO), а эти валюты используют балансы и счета.
Этой теме посвящена одна из лекций онлайн-курса по Блокчейну.
Конфиденциальность в криптовалютах ”.
Теги: #информационная безопасность #платежные системы #биткоин #криптовалюты #конфиденциальность #анонимность #monero #coinjoin #Bitshares #конфиденциальные транзакции #coinshuffle #стелс-адрес
-
А Теперь Прокати Меня, Дядя Гугл.
19 Oct, 24 -
Как Фоны В Homeworld2 Сделаны Изнутри
19 Oct, 24