Протокол MimbleWimble
MimbleWimble это протокол нацеленный на повышенную конфиденциальность транзакций, с хорошими возможностями для масштабирования и с пониженными требованиями к объему диска для хранения блокчейна. Протокол MimbleWimble удостоверяет корректность всех транзакций не сохраняя при этом всю их историю с самого начала создания. По-сути, в блокчейне хранятся только неизрасходованные обязательства актуальные на данный момент.
MimbleWimble это заклинание косноязычия из вселенной Гарри Потера, которое не дает раскрывать никаких секретов. Идея протокола была предложена непосредственно главным темным волшебником, чье имя нельзя называть. Некто по псевдонимом Tom Elvis Jedusor (а именно так по французски зовут Волан-де-Морта) в 2016 году поделился в IRC чате Bitcoin wizards Tor ссылкой на текстовый документ, описывающий идею MimbleWimble, после чего бесследно пропал.
Основное
Первое внедрение криптовалют на базе MimbleWimble произошло в январе 2019 года. Первыми валютами, начавшими использовать MimbleWimble стали братья-близнецы Beam и Grin.
Основные особенности криптовалют на базе MimbleWimble:
- Полная конфиденциальность: MimbleWimble скрывает отправителя и получателя платежа, а так же сумма его остается неизвестной для тех, кто не участвует в транзакции. На общее обозрение в блокчейне есть только зашифрованные входы и выходы. Можно удостовериться, что входы уже существуют в блокчейне, и что сумма выходов соответствует входам. Только генерация новых монет в процессе майнинга доступна публично, но ее результатом опять же являются зашифрованные выходы. Т.е. их получатель и текущий владелец неизвестен. Отсутствает любой публичный номер кошелька, на котором есть какой-то остаток монет. В этом отличие от криптовалют типа Bitcoin, где каждый может отслеживать суммы и их движение между кошельками.
- Экономность в хранении блокчейна: в блокчейне на базе MimbleWimble хранятся только неизрасходованные выходы транзакции (UTXOs – Unspent Transaction Outputs). В то время, как в большей части других криптовалют хранится полностью вся история транзакций от момента появления первой монеты, что безусловно занимает много места. Подобная особенность MimbleWimble позволяет хранить только самую необходимую информацию о текущем актуальном состоянии сети.
Валидатор транзакций MimbleWimble (майнер) подтверждает, что сумма входов соответствует сумме выходов и проверяет их на отрицательные значения, чтобы не происходило генерации монет по принципу создания двух выходов -100 и 100 (что в итоге дало бы неизменность сумм). Единственным предусмотренным появлением монет в системы является вознаграждение майнеру за подтвержденный блок. Но, кто получит в свое управление право распоряжаться выходом новых сгенерированных монет — публично неизвестно.
- Отсутствие публичных адресов — в MimbleWimble не существует адресов кошельков или по-другому публичных ключей, на которые любой желающий может отправить средства. Существую только зашифрованные обязательства. После появления первого блока появилось первое обязательство (UTXO) на найденное количество монет. Секретный ключ к этому обязательству хранится в кошельке владельца. И любая транзакция состоит из входов в виде подобных обязательств (UTXO) и аналогичных выходов (UTXO).
Как же тогда отправить перевод если нет номера счета и кошелька? Отсюда и вытекает следующая особенность MimbleWimble: - Необходимость взаимодействия отправителя и получателя для создания транзакции
Для создания транзакции отправитель платежа отправляет получателю (в режиме онлайн по защищенному каналу или по е-майл, или на флешке) первую часть транзакционной записи, в которой он подтверждает владение неизрасходованным обязательством и договаривается о сумме перевода. Получатель платежа закрепляет присланную информацию своей подписью, подтверждая сумму платежа и отправляет получившуюся запись обратно отправителю платежа. После этого отправитель окончательно подписывает транзакцию в своем кошельке и отправляет ее в общий блокчейн валидаторам (майнерам). После валидации транзакции — израсходуются необходимые обязательства и образуются новые UTXO, секретным ключем от которых, владеет анонимный для публичного блокчейна получатель платежа. - Встроенный микшер входов и выходов платежей
Чтобы было невозможно определить какие обязательства легли в основу других обязательств в MimbleWimble работает встроенный микшер на уровне блоков. Т.е. все входы являются одновременным входом в блок и из них образуются новые выходы. Никакого сопоставления, что эти конкретные обязательства перешли в другие конкретные обязательства — нет. - Невозможность работы смарт-контрактов и сложных скриптов.
Технология просто не предусматривает никаких сложных операций и из-за полной закрытости всех данных, что делает невозможным работу более сложных элементов. Просто передача прав на обязательства. Без всяких логических скриптовых правил. Все транзакции — только при взаимном взаимодействии отправителя и получателя.
Детальное разъяснение, как работает MimbleWimble
Что по сути делает блокчейн? Цепочка блоков гарантирует, что нигде по пути не вклинилось никакой дополнительной информации, которая бы повлияла на дальнейшие балансы и транзакции. Для этого нужно отследить все транзакции от самого первого блока до самого последнего. MimbleWimble же проверяет только, чтобы сумма всех входов минус сумма всех выходов каждого блока всегда была равной 0. Таким образом соблюдается принцип, что потрачено ровно столько монет, сколько было получено.
Что это за UTXO такие? Неизрасходованные обязательства
Здесь стоит представить себе, как работает блокчейн. Мы привыкли, что существуют купюры определенного номинала 100руб, 500руб, 1000руб. У вас на руках 2 купюры по 500руб, а вы хотите купить что-то за 900руб. Вы отдаете обе свои купюры и получаете сдачу в виде одной купюры номиналом в 100руб.
Блокчейн работает похожим образом. Вы получили 2 входящих платежа в 1 BTC и 0.5 BTC. Это и есть 2 ваших не неизрасходованных входа. А сейчас собираетесь сделать перевод на 1.3 BTC. Соответственно, при переводе кошелек создаст транзакцию на 1.5 BTC в, которой задействуются оба входа и появятся новые два выхода в 1.3 BTC, которые уйдут на кошелек получателя и на 0.2 BTC сдачи, которая вернется к вам на кошелек. Во многих блокчейн сетях можно увидеть через обозреватель блоков, что кошельки задействуют для отправки большую сумму, чем нужно для перевода. Это совершенно нормально, так и работает блокчейн сеть.
Криптография на основе эллиптических кривых
Эллиптические кривые получили широкое распространение в криптографии из-за некоторых своих свойств. Одним из свойств эллиптических кривых являются односторонние функции. Легко взять случайную точку G на эллиптической кривой и умножить ее на некоторое целое число s, чтобы получить другую точку P = sG. Однако, зная (P, G), невозможно вычислить значение s. Это позволяет нам использовать (P, G) в качестве открытого ключа и s в качестве секретного ключа.
Другое свойство эллиптических кривых состоит в том, что точки на эллиптической кривой имеют полезные алгебраические свойства:
1. Распределительные: (a + b) G = aG + bG
2. Коммутативные: a (bG) = b (aG) = (ab) G
Скрытие передаваемых сумм на основе обязательств Педерсена
В криптографии схема обязательств это метод, позволяющий пользователю подтверждать какое-либо значение, которое не разглашается, то есть в случае разглашения этого значения благодаря этой схеме будет известно, что пользователь знал его на момент выдачи обязательства и, что оно не изменилось.
Используемая в MimbleWimble схема обязательств Педерсена — использует криптографические примитивы, которые сочетают односторонние и алгебраические свойства эллиптических кривых. Принадлежность некоторым значениям (x, y) вычисляется как P = xG + yH. Хотя вычисление s = P / G невозможно в вычислительном отношении, вычисление (x, y) из (P, G, H) невозможно, поскольку существует множество комбинаций x и y, которые удовлетворяют соотношению P = xG + yH. Однако пользователь, который знает одну пару (x, y), которая удовлетворяет этому соотношению, не может вычислить вторую пару (x’, y’), которая удовлетворяет этому соотношению, не нарушая одностороннего свойства эллиптических кривых.
Конфиденциальные транзакции
Благодаря использованию схемы на основе обязательств Педерсена в MimbleWimble никакие суммы переводов не записываются в хранимых UTXO (неизрасходованных обязательствах). В MimbleWimble входы и выходы транзакций представляют из себя rG + vH. G и H являются случайными точками на эллиптической кривой и являются открытыми параметрами блокчейна. Значение v является значением UTXO, а r является коэффициентом ослепления и функционирует как секретный ключ для UTXO. Значение rG является соответствующим открытым ключом. MimbleWimble использует обязательства Педерсена, чтобы скрыть конфиденциальную информацию о транзакциях, вместо того, чтобы показывать значения транзакций в виде открытого текста. Обязательства Педерсена позволяют использовать простейшую арифметику для проверки транзакций.
Рассмотрим пример, в котором у нас есть два входа и один выход. Мы предоставляем выборочные значения и коэффициент ослепления, оставляя открытые параметры G и H в качестве переменных.
Осуществление транзакции в MimbleWimble
Проблема с конфиденциальными транзакциями, как описано выше, состоит в том, что они требуют, чтобы вход и выход UTXO использовали один и тот же фактор ослепления, который является секретным ключом получателя. Если отправитель узнает значение ослепляющего фактора получателя, он может украсть выходной UTXO получателя. MimbleWimble решает эту проблему, используя доказательства с нулевым разглашением.
Рассмотрим простой пример отправки 5 монет. Отправитель имеет неизрасходованный UTXO, представленный обязательством X = 45G + 5H, где 5 — это значение, а 45 — ее коэффициент ослепления (r) или секретный ключ. Получатель выбирает случайный коэффициент ослепления 7 и создает выходной UTXO, представленный обязательством Y = 7G + 5H. Верификатор, который сравнивает входные данные с выходными, увидит обязательство превышения:
X-Y = (45G + 5H) — (7G + 5H) = 38G
MimbleWimble называет значение 38 избытком или ядром, а значение X-Y = 38G ядром транзакции. В допустимой транзакции ядро транзакции всегда имеет вид X-Y = rG + 0H, где r — некоторое целое число. Это верно, даже если используются несколько входов и выходов. Если сумма входных значений равна сумме выходных значений, значение, умноженное на H, будет равно нулю. Действительное ядро транзакции всегда находится в форме открытого ключа. Каждый отправитель и получатель знают часть соответствующего секретного ключа. У MimbleWimble есть протокол, который позволяет им совместно вычислять подпись, используя их ослепляющие факторы для подписания транзакции. Ядро представляет собой многозначный ключ для участников транзакции. Но для формирования данной подписи необходимо взаимодействие и отправителя и получателя транзакции.
Отсутствие адресов кошельков
Как уже говорилось выше, в MimbleWimble не используются адреса кошельков. Это увеличивает конфиденциальность и позволяет не засорять блокчейн постоянно увеличивающимся количеством используемых кошельков. В блокчейне на основе MimbleWimble, для создания транзакции пользователи сначала должны осуществить взаимодействие непосредственно друг с другом без использования основного блокчейна сети. Отправитель делится доказательством того, что он контролирует необходимое количество монет с получателем, который принимает контроль над этими монетами. Поскольку не существует адресов, которые публично «владеют» монетами, не существует привычного «стандартного» способа отправки транзакций. В результате участники транзакции должны настроить сеанс взаимодействия (напрямую или через файл), чтобы поделиться доказательством контроля и передать управление получателю. Это сильно отличается от блокчейна Bitcoin (и большинства других блокчейнов), где транзакции могут выполняться без участия получателя.
CoinJoin — объединение монет или встроенный микшер
Следующим способом борьбы с общедоступностью транзакций является технология объединения монет CoinJoin. CoinJoin объединяет все входы (inputs) в одну большую транзакцию. Таким образом невозможно определить какие входы легли в основу выходов (outputs). В блоке MimbleWimble нет отдельных транзакций. Все входы становятся источником всех выходов. Таким образом можно сказать, что это заложенный в технологию микшер, который смешивает все входы и делает невозможным однозначно определить источник средств для каждого конкретного выхода.
Cut-through – сквозная чистка
Конфиденциальные транзакции намного больше, чем обычные транзакции. По размеру записи, конфиденциальная транзакция занимает почти в 5 раз больше символов, чем обычная. MimbleWimble использует метод сквозной чистки, чтобы повысить эффективность.
Как уже упоминалось выше, на момент весны-лета 2019 года объем блокчейна Bitcoin уже превышает 230Гб и продолжает расти с каждым днем. Если бы все транзакции были бы конфиденциальными, как в MimbleWimble, то размер блокчейна был бы уже на несколько порядков больше.
MimbleWimble использует процесс, называемый сквозным, для удаления избыточных выходов, которые снова используются в качестве входных данных в одном и том же блоке, чтобы освободить пространство в блоке и уменьшить объем данных, которые необходимо хранить в цепочке блоков, сохраняя при этом тот же уровень безопасности. Удаляется избыточная информация о входах и выходах, но тем не менее информация подтверждающая эту транзакцию сохраняется в блокчейне в виде ядер транзакций (совместных подписей).
Сквозная чистка используется не только в блоке, но и на макроуровне. Таким образом в блокчейне остаются только заголовки блоков, UTXO (неизрасходованные обязательства), и транзакционные ядра. Этих данных достаточно, чтобы подтвердить и проверить блокчейн. Блокчейн может уменьшиться, если, например, в каком-то блоке множество UTXO лягут в основу, какого-то одного выхода. UTXO. Блокчейн на базе MimbleWimble перестает хранить уже израсходованные обязательства.
Считается, что подобная чистка будет поддерживать размер блокчейна на MimbleWimble в десятки раз меньше объема стандартного блокчейна Bitcoin при том же объеме транзакций.
Заключение
MimbleWimble основан на проверенных криптографических принципах. Некоторые из элементах были опубликованы много лет назад в рецензируемых криптографических журналах, в то время как другие являются публичными техническими документами.
Нет никаких адресов, и транзакционные стороны должны взаимодействовать и быть онлайн (хотя не обязательно в то же самое время), чтобы подписать и завершить транзакции. Это не интуитивно понятно по сравнению с существующими крипто активами.
Что касается конфиденциальности, то майнеры могут видеть транзакции в mempool до того, как CoinJoin и проходят сквозные операции. В результате узлы, наблюдающие за сетью, могут строить подробные графики транзакций, нарушая конфиденциальность, что противоречит ключевому предложению MimbleWimble. Хотя существуют потенциальные решения, такие как одуванчик и фиктивные UTXO, на практике они еще не особо используются.
Аналоги
До появления MimbleWimble уже существовали как минимум 2 популярные монеты с упором именно на конфиденциальности и закрытости. Это Monero и Zcash.
Monero работает на протоколе CryptoNote. Он скрывает отправку и получение адресов и транзакций. Monero обеспечивает конфиденциальность, используя конфиденциальные транзакции Ring и скрытые адреса. Кольцевые подписи добавляют «приманки» к транзакциям, не раскрывая, какие монеты были действительно подписаны, эффективно смешивая монеты. Основным недостатком Monero является то, что транзакции в десять раз больше, чем транзакции с биткойнами.
Zcash работает на базе протокола Zerocash. Zcash использует анонимные адреса, чтобы скрыть транзакционные стороны, и zk-snarks (тип доказательства с нулевым разглашением), чтобы скрыть суммы транзакций. В Zcash можно использовать открытые прозрачные адреса, так и закрытые. Кроме того Zcash предусматривает специальные ключи для аудита транзакций. До обновления Sapling в Zcash создание конфиденциальной транзакции было трудоемким и ресурсозатратным. С обновлением Sapling объем памяти и время, необходимые для конфиденциальных транзакций, сократились, что может стимулировать использование защищенных транзакций.
И Monero и Zcash позволяют отправлять транзакции без непосредственного участия получателя платежа.
Монеты на основе MimbleWimble
Первыми монетами, запущенными на базе MimbleWimble стали Grin и Bean.
Grin — это первая реализация MimbleWimble с открытым исходным кодом на языке программирования Rust. Документация Grin была выпущена 20 октября 2016 года анонимным разработчиком по имени Ignotus Peverell. Многие основные разработчики Grin также приняли имена, связанные с вселенной Гарри Поттера. Grin выпустил четыре тестовых сети перед запуском в основной сети 15 января 2019 года. Крипто сообщество, как обычно тепло отнеслось к данному проекту за его сходства с классическим Bitcoin — в частности, за анонимную команду разработчиков, честный запуск (без премайна, ICO или встроенного вознаграждения учредителям) его модель финансирования на основе добровольных пожертвований.
Beam — это венчурный стартап в Израиле, который 3 января 2019 года запустил одноименную криптовалюту нацеленную на повышенную конфиденциальность, основанную на протоколе MimbleWimble. Он начал строить свою реализацию на C ++ в марте 2018 года и запустил тестовую сеть в сентябре 2018 года. Хотя Beam и Grin схожи в том, что они обе являются реализациями MimbleWimble, целью которых является повышение конфиденциальности своих пользователей, они различаются по своему подходу. В отличие от Grin, Beam является частной компанией, которая нанимает разработчиков для работы над реализацией. Beam начал с закрытого исходного кода, но позже открыл его. Другим важным отличием в Beam является возможность стороннего аудита, нацеленная на бизнес и регуляторов.
На что следует обратить внимание
Многие консервативные криптовалютные биржи добавили Grin (как хорошего опенсорсного парня) на фоне венчурного Beam к себе в листинг практически мгновенно. А это принципиальная новая технология, подразумевающая дополнительную работу бирж для приема и отправки транзакций (включая онлайн взаимодействие кошельков). Учитывая, что многие монеты с классическими блокчейнами месяцами ждут своего добавления на биржи, а тут они практически мгновенно с нуля написали весь необходимый софт для обработки платежей на совершенно новой блокчейн технологии.Т.е. напрашивается вывод, что именно эти биржи и поддерживают внедрение и использование Grin.