← Cloudflare Randomness Beacon / randomness-beacon / cryptographic-background
Этап настройки
На этапе настройки drand создается коллективная пара закрытого и открытого ключей, разделяемая между 𝑛 участников. Это выполняется с помощью 𝑡-of-𝑛 Процесс распределённой генерации ключей (DKG), в результате которого каждый участник получает копию коллективного открытого ключа, а также долю закрытого ключа от коллективного закрытого ключа. При этом ни один узел не знает коллективный частный ключ. Каждую долю закрытого ключа затем можно использовать для криптографических пороговых вычислений, например для создания пороговых подписей, где как минимум 𝑡 вкладов, полученных с помощью индивидуальных долей закрытого ключа, необходимо для успешного завершения коллективной операции.
DKG выполняется полностью распределенным образом, что исключает единые точки отказа. Ниже приведен обзор различных подкомпонентов реализации DKG в drand.
Разделение секрета
Разделение секрета представляет собой важный метод, на котором основано множество продвинутых механизмов пороговой криптографии.
Разделение секрета позволяет разбить секретное значение 𝑠 в 𝑛 долей 𝑠1,…,𝑠𝑛 чтобы 𝑠 можно восстановить, только если пороговое количество 𝑡 долей.
Разделение секрета Шамира (SSS)
Схема SSS является одним из наиболее известных и широко применяемых подходов к разделению секрета, а также ключевым компонентом drand. Она работает над произвольным конечным полем, однако в упрощенном варианте используются целые числа по модулю 𝑝, обозначаемое через ℤ𝑝. Пусть 𝑠∈ℤ𝑝 обозначает секрет, подлежащий разделению.
Распределение долей
Чтобы разделить 𝑠, дилер сначала создаёт многочлен, 𝑞(𝑥)=𝑎0+𝑎1𝑥+⋯+𝑎𝑡−1𝑥𝑡−1 с 𝑎0=𝑠 и (случайный) 𝑎𝑖∈ℤ𝑝 для 𝑖=1,…,𝑡−1 а затем создаёт одну долю 𝑠𝑖 для каждого участника 𝑖, вычисляя 𝑞(𝑥) в точке 𝑖 и полагая 𝑠𝑖=(𝑖,𝑞(𝑖)).
Восстановление секрета
Чтобы восстановить секрет 𝑠, собрать не менее 𝑡 долей, то можно однозначно восстановить 𝑞(𝑥) с помощью интерполяции Лагранжа и получить 𝑠 как 𝑠=𝑎0=𝑞(0).
Обратите внимание, что можно использовать любое подмножество из 𝑡-of-𝑛 долей для выполнения интерполяции Лагранжа и однозначного определения 𝑠; однако наличие подмножества менее чем из 𝑡 долей не позволяет узнать что-либо о 𝑠.
Проверяемое разделение секрета
Схема SSS предполагает, что дилер честен, но на практике это не всегда так. Схема проверяемого разделения секрета (VSS) защищает от злонамеренных дилеров, позволяя участникам проверять, что их доли согласуются с долями, выданными другим узлам, гарантируя тем самым возможность корректного восстановления общего секрета в дальнейшем.
drand использует схему VSS Фельдмана, расширение SSS. Пусть 𝔾 обозначает циклическую группу простого порядка 𝑝 в которой вычисление дискретных логарифмов является труднорешаемой задачей. Пусть циклическая группа означает существование генератора, 𝑔, так что любой элемент 𝑥∈𝔾 можно записать как 𝑥=𝑔𝑎 для некоторого 𝑎∈{0,…,𝑝−1}.
Распределение долей
Помимо распределения долей секрета между участниками, дилер также рассылает обязательства по коэффициентам многочлена 𝑞(𝑥) в форме (𝐴0,𝐴1,…,𝐴𝑡−1)=(𝑔𝑠,𝑔𝑎1,…,𝑔𝑎𝑡−1). Эти обязательства позволяют отдельным участникам, 𝑖, чтобы убедиться, что их доля 𝑠𝑖=(𝑖,𝑞(𝑖)) согласована с многочленом 𝑞(𝑥) проверив, что 𝑔𝑞(𝑖)=∏𝑡−1𝑗=0(𝐴𝑗)𝑖𝑗 выполняется.
Восстановление секрета
Восстановление секрета 𝑠 работает так же, как обычная SSS, за исключением того, что используются доли, проверенные как действительные.
Распределенная генерация ключей (DKG)
Хотя схемы VSS защищают от злонамеренного дилера, дилер все равно знает секрет. Чтобы создать коллективно разделяемый секрет 𝑠 так, чтобы ни один отдельный узел не получил о нём никакой информации, участники могут использовать протокол DKG. drand использует схему DKG Педерсена, которая выполняет 𝑛 экземпляров VSS Фельдмана, выполняемых параллельно, с добавлением дополнительных шагов проверки.
Распределение долей
Отдельные участники, 𝑖, создаёт (случайный) секрет, 𝑠𝑖∈ℤ𝑝, и раздаёт его всем участникам с помощью VSS, отправляя долю, 𝑠𝑖,𝑗 каждому 𝑗 и рассылает список обязательств (𝐴𝑖,0,𝐴𝑖,1,…,𝐴𝑖,𝑡−1) всем.
Проверка долей
𝑗 проверяет полученные доли в соответствии со схемой VSS Фельдмана. Если 𝑗 получает недействительную долю, 𝑠𝑖,𝑗, от 𝑖, затем 𝑗 рассылает жалобу. 𝑖 должен раскрыть правильную долю 𝑠𝑖,𝑗 иначе он считается недобросовестным дилером.
Финализация долей
В конце протокола итоговая доля 𝑖 это 𝑠𝑖=∑𝑗𝑠𝑗,𝑖 для всех допустимых участников 𝑗 , то есть для всех 𝑗s не исключается на этапе проверки.
Коллективный открытый ключ, соответствующий действительным долям, можно вычислить как 𝑆=∑𝑗𝐴𝑗,0 для всех допустимых 𝑗s.
Примечание: Хотя секрет, созданный с помощью DKG Педерсена, может быть смещённым, его безопасно использовать для пороговой подписи, как показали Рабин и др.