Тот-кого-нельзя-называть создал криптографический протокол, который способен изменить принцип организации Биткойна, сделав систему масштабируемой и более конфиденциальной.
Протокол генерирует «ослепляющий эффект», который дает возможность подтвердить права собственности на биткойны, избавляя от необходимости хранить приватные ключи, при этом поддерживает баланс между конфиденциальностью и свободой распоряжения средств, в то же время, предлагая решение проблемы масштабирования, — о чем свидетельствует техническое описание, подписанное псевдонимом, которое мистическим образом появилось на сайте, посвященном исследованиям в области криптовалют. Автор называет себя «Том Элвис Жедюсор» ( Tom Elvis Jedusor — по фр. «Je suis Voldemort») — именем из романов о Гарри Поттере. А само его предложение по улучшению сети, отправленное в августе на один из чат-каналов, озаглавлено ‘Мимблвимбл’ (Mimblewimble), — это проклятие, которое связывает язык противника, лишая его, тем самым, дара речи.
Проблема с верификацией в Биткойне
Биткойн — первая финансовая система в мире (из тех, что получили широкое распространение), в которой вся необходимая информация для подтверждения статуса системы может быть криптографически подтверждена кем угодно, — говорится в техническом описании.
Это качество достигается, за счет хранения всех транзакций в публичном регистре под названием блокчейн. Кто-либо, кто захочет сверить данные, должен будет загрузить всю цепочку, и отследить все транзакции, одну за одной.
Было бы проще, если бы аудитор мог бы проверить только данные на выводе, но это невозможно, так как результаты являются действительными только в случае, если находятся в конце действительной цепочки. Весь блокчейн должен быть достоверен, чтобы данные в конце цепи оказались верны.
Учитывая то, что транзакции — это криптографические атомы, данные на вводе и на выводе проверить не сложно. Граф «транзакции», являющийся результатом, содержит много информации и может являться объектом анализа для многочисленных организаций, чья специализация заключается в мониторинге и контроле над нами, смертными.
Этот аспект превращает блокчейн в крайне небезопасную и зыбкую среду.
Предлагаемое решение.
Путь решения этой проблемы уже существует, как заявляет Темный лорд.
Грэг Максвелл придумал, как зашифровать данные таким образом, чтобы граф «транзакции» был обезличен, но при этом отображал бы верную сумму. Максвелл придумал также CoinJoin, систему для интерактивного смешивания пользователей биткойна, затрудняющую путь отслеживания транзакции. Николас ван Саберхаген разработал систему для «затемнения» вводных данных, с последующим размытием графа «транзакции». Шэн Ноэфер объединил два подхода для того, чтобы добиться конфиденциальности транзакций, как у Максвелла и, вместе с тем, эффекта «затемнения», как у Саберхагена.
Эти решения помогут сделать биткойн более безопасным, признает Жедюсор. Однако, слишком большой объем данных может излишне нагрузить систему. «Конфиденциальные транзакции» Максвелла потребуют дополнительных мультикилобитов подтверждений для каждого ввода. Алгоритм ван Саберхагена требует, чтобы каждый ввод данных хранился вечно, так как невозможно предсказать, когда эти средства будут потрачены.
CoinJoin Максвелла потребует интерактивности. Юань Хорас Мутон адаптировал его алгоритм так, чтобы транзакции смешивались более свободно, но он использовал крипто-схему на основе спаривания (pairing-based), поэтому его алгоритм работает медленнее и менее надежен. Он назвал его OWAS (one-way aggregate signatures).
OWAS объединяет транзакции в блоки. Можно комбинировать их и между блоками (допустим, при помощи дополнительных кодов) так, чтобы выводы создавались и разрушались, будто бы их никогда не было, отмечает Жедюсор.
Затем, для того чтобы подтвердить всю цепь, пользователям нужно будет знать только когда деньги появились в системе (как в биткойне или Monero) и финальную сумму непотраченных выводов. Остальное можно удалить и забыть.
«Конфиденциальные транзакции» прячут остальные данные, чтобы размыть граф транзакции и используют меньше места, чем биткойн.
Мимблвимбл смешивает между собой эти технологии. «Связанный язык» или Mimblewimble, предотвращает использование пользовательской информации, хранящейся в блокчейне, объясняет его создатель.
Конфиденциальные транзакции.
Для начала придется отказаться от скриптов биткойна. Они слишком жесткие, поэтому не удастся смешивать транзакции, используя изначальные скрипты. «Конфиденциальных транзакций» Максвелла достаточно, чтобы авторизовать трату выводов и также создать комбинированные транзакции без привязки к пользовательским данным. Этот набор функций идентичен тому, что предлагает OWAS, который предполагает, что ретранслирующие узлы берут небольшую плату за транзакции, либо получатель повышает комиссию за транзакцию. Биткойн не способен на эти дополнительные сценарии.
Если «Конфиденциальные транзакции» работают надлежащим образом, суммы кодируются с помощью следующего уравнения: C = r*G + v*H.
C — это схема обязательства Pedersen (Pedersen commitment), G и H — образующие группы на основе эллиптических кривых (безо всяких тузов в рукаве), v —сумма , и r — секретный случайный «ослепляющий» ключ-код.
К выводу прикреплен диапазон доказательств, подтверждающий, что v — в диапазоне [0, 2^64], так что пользователи не могут использовать «ослепляющий код», например, для атаки переполнения.
Для подтверждения транзакции, контролер подтверждает все выводы, плюс F * H (F — комиссия за сделку, которая дается в явном виде) и вычитает все подтверждения вводов. Результат должен быть 0, доказывая, что сумма не была изменена или уничтожена вовсе.
Чтобы создать подобную транзакцию, пользователь должен знать сумму значений r для ввода подтверждений. Поэтому r-значения (и их суммы) служат в качестве секретных ключей. Если значения r для вывода, будут известны только получателю, система аутентификации сработает.
К сожалению, соблюдая правило, которое обязывает уравнение стремиться к нулю, эта схема работать не будет, так как отправитель будет знать сумму всех его значений для r, а, следовательно, и сумму значений для r получателя, так как в итоге должен получиться ноль.
Поэтому транзакция сводится не к нулю, а вместо этого к значению k*G и в качестве ключа требует подпись этим значением пустой строки.
Эти транзакции могут иметь сколь угодно много значений k*G, каждое с подписью, затем они суммируются во время верификации.
Создание Транзакций.
Для того, чтобы создать транзакцию, отправитель и получатель должны сделать следующее:
1) Договориться о сумме транзакции, назовем ее b.
2) Отправитель создает транзакцию со своими вводами и изменяет выводы, отправляет получателю общий «ослепляющий код» (r-значение изменения за минусом r-значений вводов) вместе с транзакцией. Теперь схема обязательств выглядит так: r*G – b*H.
3) Получатель выбирает случайные значения r для своих выводов, указывает, что сумма = b минус комиссия, и добавляет данные к транзакции (включая диапазон доказательства). Теперь обязательства выглядят так: k*G – комиссия*H, причем k известно только получателю.
4) Получатель прикрепляет подпись с «k» — к транзакции с конкретной комиссией.
Создание транзакций подобным образом уже создает основу для OWAS.
Чтобы продемонстрировать это, возьмем две транзакции c k1*G and k2*G с прикрепленными подписями. Затем совместим списки вводов и выводов из двух транзакций, добавив к комбинации k1*G and k2*G, и это вновь будет действительная транзакция. Исходя из этого списка, невозможно вычислить, какие вводы и выводы соответствуют оригинальной транзакции.
Таким образом, вместо блоков биткойна, пубично будет доступна следующая информация:
1) Точное количество новых денег, поступивших в систему (как награда за блок или из связанного сайдчейна) со всеми прочими данными, которые для этого потребуются. Для связанных сайдчейнов возможна ссылка на биткойн-транзакцию, включающую избыток значения k*G.
2) Вводы всех транзакций.
3) Выводы всех транзакций.
4) Превышение значений к * G для всех транзакций.
Все эти данные будут сгруппированы с себе подобными, поскольку неважно, какие границы транзакций были установлены изначально. К тому же, списки, означенные в пунктах 2, 3 и 4 будут закодированы в алфавитном порядке, поскольку так их легче проверить, а также это помешает создателю блока устроить утечку данных о транзакциях.
Выводы идентифицируются по их хэшу, а не по местоположению в транзакции, которое легко может измениться. Поэтому будет запрещено иметь одновременно два идентичных непотраченных вывода — во избежание путаницы.
Объединение транзакций.
«Конфиденциальные транзакции» Максвелла уже использовались при создании не-интерактивной версии CoinJoin. Была необходима другая идея. Не-интерактивная версия была спроектирована для демонстрации того, как система может работать с несколькими блоками.
Каждый блок может быть представлен как одна большая транзакция. Для подтверждения транзакции, необходимо сложить подтверждения выводов и вычесть обязательства вводов значений, и точные значения k*G – H раз.
Транзакции из двух блоков могут объединяться в единый бок, в конечном итоге являя собой действительную транзакцию.
Разница заключается в том, что обязательства вывода равны обязательствам ввода, и вывод первого блока тратится во втором блоке. Оба обязательства могут быть удалены, и транзакция по-прежнему останется действительной. Даже нет необходимости проверять диапазон потраченного вывода.
В качестве развития этой идеи могло бы последовать следующее: начиная от генезис- блока до последнего найденного, все не явно указанные, не первоначальные вводы удаляются вместе с соответствующими выводами. Все, что останется — это непотраченные выводы, точные значения первоначальных вводов и значения k*G.
Весь этот хаос можно было бы разложить по полочкам, будто бы это одна транзакция, сложив все непотраченные обязательства по выводам и вычтя значения k*G, сопряженные с точными значениями вводов, H раз. Если уравнение равно 0, значит, вся цепь верна.
Когда пользователь загружает цепь, от каждого блока необходимы лишь следующие данные:
1) Явно указанные значения новых вводов.
2)Непотраченные выводы всех транзакций (с учетом доказательства Меркла о том, что каждый вывод происходит от первоначального блока).
3) Избыток значений k*G для всех транзакций.
Сейчас в цепи Биткойна около 423000 блоков, в совокупности занимающие примерно 80 Гб на жестком диске, которые необходимо хранить для подтверждения транзакций. Всё это данные о 150 миллионах транзакций и 5 миллионах непотраченных неконфиденциальных выводах.
Каждый непотраченный вывод цепи Мимблвимбл будет занимать около 3 Кб, с учетом диапазона доказательств и доказательства Меркла. Каждая транзакция добавляет около 100 байтов: значение k*G и сигнатуру.
Заголовки блоков и данные, указанные явным образом, можно отбросить. В общей сложности, получится около 30 Гб — включая размытый граф транзакций и конфиденциальность.
Вопросы и предположения.
В связи с вышесказанным, возникают ряд вопросов и возможных ответов.
Вопрос: Если удалить вывод транзакции, пользователь не сможет подтвердить диапазон доказательств, и возможно даже будет создано отрицательное значение.
Ответ: Это допустимо. Для того, чтобы вся транзакция была признана действительной, все отрицательные значения должны быть погашены.
Вопрос: Если удалить все вводы, станет возможна двойная трата, разве нет?
Ответ: По сути, возникновение двойной траты будет означать, что кто-то заявляет, что захотел еще раз потратить непотраченный вывод, на самом деле, уже давным давно потраченный. Однако это невозможно, иначе совокупная сумма объединённых транзакций не была бы равна нулю.
Исключением является тот случай, когда вывод равен нулю, тогда можно создать два вывода, которые будут дублями друг друга, и эта пара сможет непротиворечиво сосуществовать. Таким образом, во избежание проблем с консенсусом нулевые выводы должны быть запрещены. Надо просто добавить H в каждый вывод.
Будущие исследования.
Есть несколько вопросов, на которые сейчас сложно дать ответы:
1) Какой скрипт подходит для этих сценариев? Все операции со скриптом еще предстоит перевести на язык дискретных логарифмов.
2) Пользователям придется проверять все значения k*G, хотя, по сути, нужно доказать лишь то, что сумма имеет вид k*G. Помимо подписей, существует ли другое доказательство из области дискретноых логарифмиров, которое можно было бы здесь применить?
3) Один из зыбких моментов, когда система может выдать «отказ в обслуживании» — во время загрузки цепи. Если пир предоставит гигабайты данных и список неверных непотраченных выводов, тогда расчёт не сойдется к нулю, и пользователь не сможет определить в чем проблема. На сегодняшний день, лучше загружать блокчейн из Torrent или другой платформы, где информация распределяется между многими пользователями и, следовательно, с большей вероятностью будет достоверна.
Источник
Специально для mmgp.