Протоколы распределенной генерации ключей
Изучите протоколы DKG, позволяющие участникам совместно генерировать общий ключ, полный секрет которого не известен ни одному участнику.
«Протоколы распределенной генерации ключей» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Цель и мотивация DKG
Распределённая генерация ключа (DKG) решает проблему доверенного дилера в пороговой криптографии. Без DKG центральная сторона должна сгенерировать пару ключей и распределить доли, на короткое время получая полный закрытый ключ. DKG позволяет n участникам совместно сгенерировать пару открытого и закрытого ключей с помощью протокола, в котором ни один участник не узнаёт закрытый ключ — даже координатор протокола.
DKG Педерсена (1991)
DKG Педерсена был первым практически применимым протоколом DKG, опубликованным в 1991 году. Каждый из n участников генерирует случайный секрет s_i и запускает протокол проверяемого разделения секрета (VSS), чтобы поделиться им. Каждый участник рассылает всем обязательства для коэффициентов своего полинома. После того как все участники поделились своими вкладами, объединённый секрет становится суммой всех значений s_i, а каждый участник получает долю этой суммы.
VSS Фелдмана как строительный блок
VSS Фелдмана (проверяемое разделение секрета по Фелдману, 1987) — основной строительный блок большинства протоколов DKG. Дилер фиксирует коэффициенты полинома как элементы группы (C_j = g^{a_j} mod p). Каждый участник, получивший долю f(i), может проверить её по этим обязательствам, проверив, что g^{f(i)} равно произведению C_j^{i^j}. Это позволяет участникам обнаружить, что дилер отправил неправильные доли.
Совместный DKG Фелдмана и его ограничения
Совместный DKG Фелдмана параллельно запускает VSS Фелдмана для всех n участников, при этом каждый участник выступает дилером собственного секрета. Затем участники подают жалобы, если получают недействительные доли. Итоговый ключ представляет собой сумму секретов дилеров, на которых не поступило жалоб. Однако совместный DKG Фелдмана не защищён от адаптивных противников, которые компрометируют участников на основе сообщений протокола. Эту уязвимость выявили Геннаро, Ярецки, Кравчик и Рабин.
Безопасный DKG GJKR
Протокол DKG GJKR (Геннаро, Ярецки, Кравчик и Рабин, 1999 и 2007) устранил недостатки совместного протокола Фелдмана. GJKR использует VSS Педерсена (информационно-теоретически скрывающие обязательства) вместо VSS Фелдмана и добавляет этапы подачи жалоб, на которых участники могут оспаривать недействительные доли. Получившийся DKG защищён от адаптивных противников и стал стандартным теоретическим ориентиром для безопасного DKG.
Этапы обмена данными в DKG
Для DKG GJKR требуются три этапа: этап обязательств (каждый участник рассылает всем обязательства VSS), этап передачи долей (участники отправляют доли друг другу напрямую) и этап подачи жалоб (участники рассылают всем жалобы на недействительные доли). Участники, не разрешившие жалобы, дисквалифицируются. На четвёртом этапе вклады действительных участников объединяются в итоговый открытый ключ и распределённые доли закрытого ключа.
DKG в ключах валидаторов Ethereum
Управление ключами валидаторов Ethereum использует DKG для распределённой технологии валидаторов (DVT). EIP-4844 и экосистема DVT (сеть Obol, сеть SSV) используют пороговые подписи BLS на основе BLS12-381, чтобы комитеты валидаторов могли подписывать блоки, не раскрывая полный ключ валидатора ни одному оператору. Это повышает отказоустойчивость валидаторов и снижает риск слэшинга из-за компрометации ключа.
Распределённый маяк случайности DRAND
DRAND — это распределённый маяк случайности, используемый маяковой цепью Ethereum для генерации непредсказуемых случайных чисел. DRAND запускает DKG среди набора узлов лиги энтропии (Cloudflare, EPFL, Protocol Labs и других), чтобы сгенерировать пороговый ключ BLS. В каждом раунде t узлов из n предоставляют частичные подписи, которые объединяются в непредсказуемое случайное значение. Ни один узел не может повлиять на результат или предсказать его.
DKG для схем Шнорра и ECDSA
DKG значительно проще для пороговых схем Шнорра и EdDSA, чем для ECDSA. В пороговых схемах Шнорра распределённый закрытый ключ просто равен сумме секретов участников (x = x1 + x2 + ... + xn), а открытый ключ — сумме долей открытого ключа (X = X1 + X2 + ... + Xn). В ECDSA нелинейность означает, что DKG должен создавать мультипликативные доли, поэтому требуются более сложные протоколы.
Протоколы обновления долей ключа
Долгоживущие доли порогового ключа могут постепенно скомпрометироваться, если противник медленно компрометирует участников с течением времени. Проактивное разделение секрета (протоколы обновления) периодически заново рандомизирует доли, не меняя сам ключ. После обновления доли, созданные до него, становятся бесполезными, что ограничивает период уязвимости. GJKR и производные от него протоколы включают протоколы обновления, построенные по той же схеме, что и исходный DKG.
Практические реализации DKG
DKG реализован в нескольких промышленных системах. Клиент DVT Ethereum Obol Charon использует церемонию DKG на основе VSS Педерсена над BLS12-381. Silent Shard компании Silence Laboratories использует DKG для мобильных MPC-кошельков. Библиотека dkg-go реализует GJKR для приложений на Go. Threshold Network (ранее Keep Network) использует DKG для службы пороговой ECDSA, защищающей tBTC в сети Bitcoin.
Тест по DKG Педерсена
Какое ключевое свойство делает DKG Педерсена лучше схемы с одним доверенным дилером?
Обзор протоколов DKG
DKG устраняет необходимость в доверенном дилере: все n участников совместно генерируют пару пороговых ключей, и ни один участник не знает закрытый ключ. В DKG Педерсена каждый участник запускает VSS для своего вклада. GJKR добавляет защиту от адаптивных противников с помощью этапов подачи жалоб. DKG лежит в основе DVT Ethereum (Obol, SSV), маяка случайности DRAND и промышленных реализаций MPC-кошельков. Протоколы обновления повышают безопасность за счёт периодической повторной рандомизации долей.
Часто задаваемые вопросы
Урок «Протоколы распределенной генерации ключей» бесплатный?
Да — полный текст урока «Протоколы распределенной генерации ключей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Протоколы распределенной генерации ключей»?
Изучите протоколы DKG, позволяющие участникам совместно генерировать общий ключ, полный секрет которого не известен ни одному участнику. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Протоколы распределенной генерации ключей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Пороговые схемы подписей: основные понятия
- Пороговая ECDSA: многостороннее подписание
- Протоколы распределенной генерации ключей
- Пороговые схемы в блокчейнах и HSM