0Pricing
Cryptology Academy · Урок

Разделение секрета Шамира: полиномиальная математика

Постройте многочлены над конечными полями, чтобы разделять и восстанавливать секреты

«Разделение секрета Шамира: полиномиальная математика» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Главная идея

Схема разделения секрета Шамира (1979) кодирует секрет как ординату пересечения с осью y (f(0)) случайного полинома степени (k-1) над конечным полем. Любые k точек однозначно определяют полином (интерполяция Лагранжа); менее k точек ничего не раскрывают.

Построение полинома

Чтобы разделить секрет S с порогом k между n сторонами: выберите простое число p > S и n. Выберите случайные коэффициенты a_1, ..., a_{k-1}. Определите f(x) = S + a_1*x + a_2*x^2 + ... + a_{k-1}*x^{k-1} (mod p). Сторона i получает долю (i, f(i)).

Пример: схема 2 из 3

Секрет S=7, p=17, k=2 (линейный полином). Выберите a_1=3. f(x)=7+3x mod 17. Доли: (1,10), (2,13), (3,16). Любые две точки определяют прямую. f(0)=7. Одна точка: бесконечно много возможных прямых, нулевая информация о S.

Интерполяция Лагранжа

Имея k точек (x_1,y_1),...,(x_k,y_k), восстановите f(0) с помощью интерполяции Лагранжа: S = sum_i y_i * prod_{j≠i} (0-x_j)/(x_i-x_j) mod p. Все арифметические операции выполняются по модулю. Без вычислений с плавающей точкой — точное восстановление над конечным полем.

Реализация на Python

from functools import reduce def lagrange(shares, p): xs = [s[0] for s in shares] ys = [s[1] for s in shares] result = 0 for i, (xi, yi) in enumerate(shares): num = reduce(lambda a,b: a*b%p, [(-xj)%p for j,xj in enumerate(xs) if j!=i], 1) den = reduce(lambda a,b: a*b%p, [(xi-xj)%p for j,xj in enumerate(xs) if j!=i], 1) result = (result + yi * num * pow(den, p-2, p)) % p return result

Набросок доказательства совершенной безопасности

Для k-1 долей через эти k-1 точек для каждого возможного значения секрета S существует ровно один многочлен степени k-1. Поэтому при знании k-1 долей каждое значение S из [0, p-1] равновероятно — никакой информации не раскрывается.

Выбор простого числа

p должно быть больше секрета и n. Распространённый выбор: p = 2^127-1 (простое число Мерсенна) для 128-битных секретов. Это гарантирует, что все доли помещаются в 128 бит, а арифметические операции выполняются эффективно. В качестве альтернативы можно использовать p=2^521-1 для 512-битных секретов.

Проверка долей

Базовая схема SSS не обеспечивает целостность долей: злоумышленник может передать ложную долю, что приведёт к неправильному восстановлению секрета. Feldman VSS (проверяемое разделение секрета) публикует обязательства g^{a_i} mod p, позволяя проверять доли, не раскрывая многочлен.

Проактивное разделение секрета

Доли можно периодически обновлять: создать новый многочлен с тем же секретом S и распределить новые доли, после чего старые доли становятся недействительными. Злоумышленник, скомпрометировавший участника после обновления, получает бесполезную старую долю. Такой подход используется в системах управления ключами с длительным сроком действия.

Реализации

ssss (командная строка Linux), python-secret-sharing, hashicorp/vault использует SSS для механизма запечатывания, а аппаратный кошелёк Trezor использует SSS для резервного копирования исходной фразы кошелька (SLIP-39). Все они работают над полями больших простых чисел.

Ограничения

SSS требует доверенного участника, который создаёт и распределяет доли (этот участник знает секрет). Если доверенного участника нет, требуется DKG (распределённая генерация ключа). Восстановление раскрывает секрет тому, кто владеет k долями; этого можно избежать с помощью MPC или пороговых подписей.

Быстрая проверка

В разделении секрета Шамира (3,5) какое минимальное количество долей необходимо для восстановления секрета?

Итоги

SSS Шамира представляет секреты как точки пересечения многочлена с осью y. Интерполяция Лагранжа восстанавливает секрет по k долям. Для менее чем k долей обеспечивается совершенная теоретико-информационная безопасность. Далее: визуальное и аддитивное разделение секрета.

Часто задаваемые вопросы

Урок «Разделение секрета Шамира: полиномиальная математика» бесплатный?

Да — полный текст урока «Разделение секрета Шамира: полиномиальная математика» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «Разделение секрета Шамира: полиномиальная математика»?

Постройте многочлены над конечными полями, чтобы разделять и восстанавливать секреты Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Разделение секрета Шамира: полиномиальная математика»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проблема разделения секрета
  2. Разделение секрета Шамира: полиномиальная математика
  3. Визуальное разделение секрета и аддитивные схемы
  4. Пороговые подписи и практические применения
← Назад к Cryptology Academy