28 февраля 2020

Краткая история развития Monero, или экскурс в борьбу за анонимность и конфиденциальность блокчейн транзакций


Часть 1

Вопросы приватности и анонимности электронной валюты стояли перед исследователями и разработчиками достаточно давно, задолго до появления Биткоина. В 1991 году Татсуаки Окамото и Кадзуо Охта из исследовательской лаборатории NTT (крупнейшей телекоммуникационной компании Японии) представили 6 критериев идеальной электронной валюты, среди которых была конфиденциальность: “отношения между пользователем и его покупками должны быть недоступны для отслеживания кем угодно”.

Николас ван Саберхаген, анонимный автор, стоящий за работой по протоколу CryptoNote, который и лег в основу Monero, в декабре 2012 года обобщил эти 6 критериев до двух конкретных свойств:

Не-отслеживаемость: для каждой входящей транзакции все возможные отправители равновероятны.

Не-связываемость: для любых двух исходящих транзакций невозможно доказать, что они были отправлены одному и тому же лицу.

Многие знают, ни одно ни другое свойство не характерны для биткоина, поскольку все транзакции являются публичными. А появление специального софта позволит упростить идентификации до минимума.


Конечно, уже к моменту написания работы по CN существовали различные миксеры (“tumblers”), которые позволяли объединить несколько транзакций и отправить через некий промежуточный адрес. Минусы такого решения через сервис-посредник, которому нужно доверять, очевидны. Также, к моменту возникновения CN были известны некоторые протоколы, построенные на основе доказательства с нулевым разглашением (zero-knowledge proof), однако на тот момент такие доказательства были достаточно большого размера, что делало их непрактичным для использования.

Собственно, в чем заключалось предложенное решение проблемы анонимности: во-первых, каждая транзакция подписывалась от лица группы, а не индивида, как в BTC. Для этого использовался вариант электронной цифровой подписи под названием “Кольцевая подпись” (дальнейшее развитие т.н. “Групповой подписи”).

Однако, при реализации полностью анонимной кольцевой подписи, возникала вероятность (очень высокая) двойной траты монет, в связи с чем в качестве примитива была взята т.н. связывающая анонимность (linkable anonymity), которая реализовывалась через механизм одноразового ключа (т.е. при создании каждой новой транзакции групповой ключ изменяется).

По сути так, хотя конечно стоит отметить что в реализации CryptoNote использовалась другая схема эллиптических кривых (EdDSA вместо ECDSA, как следствие использовалась эллиптическая кривая с другим уравнением и т.д.).

Анонимности добились, а что с конфиденциальностью? RingCT в помощь

Знаете, как бывает: вроде все есть, а чего-то не хватает.

Проблема с оригинальным CryptoNote протоколом была в том, что балансы пользователей не были скрыты, и, таким образом, можно было проанализировать блокчейн и деанонимизировать членов группы, подписавших транзакцию. Дополнительная проблема со скрытием балансов заключается в том, что при простом шифровании балансов нельзя достигнуть консенсуса по тому, не произведены ли монеты из воздуха (и не произошла ли двойная трата).

Для решения данной проблемы разработчиком Шеном Ноезером из Monero Research Lab было предложено использование Обязательства Педерсена (Pederson Commitment), которое позволяет доказывающему сделать расчет обязательства по сумме, не раскрывая её и будучи не в состоянии её изменить. Короткое пояснение из Monero Wiki:

Если создаются выходы с зашифрованными суммами, включая выход для получателя и выход со сдачей, который уходит обратно к отправителю, и зашифрованная комиссия за проведение транзакции равна сумме входов, которые тратятся, то транзакция является действительной, и подтверждается, что Monero создаются не из воздуха.

Таким образом, удается получить кольцевую конфиденциальную транзакцию (отсюда название). И, спросит любознательный читатель, что на этот раз не так?

Проблема собственно одна, но двоякая. С одной стороны, с RingCT увеличивается размер транзакции, что не лучшим образом сказывается на масштабируемости и комиссиях за транзакции. Кроме этого, опять же, ввиду большого размера подписи, ограничивается число возможных подписчиков n. Так, значение n в официальном программном обеспечении кошелька Monero составляет от 5 до 20. В результате анонимность отправителя для RingCT1.0 составляет самое большее 1 из 20.