Открыть сервис

Схема разделения секрета Шамира

Схема разделения секрета Шамира — это криптографический алгоритм, созданный для распределённого хранения секретной информации. Метод позволяет разделить секрет (например, ключ шифрования, пароль или код доступа) на _n_ частей (долей, теней), которые распространяются между участниками. Для восстановления исходного секрета необходимо собрать не менее _k_ долей (пороговое значение). При этом любое количество долей меньше _k_ не даёт никакой информации о секрете. Схема была предложена израильским математиком Ади Шамиром в 1979 году и является одним из фундаментальных протоколов пороговой криптографии.

История

Идея порогового разделения секрета возникла из практической потребности: если хранить ключ или пароль у одного человека, он становится уязвимым (потеря, шантаж, смерть). Если хранить несколько копий у разных людей, возрастает риск утечки или кражи. Необходимо было найти компромисс между безопасностью и надёжностью.

В 1979 году Ади Шамир, а также независимо от него советский и израильский учёный Густав Симмонс предложили математические схемы разделения секрета. Схема Шамира основана на свойствах многочленов над конечными полями. Она получила широкое распространение благодаря простоте, доказуемой стойкости и возможности точной настройки параметров (_n_ и _k_).

Первоначально схема применялась в основном в военных и правительственных системах (управление ядерным оружием, доступ к хранилищам). Позднее алгоритм вошёл в состав многих криптографических библиотек, используется в блокчейн-системах, менеджерах паролей, облачных сервисах и системах резервного копирования.

Описание алгоритма

Математическая основа

Схема Шамира базируется на следующем наблюдении: для однозначного задания многочлена степени _k-1_ необходимо знать _k_ различных точек, лежащих на его графике. Если дано меньше _k_ точек, через них можно провести бесконечно много многочленов степени _k-1_. Перехватчик, обладающий менее чем _k_ долями, не может определить, какой из этих многочленов был исходным, и, следовательно, не может восстановить секрет (константу многочлена).

Процедура разделения (delaering)

Пусть S — секрет (число), который необходимо разделить. Работа ведётся в конечном поле F<sub>p</sub>, где _p_ — простое число, большее, чем S и число участников _n_. Алгоритм:

  1. Выбор параметров: определяются _n_ (общее количество долей) и _k_ (пороговое значение).
  2. Создание многочлена: строится многочлен _f(x)_ степени _k-1_ над полем F<sub>p</sub>:

_f(x) = S + a<sub>1</sub> x + a<sub>2</sub> x<sup>2</sup> + ... + a<sub>k-1</sub> x<sup>k-1</sup> (mod p)_, где _a<sub>1</sub>, a<sub>2</sub>, ..., a<sub>k-1</sub>_ — случайные числа из F<sub>p</sub>. Свободный член многочлена S — это секрет.

  1. Вычисление долей: для каждого участника _i_ (где _i_ принимает значения от 1 до _n_) вычисляется значение _y<sub>i</sub> = f(i) mod p_.
  2. Распределение: каждая пара _(i, y<sub>i</sub>)_ передаётся соответствующему участнику. Число _p_ (модуль) и _k_ (порог) могут быть известны всем участникам или храниться отдельно.

Процедура восстановления (reconstruction)

Для восстановления секрета необходимо собрать любые _k_ долей _(x<sub>1</sub>, y<sub>1</sub>), (x<sub>2</sub>, y<sub>2</sub>), ..., (x<sub>k</sub>, y<sub>k</sub>)_. Восстановление происходит с помощью интерполяции по Лагранжу. Формула для вычисления секрета S:

S = Σ<sub>j=1</sub><sup>k</sup> y<sub>j</sub> · Π<sub>i≠j</sub>&thinsp;(–x<sub>i</sub> / (x<sub>j</sub> – x<sub>i</sub>))  (mod p)

Эта формула позволяет вычислить _f(0)_ = S без восстановления всего многочлена. Любая комбинация из (k-1) долей даёт лишь случайное значение, не связанное с исходным секретом.

Пример

Пусть S = 1234, _n_ = 5, _k_ = 3. Выбираем простое _p_ = 1999. Выбираем случайные коэффициенты _a<sub>1</sub> = 166, a<sub>2</sub> = 94_. Многочлен:

_f(x) = 1234 + 166x + 94x² (mod 1999)_

Вычисляем доли для _x = 1, 2, 3, 4, 5_:

  • (1, 1494)
  • (2, 1942)
  • (3, 2506 = 507 mod 1999 → (3, 507))
  • (4, 3210 = 1211 mod 1999 → (4, 1211))
  • (5, 4102 = 104 mod 1999 → (5, 104))

Для восстановления секрета можно взять любые 3 доли, например (1,1494), (3,507), (5,104). Интерполяция по Лагранжу даст S = 1234.

Классификация схем разделения секрета

Схема Шамира относится к идеальным и пороговым схемам.

  • Идеальная схема: размер каждой доли не превосходит размера секрета. В схеме Шамира доля — это пара чисел (x, y), что примерно в два раза больше размера секрета, однако за счёт использования конечного поля и выбора _x_ как последовательного номера (1, 2, ...) можно считать долю равной одному элементу поля. На практике доли чуть больше секрета, но в пределах O(1).
  • Пороговая схема (k, n): для восстановления нужно ровно _k_ долей, а _k-1_ доля не даёт никакой информации. Это свойство называется _безусловной стойкостью_: даже при неограниченной вычислительной мощности противник не сможет восстановить секрет, имея _k-1_ долю (при условии, что модуль _p_ известен и многочлен построен над достаточно большим полем).

Существуют также другие схемы:

  • Схема Блэкли (1979) — основана на пересечении гиперплоскостей в многомерном пространстве. Менее эффективна по размеру долей.
  • Схема с весами (уровнями доступа) — модификации, где разные доли имеют разный вес при восстановлении (например, две доли директора равносильны одной доле президента).
  • Верифицируемые схемы — доли снабжаются доказательством корректности, позволяющим проверить их без восстановления секрета.

Применение

Криптография и защита данных

  • Хранение мастер-ключей: корневой ключ шифрования делится на доли, хранящиеся у разных администраторов. Для расшифровки требуется консенсус (например, 3 из 5).
  • Менеджеры паролей: сервисы вроде LastPass, 1Password и Bitwarden используют варианты схемы для защиты мастер-пароля пользователя или его долей на своих серверах.
  • Облачные системы: разделение ключей для доступа к шифрованным данным в облаке (например, Google, Amazon).

Блокчейн и криптовалюты

  • Управление кошельками: приватные ключи криптовалютных кошельков делятся на доли между доверенными лицами. Никто не может потратить средства в одиночку.
  • Протоколы управления (multisig): в некоторых блокчейнах (например, Ethereum) реализована поддержка мультиподписи, аналогом которой является разделение секрета.

Военная и государственная сфера

  • Ядерное оружие: система запуска ракет может требовать одновременной авторизации нескольких офицеров, каждый из которых вводит свою часть кода (например, два из трёх).
  • Системы управления чрезвычайными ситуациями: доступ к хранилищам с аварийными планами.

Прочие области

Интересные факты

  • Ади Шамир — признанный криптограф, соавтор алгоритма RSA, получивший за развитие криптографии с открытым ключом премию Тьюринга в 2002 году.
  • Схема Шамира может быть расширена для работы с большими объёмами данных: секрет разбивается на блоки, каждый блок делится независимо.
  • Для повышения эффективности часто используется модификация с использованием массива долей — схема не требует, чтобы доли вычислялись для _x = 1,2,...,n_. Можно брать любые _n_ различных значений _x_.
  • Алгоритм не является защищённым от квантового взлома (так как основан на конечных полях и полиномиальной интерполяции), но в текущих условиях квантовая атака на схему считается маловероятной из-за огромного размера пространства поиска.

Критика и ограничения

Несмотря на теоретическую безусловную стойкость, на практике существуют уязвимости:

  • Атака по сторонним каналам: при реализации алгоритма на реальном оборудовании (смарткарты, серверы) возможна утечка временны́х задержек, потребляемой мощности или электромагнитного излучения, что позволяет восстановить доли.
  • Проблема с модулем: если модуль _p_ мал и известен, уменьшается энтропия. При больших секретах необходимо разбивать их на блоки и делить каждый.
  • Необходимость доверенного дилера: дилер, который создаёт многочлен и распределяет доли, знает секрет. Если дилер ненадёжен, секрет может быть скомпрометирован. Для решения используются протоколы с совместным вычислением (без единого дилера).
  • Хрупкость при утере долей: если потеряно более (n-k) долей, восстановление становится невозможным. Для смягчения используют протоколы перераспределения и восстановления долей (proactive secret sharing).
  • Ограничение по размеру секрета: схема Шамира наиболее эффективна для небольших объёмов (ключи, пароли), а не для больших файлов.

Источники

  • Ади Шамир. «How to Share a Secret». Communications of the ACM, 1979.
  • Дуглас Р. Стинсон. «Криптография. Теория и практика», 3-е издание, 2005.
  • Алфред Дж. Менезес, Пол К. ван Орсхот, Скотт А. Ванстон. «Handbook of Applied Cryptography», 1996.
  • Голдрич О., Калии Ю. «Cryptography: Theory and Practice», 2016.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →