Криптография и конфиденциальность загадочного протокола Mimblewimble

Криптовалюты на протоколе MimbleWimble, как и многие другие современные криптовалюты, основаны на эллиптической криптографии, известной как алгоритм цифровой подписи эллиптической кривой (ECDSA).

В протоколе используется эллиптическая кривая secp256k1, которая используется также в криптографии Bitcoin и определяется стандартами для эффективной криптографии. Наиболее часто используемые кривые имеют произвольную структуру, но secp256k1 был построен неслучайным образом, что позволяет ей особенно эффективно вычислять и быть в этом быстрее других кривых. В отличие от популярных кривых, рекомендованных NIST, (Национальный институт стандартов и технологий США), secp256k1 были выбраны предсказуемым образом, что значительно снижает вероятность того, что создатель такой эллиптической кривой вставил в неё тайный проход для третьих лиц. К чему это всё и почему это важно?

В 2013 году, после скандальной публикации Эдварда Сноудена, мир узнал, что под нажимом NSA (АНБ), NIST стандартизовал генератор псевдослучайных чисел Dual_EC_DRBG (тоже основанный на ЭК) — один из рекомендованных для использования в криптографических продуктах и реализованный в такой форме десятками вендоров. Документы Сноудена прямо указывают на то, что неслучайность, присущая Dual_EC_DRBG и давно уже подмеченная независимыми экспертами, была введена NSA ради ослабления генератора и, соответственно, последующего более лёгкого взлома шифров. Теоретически процесс стандартизации в NIST — публичный. Однако законы США обязывают Институт пользоваться помощью NSA — и временами, как выяснилось, благодаря Эдварду Сноудену, эта «помощь» перерастает в диктат.

После скандала со Сноуденом, NIST официально посоветовал не использовать Dual_EC_DRBG, однако скандал вокруг него дал повод усомниться вообще в стандартах эллиптических кривых, опубликованных NIST. Каждый криптографический продукт, использующий ЭК-рекомендации NIST, оказался беззащитным перед NSA. Эллиптическая кривая sec256k1 отсутствовала в рекомендациях NIST и является надежной основой не только для Bitcoin, но и для GRIMM и для многих других криптовалют.

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

В протоколе MimbleWimble нет понятия кошелька. Вместо кошелька есть не потраченные суммы (UTXO — unspent transaction output), которые принадлежат конкретным пользователям. Самое главное в том, что транзакции совершаются между UTXOs, но не между кошельками. Транзакция в этом случае — это преобразование одних UTXOs в другие.

Рассмотрим схему как происходит конфиденциальная транзакция UTXO в MimbleWimble:

Например пользователь А владеет UTXO в виде C1=k1*G+v1*H и С2=k2*G+v2*H, и он хочет передать это пользователю B.

A информирует B (по секретному каналу) что он хочет ему передать C1 и C2, и разглашает их содержимое.

B создаёт С3=k3*G+(v1+v2)*H, где k3- случайно выбранный новый blinding factor

B высчитывает k=k1+k2-k3, где к3 total blinding factor

B высчитывает X=k*G остаток(Х), и создаёт для него сигнатуру Шнорра

В узел отправляется транзакция C1,C2→C3+bulletproofs для C3, X+ сигнатура.Узел проверяет что C1+C2-C3=X, что C3 имеет правильный bulletproof, и что X имеет правильную сигнатуру, которая подтверждает что точка X не содержит в себе суммы.

C- обязательства Педерсена (Pedersen commitments),основано на задаче дискретного логарифмирования ; G и H- генераторы группы эллиптической кривой; v- сумма; k- секретный случайный ослепляющий ключ (blinding factor); сигнатура Шнорра (Schnorr scheme)- одна из наиболее эффективных и теоретически обоснованных схем аутентификации, безопасность которой основывается на трудности вычисления дискретных логарифмов; bulletproofs — инновационный протокол среди себе подобных и входит в семейство систем подтверждения нулевых знаний, таких как zk-SNARK, STARK и ZKBoo.

Важно, что остаток может быть только на выходе транзакции, но не на входе. Это то, что делает её асимметричной и необратимой.

В приведённом примере мы видим, что при объединении транзакций в блоке остатки сумм в UTXO кодируются с помощью обязательства Педерсена и blinding factor, а bulletproofs следит за правильной суммой монет в остатке на выходе.

При формировании самого блока все транзакции последовательно записываются в блок, объединяясь в одну большую транзакцию, что в конечном счете и является сформированным блоком. И для того чтобы история этих транзакций стала недоступной, скрытой, все входы/выходы перемешиваются/сортируются, что стирает их хронологический порядок, и упрощает их объединение. Такое смешение транзакций возможно благодаря используемому методу CoinJoin и его вариациям, представленных Грегори Максвеллом.

Важным моментом конфиденциальности является анонимность IP. Для достижения анонимности транзакцию в узел отсылает не непосредственный участник транзакции а случайный пользователь. Для этого готовая транзакция сначала отсылается не в узел, а случайному пользователю, со случайно сгенерированным счётчиком ( time-to-live). Он в свою очередь также должен отослать это другому случайному пользователю, при этом уменьшив счетчик . И только в тот момент, когда счетчик будет равен нулю, транзакция отсылается в узел. Такой процесс обеспечивает протокол Dandelion++ представленный группой разработчиков из Иллинойского университета (University of Illinois at Chicago).

Эллиптическая кривая sec256k1, обязательство Педерсена и bulletproof, сигнатура Шнорра и blinding factor, Dandelion++ и CoinJoin — все эти методы, криптографические примитивы и сигнатуры работают в единой связке на обеспечение высочайшего уровня конфиденциальности протокола Mimblewimble и делают криптовалюту основанную на нем взаимозаменяемой (fungibility), что также важно. Это свойство делает возможным 100% обмен одной единицы валюты на другую. Здесь не должно быть различий и не возможно отследить в каких сделках принимала участие монета. Каждая монета имеет одинаковую значимость.

33
Начать дискуссию