
Ferveo включает в себя специально разработанный распределенный генератор ключей & специально разработанная схема порогового дешифрования, предназначенная для обеспечения производительности и производительности; требования безопасности основного механизма консенсуса.
Введение
Проблемы опережающего управления, «цены, извлекаемой майнерами» и другие формы арбитража блокчейнов хорошо известны по мере того, как финансовые приложения переходят на блокчейны. Поскольку транзакции появляются в мемпуле до их включения в цепочку, валидаторы (или другие лица, желающие платить более высокие комиссии), как правило, могут изменить порядок транзакций в соответствии со своими интересами.
В идеале транзакции не становятся общедоступными до тех пор, пока они не будут выполнены в сети. Рассмотрим гипотетический сценарий, в котором один доверенный объект публично выполняет транзакции в том же порядке, в котором они были получены. Этот доверенный объект может генерировать пару открытого и закрытого ключей; транзакции могут быть зашифрованы с помощью этой пары ключей, а доверенный объект может расшифровать и выполнить транзакции в порядке их получения. Однако в децентрализованной сети сохранение транзакций в зашифрованном виде до тех пор, пока они не будут готовы к выполнению, является более сложной задачей.
Предположим, что блокчейн с доказательством доли и 100 валидаторами с равными ставками безопасно работает при условии, что как минимум 67 валидаторов исправны. Мы хотели бы, чтобы наш процесс расшифровки работал в том же предположении: транзакции расшифровываются и выполняются в том порядке, в котором они получены, тогда и только тогда, когда как минимум 67 валидаторов исправны.
В блокчейне с доказательством доли есть естественный способ добиться этого: распределенная генерация ключей и пороговая криптография. Набор валидаторов генерирует общий открытый ключ вместе с отдельными общими ресурсами соответствующего распределенного закрытого ключа. Любой может зашифровать транзакции с помощью распределенного открытого ключа, и только достаточно большое количество валидаторов способно расшифровать транзакцию.
Предполагая, что по крайней мере 67 валидаторов не вступают в сговор с целью расшифровки транзакций на ранней стадии, валидаторы могут упорядочить транзакции до расшифровки. Как только блок транзакций предложен, эти 67 валидаторов могут подключиться к протоколу расшифровки, восстанавливая незашифрованные транзакции и выполняя их в установленном порядке. Поскольку содержимое транзакций расшифровывается только после того, как протокол обязуется расшифровать и выполнить их в определенном порядке, валидатор не может вставлять свои собственные транзакции в тот же блок, как только он обнаруживает содержимое другой транзакции.
Обмен секретами
Как 100 разных валидаторов могут совместно использовать части закрытого ключа, так что только 67 из них могут расшифровать? Ответ начинается с обмена секретами Шамира — умной схемы, в которой 100 человек могут поделиться секретной ценностью.�, элемент некоторого конечного поляФ, так что каждая подгруппа из 67 человек может восстановить секрет, но каждая подгруппа из не более 66 человек не может.
Предположим, что доверенный дилер Алиса знает важный секрет.�и желает разделить его между многими сторонами. Тогда Алиса может построить полиномп(Икс):
п(Икс)"="�+�1Икс+�2Икс2+…+�66Икс66
где�1,…,�66являются равномерно случайными элементами того же конечного поля, что и�. Алиса может распределить значениеп(1)первому человеку,п(2)второму человеку и так далее. Обратите внимание, чтоп(0)это секретная ценность�, но каждый человек получает оценкупкоторый "смешивает"; секретная ценность�с остальными коэффициентамип. Поскольку существует много различных возможных значений�1,…,�66, обучениеп(я)дляя≠0не раскрывает никакой информации о�. Действительно, даже если 66 человек сравнили свои оценочные значения вместе, есть∣Ф∣потенциальные полиномы именно с этими 66 оценочными баллами, каждый из которых имеет разное значение, равное 0, поэтому каждое подмножество из 66 человек не обладает никакой информацией о фактическом значении�.
Однако мы знаем, что полином 66-й степени всегда однозначно определяется 67 различными оценками; следовательно, каждая подгруппа из 67 человек может интерполировать свои оценки и раскрыть секрет�.
Распределенная генерация ключей
Совместное использование секретов — это важный инструмент, используемый для обмена секретным ключом между несколькими объектами. Доверенный дилер Алиса может распространять доли распределенного закрытого ключа; однако в реальном мире зависимость от проверенного дилера нежелательна. Действительно, есть много способов, которыми злонамеренный дилер Ева может испортить обмен секретами:
- Ева могла отправлять оценки разных полиномов разным людям.
- Ева могла послать некоторым людям правильные оценки полинома, но ничего не послать другим людям.
- Ева знает тайную ценность�и может делать с ним гнусные вещи
Злоумышленник Eve может помешать процессу генерации распределенных ключей, не позволяя ему создавать действительные общие ключи; цензурирование общих ключей от конкретных валидаторов, снижение устойчивости распределенного ключа; или секретный ключ известен за пределами желаемого кворума 67 валидаторов.
Следовательно, нам нужно построить протокол, основанный на совместном использовании секретов, но с гораздо лучшими свойствами:
- Каждый должен иметь возможность убедиться, что его оценка получена из одного и того же полинома.пкак и все остальные
- Каждый должен иметь возможность убедиться, что все остальные получили свои оценки успешно.
- Никто не должен знать сгенерированный закрытый ключ
Благодаря этим трем свойствам генерация распределенных ключей достигает желаемой цели: если по крайней мере 67 из 100 валидаторов честно следуют протоколу, секретный распределенный ключ будет успешно создан, и все 100 валидаторов смогут получить свою долю закрытого ключа без цензуры. Если Ева попытается совершить какое-либо преступление, ее усилия будут обнаружены.
Проверка последовательности оценок
Каждый участник должен иметь возможность убедиться, что дилер использовал один полином для получения всех оценок.
Первое свойство может быть достигнуто с помощью полиномиальной фиксации для фиксации полинома п. Пусть ггруппа эллиптических кривых с генератором простого порядка порядкаФ. Тогда вектор обязательств:
Сп"="([�]г,[�1]г,[�2]г,…[�66]г)
переходит к полиномупбез раскрытия его коэффициентов. Однако если оценкап(я)кому-то раскрывается, то эту оценку можно проверить, взяв внутренний продукт(1,я,я2,…,я66)сСпи сравнивая с[п(я)]г:
[п(я)]г"="[�]г+[�1я]г+[�2я2]г+…+[�66я66]г
Если предполагаемая оценкап(я)на самом деле это не оценкапвя, то эта проверка на равенство с высокой вероятностью завершится неудачей. Следовательно, пока все согласны с общим полиномиальным обязательствомСп, тогда они знают свою оценкуп(я)произошел из того же многочлена, что и все остальные.
Как убедиться, что все успешно получили свои оценки
Это свойство, называемое публичной проверяемостью совместного использования секрета, достичь сложнее.
Предположим, что Ева, ненадежный дилер, сообщает всем о своем секретном обмене, публикуя полиномиальное обязательство и оценки в блокчейне; тогда, по крайней мере, все согласятся с полиномиальным обязательством, но отдельные оценки должны быть зашифрованы для каждого получателя (в противном случае, если все знают оценки, любой может интерполировать, чтобы восстановить секрет).
Одним из возможных подходов является использование обмена ключами Диффи-Хеллмана и симметричной криптографии, такой как шифр AES или ChaCha, для шифрования оценок. Однако эти шифрования не подлежат публичной проверке; только предполагаемый получатель может расшифровать оценку и сверить ее с обязательством. Это проблема в распределенной среде; если получатель окажется в автономном режиме, Ева могла бы послать ему зашифрованный мусор, и никто бы об этом не узнал! Это можно смягчить с помощью дополнительных предположений о жизнеспособности, механизма жалоб для плохих дилеров и криптоэкономических стимулов вести себя правильно, но в целом это не идеально в контексте блокчейна. .
К счастью, публично проверяемые схемы генерации распределенных ключей могут обеспечить общедоступное проверяемое совместное использование секретов (PVSS) при использовании билинейная карта (называемая спариванием) на эллиптической кривой, удобной для спаривания, например BLS12-381.
В схеме PVSS оценки шифруются с использованием схемы, в которой только предполагаемый получатель может расшифровать оценку, но все остальные все равно могут сверить зашифрованную оценку с зафиксированным полиномом.
Полная схема PVSS была ранее объяснена в разделе Демистификация агрегированного DKG.
К счастью, в условиях блокчейна полная схема Aggregatable DKG не требуется, и мы можем получить тот же результат, используя упрощенный подход (подробнее об этом чуть позже).
Обратной стороной этой схемы PVSS является то, что никто не может полностью расшифровать свои оценки.п(я); вместо этого получатели расшифровывают свои оценки до точки эллиптической кривой.[п(я)]ЧАСгдеЧАСявляется фиксированным генератором. Таким образом, распределенный ключ совместно используется и распределенный закрытый ключ.[п(0)]ЧАС являются элементами группы вместо элементов поля. Это затрудняет использование многих криптографических схем с открытым ключом, в которых предполагается, что закрытый ключ будет состоять из элементов полей.
Хотя существуют некоторые схемы PVSS, которые совместно используют элементы полей публично проверяемым способом, оказывается, что в этом нет необходимости, и чем проще групповых элементов достаточно (а в некотором смысле даже лучше!)
Мы будем называть полиномиальное обязательствоп, а также публично проверяемые зашифрованные оценкип, экземпляр PVSS.
Обеспечение того, чтобы никто не знал секретный ключ
Независимо от того, какой подход к совместному использованию секрета используется, дилер всегда будет знать коэффициенты используемого полинома и, следовательно, всегда будет знать секретный постоянный член. Однако мы можем воспользоваться тем фактом, что схема PVSS является аддитивно гомоморфной: сложение двух полиномов можно выполнить, просто сложив соответствующие коэффициенты каждого полинома, чтобы получить коэффициенты нового многочлена. Кроме того, оценка в ясуммы двух полиномов равна сумме их оценок при я; и поскольку точки эллиптической кривой также аддитивно гомоморфны, обязательство суммы двух полиномов является поэлементной суммой их обязательств!
Поэтому к каждому коэффициенту, оценке, зашифрованной оценке или обязательству при совместном использовании секрета можно добавить соответствующее значение из другого совместного использования секрета. , чтобы получить полностью действительные значения нового совместного использования секрета. Если каждый из 67 разных участников генерирует и оценивает свой полином пдж, то коэффициенты суммированного полиномап"="п1+…+п67 совершенно секретны: даже если 66 участников откроют друг другу свои секретные полиномы, для восстановления этой информации недостаточно.п.
Агрегация экземпляров PVSS
Основная проблема с производительностью при генерации распределенных ключей возникает при парной проверке; хотя валидаторов может быть всего 100, и 67 из них действуют как дилеры экземпляров PVSS, простая парная проверка требует 6600 операций проверки PVSS для всех валидаторов, чтобы проверить правильность всех разделов секрета, а это довольно дорогая стоимость.
Используя свойство аддитивной гомоморфности PVSS, подход Aggregatable DKG показывает, что этапы проверки могут выполняться агрегатором, который создает агрегированный экземпляр PVSS, который представляет собой сумму других экземпляров PVSS, а остальным нужно только проверить достоверность агрегированного экземпляра (и правильность агрегации).
В асинхронном режиме это несколько нетривиально, поскольку каждый должен договориться о наборе используемых экземпляров PVSS; на синхронизированном блокчейне это проще. Все непроверенные экземпляры PVSS публикуются в блокчейне; агрегатор проверяет все опубликованные экземпляры PVSS и публикует агрегацию.
Пороговая криптография
Как только в блокчейне будет агрегировано достаточное количество экземпляров PVSS, создается открытый ключ [п(0)]г раскрывается, и валидаторы владеют своим частным ключом [п(я)]ЧАС..
Хотя валидаторы, безусловно, могут выполнять полиномиальную интерполяцию для восстановления закрытого ключа [п(0)]ЧАС валидаторы должны использовать сгенерированные ими общие ресурсы закрытого ключа для создания общих ресурсов расшифровки каждой транзакции. Затем интерполяция долей расшифровки восстанавливает открытый текст каждой транзакции. Доли расшифровки полезны только для расшифровки одного зашифрованного текста; закрытый ключ и общие ключи остаются секретными, а будущие зашифрованные тексты также могут быть зашифрованы с помощью соответствующего открытого ключа.
Основной проблемой процедуры порогового дешифрования является производительность; из-за накладных расходов, связанных с выполнением каждым валидатором своей доли протокола порогового дешифрования, общий протокол должен быть чрезвычайно легким, чтобы обеспечить возможность обработки сотен транзакций, расшифровываемых сотнями валидаторов, в пределах времени блока всего в несколько секунд.
Однако передовые схемы, используемые в Ferveo, разработаны так, чтобы быть совместимыми с закрытыми ключами элементов группы эллиптических кривых, созданными нашим PVSS. ДКГ. Схемы порогового шифрования с открытым ключом не новы: схема, использующая закрытые ключи полей, и схема, основанная на идентификации влияют на новую высокопроизводительную выбранную схему защиты зашифрованного текста для современных эллиптических кривых, удобных для спаривания типа 3, таких как BLS12-381.
Обзор
Позволятье:г1×г2→гТбыть парой на BLS12-381, иЧАСг2быть функцией хэш-группы, которая хешируетг2.г€г1иЧАС€г2 — это общедоступные генераторы, которые использовались при генерации распределенных ключей.
Схема порогового шифрования позволяет шифрователю получить общий секрет сот порогового открытого ключаДа"="[п(0)]г, так что 67 валидаторов, владеющих общими секретными ключамиЗя"="[п(я)]ЧАСтакже может получить общий секрет. И шифратор, и дешифратор могут использовать общий секрет для получения симметричного ключа.
Чтобы получить общий секрет
- Позволятьрбыть случайным скаляром
- Позволятьс"="е([р]Да,ЧАС)
- Позволятьты"="[р]г
- ПозволятьВт"="[р]ЧАСг2(ты)
Проверка зашифрованного текста (для выбранной безопасности зашифрованного текста)
Безопасность выбранного зашифрованного текста требует отклонения недействительных или злонамеренно созданных зашифрованных текстов. Учитывая зашифрованный текст(ты,Вт), валидаторы должны это проверитье(ты,ЧАСг2(ты))"="е(г,Вт)для подтверждения достоверности зашифрованного текста.
Пороговая расшифровка
Чтобы получить общий секрет из зашифрованного текста(ты,Вт), валидатор должен
- Проверить достоверность зашифрованного текста(ты,Вт).
- ПостроитьСя"="е(ты,Зя).
Как только 67 значенийСядоступны, их можно объединить для полученияс"="∏Ся�я(0)где�я(0) — это коэффициент Лагранжа, который интерполируется по области оценки этих 67 валидаторов. Обратите внимание, что общий секрет является элементом мультипликативной подгруппы гТ.
Последние мысли
Ferveo включает в себя как специально разработанный генератор распределенных ключей, так и специально разработанную пороговую схему дешифрования, предназначенную для удовлетворения требований к производительности и безопасности базового механизма консенсуса. Когда в схемы добавляются оптимизации, агрегации и амортизация, операции генерации распределенных ключей и порогового дешифрования достигают производительности, необходимой для масштабной работы в производственном блокчейне.
Написано Джо Бебелем, исследователем криптографии с нулевым разглашением и amp; разработчик протокола в Heliax, команде Anoma.
Если вы заинтересованы в криптографии с нулевым разглашением, передовых криптографических протоколах или инженерных позициях в Rust, ознакомьтесь открытыми вакансиями в Heliax .