Часть 2
Оригинал искать здесь.
После хардфорка 10 января 2017 года протокол RingCT, который мы описали в предыдущей части, был включен в транзакции Monero, начиная с блока 1220516. По умолчанию, транзакции включали RingCT подпись, но до хардфорка в сентябре 2017 года все еще можно было формаровать их и без нее. В первый месяц после реализации сообщалось, что примерно 50-60% переводов содержали RingCT, так что пользователи оценили его преимущества.
Как мы упоминали в предыдущей части, одна из основных проблем при реализации RingCT состояла в большом размере транзакции. Несмотря на то, что после введения RingCT отпала необходимость в деноминации суммы перевода на фрагменты с фиксированным номиналом, размер транзакций в целом оставался большим (~12.6kB для типичной транзакции с одним инпутом и двумя аутпутами). Это стало одним из побудительных мотивов в поисках нового, более совершенного протокола.
В августе 2017 года, авторами из ряда университетов Китая, университета Мельбурна, а также сотрудником компании Huawei была представлена работа RingCT 2.0. В ней, авторы ставили две задачи: определение строгих критериев безопасности для протокола RingCT и всех его будущих версий, а также разработку новой версии протокола, в котором размер подписи не зависит от количества групп аккаунтов, участвующих в транзакции. Нас, конечно же, больше интересует решение второй задачи.
Собственно, что собой представляет RingCT 2.0: он базируется на более простых концепциях, таких как обязательство Педерсона (известно нам по предыдущей части), а также аккумулятор с односторонним доменом и подпись знания, относящаяся к этому аккумулятору. Вместе они выполняют функцию связывающей круговой подписи. Подробное описание нтерпретации RingCT 2.0, используемое в Monero, демокод на python и примеры даны здесь.
Давайте разбираться.
Впервые односторонние аккумуляторы были предложены в 1994 году Джошем Бенало и Майклом де Маре из университета Кларксон и компании Giordano Automation. Авторы одними из первых предложили децентрализованную альтернативу цифровой подписи. По сути, аккумулятор — односторонняя функция, подтверждающая принадлежность чего-либо к определенной группе, не раскрывая при этом отдельных членов группы. Важное свойство аккумулятора — полученная в результате работы алгоритма структура с содержимым коммитмента имеет постоянный размер.
Достаточно интересно, что в 2013 году в одной работе, известной в узких кругах, предлагалось использовать аккумулятор для подтверждения того, что транзакция валидна и не создана из воздуха. Таким образом, на текущем этапе развития, Monero и монеты, основанные на протоколе Zerocoin, являются если не ближайшими, то во всяком случае некоторыми родственниками.
Важный момент из Zerocoin: в оригинальном протоколе было одно условие, а именно:
Наше приложение требует определенных свойств от аккумулятора. Без доверенных сторон, аккумулятор и связанные с ним свидетельства (witness) должны быть общедоступными и проверяемыми (хотя мы намерены ослабить это требование и включить одну доверенную фазу установки (trusted setup), в которой сгенерируются все параметры). |
Этот момент будет важен для дальнейшего повествования, а пока мы возвращаемся к RingCT 2.0. Подпись знания (Signature of knowledge) была предложена в 1997 году швейцарскими исследователями из ETH Zurich (Высшая техническая школа) и банка UBS. Их работа была посвящена групповым подписям, и решала проблему линейной зависимости размера публичного ключа от размера группы. Чтобы не создать путаницу с proof of knowledge, zero-knowledge proof и т.д., а также подчеркнуть, что создаваемое доказательство может использоваться как подпись, было решено назвать именно signature of knowledge.
Как все это вместе работает?
Аккумулятор с односторонним доменом используется для сокращения обязательства Педерсона по сравнению с коммитментами версии RingCT 1.0 (получаемое значение не зависит от количества групп аккаунтов), а подпись знания — для сокращения Многослойной связывающей спонтанной анонимной групповой подписи (Multilayered Linkable Spontaneous Anonymous Group Signature), которая используется в RingCT 1.0. В целом, почти во всем семействе CryptoNote больше не используют классические кольцевые подписи, на смену им пришли MLSAG — адаптированная для нескольких входов версия аналогичных однослойных кольцевых подписей, LSAG.
Во всем этом, как заметит наблюдательный читатель, есть одно но: поскольку в аккумуляторе используется “trusted setup”, ноды должны доверять друг другу на начальном этапе. По этой причине, на первом этапе в коммьюнити Monero отказались от использования RingCT 2.0. Основная проблема — в “кольце” может находиться инсайдер, который по косвенным признакам благодаря “trusted setup” сможет вычислить, кто именно подписал транзакцию.
История, как видится, на этом не закончилась — тот же коллектив авторов, пополнив ряды коллегами из Shanghai Jiao Tong University, в 2019 году выпустил работу по RingCT 3.0. Авторы представляют наиболее компактную по размеру (по их заверению) круговую подпись в истории без “trusted setup”. Поскольку данный апгрейт не произошел в сети Monero на момент написания статьи (да и планов, вроде бы нет, насколько нам известно), мы не будем рассматривать данный кейс. Вместо этого, мы бы хотели подойти к наиболее релевантной нам теме — технологии Bulletproof, и как мы в CUTcoin Labs используем ее для создания обладающих беспрецедентной анонимностью токенов, которая открывает широкие возможности для токенизации любых активов, а также развитие DeFi приложение.
Об этом мы напишем в следующей статье.