Введение
Прозрачность системы крайне важна для функционирования блокчейна. Это означает, что каждая нода в сети может хранить копию блокчейна и проверять, не нарушаются ли правила. Во многих распределенных реестрах все пользователи могут загрузить онлайн-обозреватель блоков и выполнять поиск по блокам, транзакциям и адресам.
Конфиденциальность этой структуры далеко не идеальна. В такой системе, как биткоин, каждая транзакция связана с предыдущей. Монеты технически не взаимозаменяемы, то есть каждая отдельно взятая монета может иметь привязку к конкретным транзакциям. Никто не может запретить вам отправлять биткоины, но сеть может отказаться от транзакции, если получит информацию о том, что ранее ваши монеты использовал адрес из черного списка.
В худшем сценарии отсутствие взаимозаменяемости может оказать сильное воздействие на основу всей системы. Чистые монеты могут приносить премию, в то время как старые будут менее ценными, учитывая их историю.
Конфиденциальность биткоина зачастую преувеличивают. Отслеживаются не только монеты, но и пользователи. Механизм этой монеты предполагает псевдонимность (публичные адреса видны вместо имен), но это не лишено недостатков. Сложные методы анализа могут с повышенной точностью объединять адреса в виде кластеров, в попытке деанонимизировать сетевые объекты.
Одним из предложенных улучшений было сделать транзакции действительно приватными, и им стали конфиденциальные транзакции.
Что такое конфиденциальные транзакции?
Конфиденциальные транзакции (CT) впервые стал рассматривать генеральный директор Blockstream Адам Бэк в 2013 году, а затем его идеи были дополнены биткоин-разработчиком Грегори Максвеллом. Максвелл указал на проблемы взаимозаменяемости и слабой псевдонимности и выдвинул свое решение. Он предложил скрыть обзор суммы переводов от участников сети, чтобы только два участника транзакции знали, сколько монет было отправлено.
В обычных условиях, когда транзакции может посмотреть любой желающий, ноде легко проверить, что полученная сумма не превышает отправленную. Если Алиса хочет отправить Бобу 0,3 BTC, она берет неизрасходованный выход (например, 1 BTC) и разбивает его на две части: 0,3 для отправки Бобу и 0,69 для отправки себе обратно (оставшаяся часть средств используется для оплаты комиссии за майнинг).
Нодам легко верифицировать такую транзакцию: 1 больше 0,3 + 0,69, все подписи правильные, а входные данные Алисы до этого не отправлялись в другое место, поэтому транзакция должна быть действительной. Однако когда сумма средств не доступна для других участников сети, все не так просто. Как узнать, равно или превышает ли одно неизвестное число сумму двух других неизвестных чисел?
Обзор используемой криптографии
Чтобы скрыть данные, необходимо шифрование. Однако традиционные методы аналогичны помещению документов в сейф: когда документ запирается внутри, его нельзя использовать, пока он не будет оттуда извлечен. Для работы конфиденциальных транзакций необходим цифровой сейф, содержимое которого не разглашается, но его свойства может проверить постороннее лицо.
Ответ заключается именно в гомоморфическом шифровании, в схеме, под названием обязательство Педерсена. Такой тип шифрования позволяет посторонним лицам проводить различные операции с зашифрованными данными (с которыми они не могут ознакомиться) для ряда целей.
Обычный хеш может использоваться для фиксации данных, которые вы хотите раскрыть позже. Предположим, вы хотите объявить конкурс в социальных сетях, где тот, кто угадает вашу любимую биржу, получит приз в 0.01 BTC. Участники могут быть скептичными, поскольку предполагают, что вы можете просто посмотреть ответы после окончания конкурса и выбрать биржу, которая не была упомянута.
В таком случае вы можете предоставить своим подписчикам хеш: строку из, казалось бы, случайного набора чисел и символов, которая указывает на определенный вход данных. Вы пропускаете название биржи через функцию, чтобы получить определенный вывод. Проиллюстрируем это с помощью алгоритма SHA256:
f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191
Глядя на данную строку, вы не знаете, что она значит. Вы также не можете обратить функцию вспять, чтобы получить указанные в ней данные. Но если вы знаете, что за этим кодом скрывается слово Binance, вы можете легко проверить, соответствует ли его хеш указанному выше. Это частично убедит ваших подписчиков, что вы не измените свой ответ в конце мероприятия, поскольку это приведет к совершенно другому выходу.
Однако такой процесс не очень надежен. Хотя у ваших подписчиков вряд ли получится перевернуть алгоритм, они могут составить список с наименованиями бирж и хешировать каждое из них до тех пор, пока не получат соответствующее совпадение. Чтобы уменьшить вероятность такого исхода, необходимо добавить к информации для хеширования случайные данные — они называются ослепляющим фактором.
Если вход будет выглядеть как "Binance — моя любимая биржа, мне она нравится больше других бирж 2#43Wr", участнику будет намного сложнее его угадать (учитывая стоимость 0,01 BTC, вряд ли кто-нибудь будет пытаться).
Обязательство Педерсена позволяет нам добавлять входные данные, избегая различных обязательств. Как это иллюстрирует Максвелл:
C(BF1 + D1) + C(BF2 + D2) = C(BF1 + BF2, D1 + D2)
Здесь также есть еще несколько шагов, включающих криптографию на эллиптических кривых и проверку диапазона, но основная идея заключается в том, что перед каждым адресом пользователя стоит обязательство Педерсена. При отправке средств создаются два дополнительных обязательства (одно для изменения адреса, который должен быть возвращен пользователю, и одно для адреса назначения).
Никто не знает, сколько монет было отправлено, но можно проверить, что обязательства по изменению и назначению (левая часть уравнения Максвелла) складываются с исходным адресом (правая часть уравнения). Если все правильно складывается, то транзакция пользователя действительна, поскольку можно доказать, что входные данные совпадают с данными на выходе.
На что способны конфиденциальные транзакции?
Если бы в биткоине были реализованы конфиденциальные транзакции, мы бы пользовались гораздо более приватной системой. Как входные, так и выходящие данные были бы замаскированы от всеобщего обозрения, в то время, как записи в регистре обфусцированы, но узлы все еще могут подтверждать подлинность операций. С таким значительным повышением конфиденциальности, биткоины могут стать взаимозаменяемыми, поскольку анализ цепочки больше не раскрывает историю каждой отдельной единицы монеты.
Относительно того, будут ли конфиденциальные транзакции интегрированы в протокол, в настоящее время, очень маловероятно, что это произойдет. С такой дополнительной функциональностью, транзакции намного больше стандартных, учитывая ограниченное пространство блоков это только увеличит нагрузку на сеть. Для этого также потребуется, чтобы большинство участников согласилось внести изменения в код, что является крайне трудоемкой и сложной задачей.
Резюме
Конфиденциальные транзакции были интегрированы в других криптовалютах и сайдчейнах биткоина. Например, Monero использует их в сочетании с кольцевыми подписями для достижения анонимности и взаимозаменяемости, а в сайдчейне Liquid и в MimbleWimble эта технология увеличивает конфиденциальность.
Конфиденциальные транзакции обладают множеством преимуществ, но это слабый компромисс, учитывая все технические нюансы. Криптовалюты регулярно борются со слабой масштабируемостью и пропускной способностью на базовом уровне, а большие объемы таких транзакций категорически не подходят для этого. Тем не менее, приверженцы конфиденциальности считают, что скрывать суммы транзакций и адреса участников является необходимостью, чтобы позволить криптовалюте выступать в качестве взаимозаменяемых денег.