21 апреля 2020

Monero, Bulletproofs и далее: приватная токенизация

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

Параллельно с разработками китайских исследователей, которые мы успели описать в предыдущей части, работа по уменьшению размера транзакции шла и со стороны оригинального протокола RingCT, среди которых был и Грэг Максвелл, основоположник использования Обязательства Педерсена (Pedersen Commitments). В конце 2017 года (дополненная версия была представлена в мае 2018 на симпозиуме IEEE по безопасности и конфиденциальности), группа авторов с его участием выпустила работу под названием “Bulletproofs: Short Proofs for Confidential Transactions and More”. О ней и пойдет речь сегодня. 

Что такое Bulletproofs?

Если коротко, то это не интерактивные доказательства с нулевым разглашением, или конструкции, предоставляющие участникам системы возможность проверить истинность определенных утверждений. Их важное свойство – отсутствие trusted setup (т.е. не требуется, чтобы участники доверяли другу другу или единому центру). В Monero с помощью Bulletproof подтверждается, например,  что зашифрованное число находится в заданном диапазоне, при этом не раскрывается другая информация о нем, а также равенство суммы монет на входе и выходе транзакции (деньги не напечатаны ‘из воздуха’).

Технология Bulletproof основана на работе 2016 года, посвященной доказательствам с нулевым разглашением для произвольных арифметических схем (arithmetic circuits). В теоретической информатике арифметическая схема представляет собой модель вычисления, в которой инпуты проходят через последовательность элементов схемы, каждый из которых производит определенную операцию (вычисляет специфичную функцию от входных данных). В указанной работе авторы предлагают доказательство с нулевым разглашением для решения проблемы валидности схемы (Circuit Satisfiability Problem), которое растет логарифмически (а не линейно, как было раньше) от ее размера. Где то мы похожий трюк уже видели, да?

Вспомним из первой части, что использование Обязательства Педерсена в Confidential Transactions позволяет определить, что номиналы инпутов и аутпутов находятся в определенном промежутке — все это дело имеет наименование range proof. Range proof добавляется к каждой транзакции, тем самым увеличивая ее удельный вес.

По сути, Bulletproof представляет собой замену range proof на этапе “подписания” обязательства. При этом, bulletproof короче, чем другие range proof. Bulletproof помогают не только уменьшить размер транзакций, использующих Confidential Transaction, но и позволяют проверяющему объединять несколько range proof для транзакций с несколькими выходами в одно короткое доказательство. Вместо транзакций с несколькими выходами, требующими range proof для каждого выхода, все они могут быть объединены в одну.

Bulletproof позволяют реализовывать протоколы конфиденциальных вычислений с несколькими участниками (Secure Multi-party computation, MPC), а также создавать смарт-контракты с повышенной приватностью. При этом, в отличии от zk-SNARK и zk-STARK, Bulletproof не требуют trusted setup и меньше по размеру, хотя их проверка занимает больше времени.

Со времени внедрения Bulletproof в код Monero, размер транзакции удалось сократить до 80%.

Понятно, что роль, которую играют Bulletproofs в Monero, – огромна, поэтому важно понимать, какие изменения произошли в них в связи с появлением в CUTcoin токенов. В системе CUTcoin при проведении транзакции отправителем оплачивается комиссия (fees), и это будет также работать в переводах с токенами. Причем комиссия будет выплачиваться в CUT. Это означает, что в одной транзакции могут присутствовать инпуты / аутпуты и токенов, и  монет CUTcoin. В транзакциях для них должна создаваться такая конструкция Bulletproof, что:

1) подтверждается равенство сумм монет и токенов на входе и выходе из транзакции;

2) подтверждается то, что номиналы инпутов / аутпутов положительны.

При этом токены с CUTcoin монетами не должны смешиваться между собой.

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

С точки зрения конечного пользователя, это хорошая новость, поскольку незначительные изменения в старой, хорошо проверенной (и прошедшей аудит, тут нужна ссылка) технологии позволили значительно расширить функциональные возможности платформы CUTcoin.