MoneroKon D2 - Выступление Арама Дживаняна

23/06/2019

Lelantus: новый протокол для проведения анонимных транзакций с сокрытием отправителей и сумм на базе DDH

Арам является криптографом проекта Zcoin, а также основателем и генеральным директором Skycryptor, компании Techstars, пионеров в области разработки алгоритмов повторного шифрования прокси-серверов. В рамках проекта Zcoin Арамом был разработан протокол Lelantus, и сейчас он занят его масштабированием в целях перехода на новый уровень. До основания Skycryptor Арам был старшим исследователем-криптографом и возглавлял команду разработчиков в Американском университете Армении, где его научная группа занималась криптографическими исследованиями в интересах больших промышленных партнёров.

Аннотация

Мы предлагаем вам познакомиться с Lelantus, новой анонимной платёжной системой, гарантирующей как анонимность проводимых транзакций, так и высокий уровень анонимности с использованием доказательств небольшого размера, коротким временем верификации и отсутствием необходимости в доверенных настройках. Нами будет продемонстрирована возможность поддержки эффективной агрегации доказательств транзакций, обеспечивающей верификацию доказательств, которая, хоть и остаётся линейной, представляется довольно эффективной на практике. Протокол Lelantus основан на методах проведения конфиденциальных транзакций Zerocoin и использует одно из множества доказательств, и его эффективность, в частности, позволяет проводить анонимные транзакции в блокчейне с минимальным доверием, необходимым для применения хорошо изученных криптографических допусков.

Стенограмма:

Шурэ: Последний выступающий является одним из особых докладчиков, поскольку прилетел к нам издалека, и он расскажет нам о новом протоколе, который просто удивителен. Этот протокол не требует доверенных настроек, так что, прошу всех поддержать Арама Дживаняна. Он расскажет нам о протоколе Lelantus, обеспечивающем полную анонимность транзакций при помощи схемы доказательств «одного из n».

Арам: Приветствую всех! Меня зовут Арам Дживанян. Я работаю криптографом в проекте Zcoin. Zcoin — это анонимная криптовалюта, и я рад присутствовать сегодня здесь и рассказать вам о Lelantus, нашем новом протоколе проведения анонимных и конфиденциальных транзакций. Но перед тем как я продолжу своё выступление, я бы хотел поблагодарить тебя, Брэндон, и тебя, Саранг, за то, что пригласили меня, а особенно хотел бы поблагодарить Саранга за продуманную реализацию Lelantus и анализ протокола, за то, что помогал мне в течение последних нескольких месяцев. Спасибо.

Теперь вкратце о том, чему будет посвящено моё выступление. Начну с описания того, что собой представляет Zerocoin. Это протокол, который в настоящее время поддерживает сеть Zcoin. Мы поговорим об его ограничениях, которые являются причиной того, что мы хотим перейти на следующий уровень. Затем я расскажу о высокоуровневых характеристиках Lelantus, после чего мы рассмотрим криптографические подробности этого протокола, а затем кратко сравним существующие технологии обеспечения анонимности. В завершении презентации я коснусь нескольких открытых проблем и перспективных направлений исследований, которые способствуют дальнейшему развитию Lelantus.

Итак, Zerocoin является одной из первых технологий, обеспечивших самый высокий уровень анонимности транзакций. Она позволяет пользователям «сжигать» монеты, а затем тратить их, создавая новые монеты. И во время траты происходит доказательство с нулевым разглашением конфиденциальной информации. При этом предполагается, что монеты, которые тратятся, были созданы ранее без раскрытия их источника. И несмотря на то, что это обеспечивает довольно высокий уровень анонимности, наблюдается нехватка конфиденциальности. Более того, Zerocoin может работать только с фиксировано деноминированными монетами, что негативно сказывается на опыте пользовательского взаимодействия. Кроме того, размер доказательства очень велик. Он составляет примерно 25 килобайтов, и время верификации также довольно велико — примерно 300 миллисекунд.

Zerocoin использует сумматоры RSA, что означает, что протоколу также требуется некоторый тип доверенных настроек, чтобы сгенерировать параметры этих сумматоров. Вместе с тем в Zcoin нам удалось избежать этих доверенных настроек, используя параметры задачи RSA, сгенерированные в 1992. И наконец, но не в последнюю очередь, протокол совершенно разломан. Он совершенно небезопасен, поэтому нами был создан Lelantus, не имеющий функциональных и производительных ограничений Zerocoin.

Это совершенно новое решение, на создание которого нас вдохновили концепции Zerocoin и конфиденциальных транзакций, использующее одну из многих конструкций доказательства и Bulletproofs, не требуя доверенных настроек. Размер доказательств относительно мал и составляет примерно 1,5 килобайта на вход, который тратится, что обеспечивает эффективность постраничной верификации транзакций с поддержкой больших наборов анонимных участников, по 50-65 тысяч или даже до 100 тысяч. Lelantus позволяет работать с монетами на произвольную сумму, а также позволяет проводить в некотором роде прямые анонимные платежи.

Теперь давайте посмотрим, как он работает. Существует два базовых типа транзакций. Первый: транзакции с созданием монет — пользователи «чеканят» базовые монеты, вставляя их в обманные монеты произвольного достоинства. При этом обеспечивается доказательство баланса, то есть доказывается, что сума значений выходящих монет равна базовой монете, сумме, заключённой в созданную базовую монету. Это позволяет проводить общие «разбитые» транзакции, то есть объединять, разбивать и возмещать монеты, не раскрывая источника входящей монеты, сохраняя также конфиденциальность как суммы входящих, так и выводимых монет.

Для сокрытия источника входов нами используется криптографическая конструкция под названием «одно из n доказательств». Также эта конструкция используется для создания доказательства баланса. Давайте посмотрим, как это работает. Итак, одно из n доказательств - это протокол Sigma, необходимый для знания одного из n обязательств, C0, C1, Cn минус 1, что необходимо для обязательство по 0. Чтобы было понятно, мы работаем с обязательствами Педерсена.

Таким образом, идея, стоящая за этим протоколом, состоит в том, чтобы заявить, что одно из n обязательств содержит 0, то есть это всё равно что заявить, что есть индекс 1, и, таким образом, произведение Ci по дельте il будет обязательством по 0. Дельта i,l в данном случае будет дельтой Кронекера, то есть она будет равна 1, только если индекс i будет равен 1 и 0 в противном случае. И допуская, что N имеет степень 2, мы можем записать эти индексы i и 1 в двоичной форме, и мы можем переформулировать то, что мы хотим доказать, как произведение Ci в произведение дельта ij,lj как обязательство по 0. Имеет ли это смысл? Да.

Доказывающая сторона начинает с того, что создаёт обязательство для своего индекса 1, чтобы создать обязательство Cl1, Cl2, Cln для значений битов. Затем оно используется в двух n-параллельных протоколах Sigma, чтобы продемонстрировать, что знание открытия этих обязательств является битовыми двоичными значениями для lj, равными либо 0, либо 1. И во время раскрытия n элементов этих доказательств в форме f1, f2, f к n, где fj будет равен lj помноженное на x плюс aj. Теперь давайте сделаем следующие обозначения: допустим, мы обозначим fj,1 как равное fj, и мы увидим, что оно эквивалентно b, равно дельта 1,lj, помноженное на x плюс aj, поскольку если бит lj равен 1, то дельта 1,lj также будет равно 1 и 0 в противном случае.

Таким же образом обозначим fj,0 как x минус fj, что будет равно дельта 0,lj x минус aj. И для каждого индекса i мы можем построить полином pi,l x как произведение этих значений fj,ij. Вы видите, что полином pi,l x будет единственным полиномом в степени n среди всех этих p0, p1, pn минус 1, поскольку только дельта l l будет равна 1, а в противном случае будет равна 0 для всех остальных индексов.

Таким образом, доказывающая сторона может вычислить произведение Ci для произведения этих полиномов, и в своём изначальном сообщении доказывающая сторона также может создать специальный шифротекст, который сможет отменить эти полиномы низкого порядка в уравнении. Упс, прошу прощения. Поскольку создание этих коэффициентов не требует продвинутого знания значения x, доказывающая сторона может построить это во время создания доказательства. А закончим мы доказательством того, что произведение обязательств Ci в степени произведения fj,ij, умноженное на произведение этих волшебных обязательств, будет обязательством по 0.

Надеюсь, это позволило вам в общих чертах понять, как работает наше «одно из n доказательств». Мы не станем нырять в кроличью нору, но в этом суть всего протокола, это изначальная конструкция [неразборчиво]. Вы видите, что всё относительно просто, доказательство и процесс верификации умещаются на одной странице. Вот так. И здесь важно отметить, что этот транскрипт доказательства также содержит это значение. Это является шифрованием случайности обязательства r. Это важно, так как будет использоваться для создания доказательства баланса.

Давайте посмотрим, насколько просто строится Zerocoin как схема с этой конструкцией «одного из n». Схема позволяет создать монету с некоторым фиксированным значением, а затем анонимно потратить её, не раскрывая источника. Итак, для создания монеты пользователь просто генерирует случайный серийный номер монеты S, а затем создаёт обязательство по серийному номеру с некоторой произвольностью r. Это будет монета пользователя, которая будет опубликована в блокчейне. А затем пользователь захочет потратить её, для чего ему будет необходимо просто раскрыть серийный номер монеты S, и такое раскрытие также важно с точки зрения предотвращения возможных атак двойной траты, и, когда серийный номер будет раскрыт, как доказывающая сторона, так и верификаторы смогут гомоморфно выделить серийный номер из всех обязательств, как если бы мы ранее создавали обязательства или ранее создавали монеты. Вы можете выделить этот специфический для каждой монеты серийный номер во всех обязательствах, а в результате получится новый набор обязательств, одно из которых уже будет обязательством по нулю, и вы сможете доказать, что вам известно, какое из обязательств является обязательством по нулю.

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

Таким образом, в случае с конструкцией Lelantus монеты имеют обязательство по серийному номеру монеты и используют при этом случайное значение R, а также значения монет. Мы используем независимые генераторы и называем эту конструкцию двойным слепым обязательством. Тут следует отметить, что серийный номер не генерируется случайным образом. Он создаётся путём хеширования некоторого публичного ключа. Сначала генерируется публичный ключ, соответствующий свидетельству, и он называется ключом траты. Этот ключ будет использован для отправки транзакции, когда монета будет тратиться.

Итак, на этом графике показана одна из n схем построения, используемых Lelantus. Это изменённая версия более оптимизированного протокола, не оригинального кросс-протокола, это оптимизированная версия, включающая наши собственные изменения, которые были внесены с целью поддержки слепых обязательств, а также для балансировки процесса генерации. Тут важно отметить, что эти транскрипты доказательства содержат и публикуют эти два значения, zV и zR, которые являются, соответственно, зашифрованными значениями ценности монеты V и её случайности R.

Если предположить, что [неразборчиво] транзакция выдаёт n новых монет и забирает n старых, транскрипт транзакции будет содержать эти выходящие монеты, а также n старых монет из множества доказательств по каждому потраченному входу, и все верификаторы смогут независимо произвести следующие вычисления. Они могут вычислить значение A, которое является произведением выходящих монет в степени xm, что на основе гомоморфных свойств онлайн схемы обязательств будет обязательством по сумме всех выходящих монет. Да. И верификаторы также могут вычислить значение B как обязательство по сумме этого значения zV, а также по сумме значений zR, помноженных на произведение некоторых вспомогательных данных, которые также содержатся в транскрипте доказательства. В результате получится обязательство по сумме для всех входящих монет.

Таким образом, не раскрывая значения этих входов и даже не раскрывая, какие монеты были потрачены, мы в конечном счёте получаем обязательство по сумме всех входящих монет. И если баланс транзакции сохраняется, то всё становится проще, доказывающей стороне достаточно предъявить доказательство превосходства значения A над B относительно генераторов g и h2.

О’Кей, это касательно того, как мы проводим анонимные траты и как мы получаем доказательство баланса. Теперь перейдём к тому, как мы производим постраничную верификацию этих доказательств. Верификация одного из n доказательств происходит линейно, начиная с числа n, и сводится к этому большому многократному возведению в степень. Да, вот здесь, генераторы, которые все являются специфическими для транзакции, поскольку, как вы помните, как нами было описано в схеме Zerocoin, эти генераторы вычисляются при помощи этого обязательства Ci, которое делится на j в степени St, где St является серийным номером монеты, которая тратится при проведении транзакции.

Что хорошо в наших настройках, так это то, что во время траты эти серийные номера явно раскрываются. Таким образом, мы можем воспользоваться тем фактом, что серийные номера St публикуются в блокчейне и используются при проведении операции верификации, и для переформулирования операций верификации при помощи альтернативного уравнения, в котором генераторы будут агностическими относительно транзакции, так как C и St уже переносятся в правую часть уравнения. Это позволяет проводить групповую верификацию множества доказательств и помогает сохранить потенцирование для каждого дополнительного доказательства при работе в пределах одного и того же набора анонимных участников. В результате мы имеем невероятную экономию.

Как можно увидеть в этой таблице, средние временные затраты на верификацию одного доказательства при размере набора анонимных участников, равном 16 000, составляют всего 12 миллисекунд, а при размере набора анонимных участников, равном 65 000, — всего 35 миллисекунд.

Наконец, давайте обсудим, как мы проводим совершенно анонимные платежи, когда выводимые монеты могут быть потрачены только выделенными получателями. В рамках нашей структуры, чтобы потратить эту монету, у которой следующая структура: обязательство по монете, серийный номер S, пользователь должен обладать секретными значениями, значением монеты, случайным значением, а также свидетельством или ключом траты, который использовался для того, чтобы сгенерировать серийный номер. И мы можем использовать процесс обмена, подобный алгоритму Диффи-Хенллмана, чтобы это свидетельство было доступно только получателю. Как в случае с простыми настройками, получатель может сгенерировать новый публичный адрес, а отправитель может сгенерировать случайное значение и создать публичный ключ, свидетельство по которому будет доступно только получателю, конечно же. Это также может сработать с альтернативным ключом на основе протокола, использующего скрытые адреса.

О’Кей, прошу прощения, если вы найдёте какие-то неточности в цифрах, но просто чтобы быстро сравнить Lelantus с другими технологиями обеспечения анонимности, мы видим, что размеры доказательств и время верификации вполне сравнимы с существующими показателями Monero, но позволяют использовать больший набор анонимных участников. Нам следует сделать эту конструкцию более устойчивой к различным типам атаки, включая флуд-атаки и атаки путём анализа графов транзакций.

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

В заключении хотелось бы отметить, что это новый протокол, и ещё многое можно сделать, чтобы улучшить его. Безусловно, нам бы хотелось увидеть и альтернативный подход к проведению анонимных платежей, чтобы в результате мы имели неотслеживаемые монеты, но исследовательская задача, над решением которой я сейчас работаю всё время, заключается в масштабировании одного из n доказательств. Я уверен, что это возможно, и сейчас мне уже удалось построить два уровня одного из n доказательств, в результате чего, возможно, мне удастся значительно сократить время доказательства. Также я думаю, что можно разработать, прошу прощения, разработать более эффективные схемы «M из N». Если нам удастся разработать эффективное количество схем «M из N», это позволит оптимизировать размер транзакций со множеством входов. Также будет интересно увидеть, как мы сможем поддержать передачу множества разных активов или также обеспечить возможность аудита транзакций в случае с предприятиями.

Спасибо. Буду рад ответить на ваши вопросы.

Шурэ: У кого-нибудь есть вопросы к Араму?

Вопрос из зала: Спасибо за выступление, я думаю, что Lelantus — это действительно круто. Мой вопрос заключается в следующем: когда ты работаешь с Zcoin и уходишь от протокола Zerocoin, есть ли какой-то промежуточный протокол, с которым вы работаете, а также существует ли какая-то ориентировочная дата, когда и если Zcoin реализует Lelantus? Будет ли протокол реализован в текущей форме или вы ещё собираетесь решить вопросы, связанные с эффективностью, о которых ты говорил?

Арам: Да, безусловно. Есть текущая версия, которую мы называем Sigma, которая, по сути, является копией конструкции Zerocoin, перенесённой на одну из n наших схем, которые я уже описал. Версия уже проходит испытания в нашей тестовой сети и скоро будет перенесена в основную сеть. И мы планируем реализовать Lelantus в тестовой сети в начале следующего 2020 года.

Ответ из зала: Спасибо.

Шурэ: Кто-нибудь ещё хочет задать вопрос? Отлично, давайте перейдём к… да, я вижу ещё одного желающего.

Вопрос из зала: Спасибо большое за выступление. Не мог бы ты описать некоторые проблемы, связанные с анонимностью относительно получателя суммы. Может стоит предварительно «вспенивать» средства, чтобы защитить их анонимность в случае с Lelantus?

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

Шурэ: Хорошо, на этом мы можем отпустить Арама.

[аплодисменты]

Арам: Спасибо.

Шурэ: Мы заканчиваем конференцию на позитивной ноте и говорим о сублинейных кольцевых подписях, что довольно круто. Как бы то ни было, я хочу поблагодарить вас за то, что приехали и стали частью первой ежегодной Monero Konferenco. Для меня это было честью. Большое спасибо. Ещё раз хотелось бы поблагодарить спонсоров My Monero, Cypher Market, я могу кого-то забыть, но постараюсь этого не делать… Ах да, бейджи! Мне хотелось бы поблагодарить Cake Wallet, Cypher Market и сообщество Monero в целом, Globee, Insight, мою некоммерческую организацию, Magic, команду Monero Outreach, которой были изготовлены бейджи и футболки, а также все графики для видео презентаций и всё остальное, в принципе, всё было собрано xmrhaelen и thunderosa. Нельзя не упомянуть команду Monero Talk, наших медийных партнёров, Morph Token и Fire Life или File Life — браво! My Monero, Symas Corporation за то, что прилетели, Говарда, Tari, Рика, Globee, для меня было честью встретиться с вами, и я хочу подчеркнуть это. Эта конференция — заслуга всего сообщества, и я не могу не гордиться этим сообществом, к которому принадлежу.

Перевод: Mr. Pickles
Редактирование: Agent LvM
Коррекция: Kukima