Схема разделения секрета Шамира: порог k из n

Иногда секрет нельзя доверить одному человеку, но и потеря его недопустима: мастер-ключ к хранилищу, корневой сертификат, код запуска. Схема разделения секрета Шамира решает задачу так, что секрет «размазывается» на долей, и любые из них восстанавливают его точно, а любые не дают о нём вообще никакой информации. В основе лежит школьная идея: через точек проходит ровно один полином степени . Ниже разберём математику схемы, восстановление по Лагранжу и типовые ошибки. А чтобы быстро посчитать доли или восстановление под свои числа, соберите условие в форме ниже.
Идея: один полином через k точек
Возьмём многочлен степени со случайными коэффициентами, а свободным членом сделаем сам секрет :
Доли - это значения полинома в разных ненулевых точках: участник с номером получает пару . Сам секрет «спрятан» в точке , ведь .
Ключевое свойство интерполяции: полином степени однозначно определяется любыми точками. Значит, собрав долей, мы восстановим весь полином - а вместе с ним и . Имея же только точку, мы не можем зафиксировать полином: через них проходит бесконечно много кривых нужной степени, и для каждого кандидата на секрет найдётся подходящая. Поэтому неполная группа не получает ни бита информации.

Почему нужно конечное поле
Если считать в обычных вещественных числах, доли «протекают»: по наклону кривой и порядку величин противник способен оценить приближённо. Поэтому Шамир предложил работать в конечном поле - обычно , целые числа по модулю простого , большего и секрета, и числа участников.
В таком поле все арифметические операции замкнуты, а главное - деление: для каждого ненулевого элемента есть обратный по модулю. Это и нужно для восстановления (там придётся делить). Случайные коэффициенты берут равномерно из . Тогда распределение любых долей не зависит от секрета - это и есть свойство совершенной (информационно-теоретической) стойкости.
Простое число $p$ должно быть больше и секрета $S$, и числа участников $n$. Стандартный выбор для байтовых секретов - поле $\mathrm{GF}(2^8)$, в котором работает, например, утилита ssss.
Раздача долей: схема k из n
Параметры схемы - пара , её называют пороговой -схемой:
- - сколько всего долей выдаётся;
- - порог: минимальное число долей для восстановления.
Алгоритм раздачи компактен:
- Выбрать простое .
- Сгенерировать случайные коэффициенты из .
- Для вычислить долю и выдать участнику .
Точки публичны (это просто номера), секретны лишь значения . Точку не раздают никогда - в ней лежит сам секрет.

Восстановление: интерполяция Лагранжа
Собрав любые долей , восстанавливаем секрет по формуле интерполяции Лагранжа, вычисленной в точке :
Внутреннее произведение - это базисные множители Лагранжа . Все деления выполняются по модулю : вместо «разделить на » умножают на обратный элемент , который находят расширенным алгоритмом Евклида или через малую теорему Ферма ().
Поскольку полный полином восстанавливать не обязательно (нужен лишь его свободный член), удобно сразу подставить - формула выше делает именно это. Если же требуется проверить целостность долей, можно собрать весь и убедиться, что все точек на нём лежат.
Маленький пример руками
Пусть , схема , поле . Возьмём случайный коэффициент , тогда .
Доли: , , , . Раздаём .
Восстановим по долям и :
Получили исходный секрет. Любая другая пара долей дала бы тот же результат - в этом и смысл порога . Та же логика однозначного восстановления по точкам лежит и в основе интерполяционной формулы Лагранжа, только там без поля и без секретности.
Свойства и достоинства
Схема Шамира ценится за набор свойств, редких в одном решении:
- Совершенная стойкость. долей не сужают множество возможных секретов - это доказуемо, а не «вычислительно трудно».
- Минимальность. Размер каждой доли равен размеру секрета; меньше теоретически невозможно для пороговой схемы.
- Гибкость. Можно выдать новому участнику ещё долю , не трогая остальных, пока точек хватает в поле.
- Обновляемость. Сменив все коэффициенты, кроме свободного члена (так называемый proactive secret sharing), раздают новые доли при том же секрете - старые перехваченные доли обесцениваются.
Где применяют
Пороговая криптография на основе схемы Шамира встречается шире, чем кажется:
- Управление ключами. Мастер-ключ хранилища или HSM делят между несколькими офицерами безопасности; запуск требует кворума.
- Кошельки и блокчейн. Мультиподпись и threshold-signature-схемы делят приватный ключ, чтобы транзакцию подписывал кворум, а не один узел.
- Резервирование секретов. Сид-фразу криптокошелька дробят на доли и раскладывают по разным местам - потеря одной не фатальна.
- Безопасные вычисления. Схема - кирпич протоколов multi-party computation, где стороны считают функцию, не раскрывая входов.
Частые ошибки
- Раздать точку . В ней лежит сам секрет - любой обладатель этой доли знает целиком. Номера участников начинают с .
- Считать в целых без модуля. Без конечного поля схема теряет совершенную стойкость и протекает по величине значений. Поле обязательно.
- Взять слишком маленькое . Если , секрет не помещается в поле и восстановится с потерей. Нужно .
- Путать и . Восстанавливают долей, а не . Схема требует любых трёх из пяти, а не всех пяти.
- Повторять точки . Две доли с одинаковым ломают интерполяцию (деление на ноль в множителе Лагранжа). Точки должны быть различны.
FAQ
Чем схема Шамира лежит от простого деления секрета пополам? При «разрезании» строки на куски каждый кусок раскрывает часть секрета, и нужны все куски сразу. У Шамира любая неполная группа не знает ничего, а порог можно задать меньше - терпимость к потере долей.
Можно ли восстановить секрет, если часть долей подменена? Базовая схема не обнаруживает подлог: подставив фальшивую долю, можно получить неверный без сигнала об ошибке. Для защиты используют верифицируемое разделение секрета (схема Фельдмана или Педерсена) с криптографическими обязательствами на коэффициенты.
Насколько большим должно быть простое ? Достаточно, чтобы поле вмещало секрет и все номера участников. На практике берут под разрядность секрета: для 128-битного ключа - простое около либо поле подходящего размера.
Коротко
Схема разделения секрета Шамира - пороговая -схема: секрет прячут в свободный член случайного полинома степени над конечным полем , а доли - это значения полинома в точках . Любые долей восстанавливают секрет интерполяцией Лагранжа в точке ; любые не дают о нём ни бита (совершенная стойкость). Доли минимального размера, схему легко расширять и обновлять. Главные ошибки - раздать точку , считать без модуля и взять слишком малое . Применяется в управлении ключами, threshold-подписях и multi-party computation.
Читайте также

Абстрактный класс и интерфейс: в чём отличие
Абстрактный класс и интерфейс: чем отличаются в ООП, когда наследовать поведение, а когда задавать контракт, как выбрать на примерах Java, C# и Python.

Алгоритм AdaBoost: как слабые классификаторы дают сильный
Алгоритм AdaBoost простыми словами: адаптивный бустинг, перевзвешивание объектов, формула веса классификатора, итоговый ансамбль и разбор шага на примере с формулами.

Алгоритм CatBoost: бустинг с обработкой категорий
Алгоритм CatBoost простыми словами: упорядоченный бустинг против сдвига прогноза, кодирование категориальных признаков через ordered target statistics, симметричные деревья и разбор типовых задач.