Разделение ключа: схема Шамира
Почему мастер-ключ не отдают одному человеку, а делят на части так, что нужно собрать лишь несколько.
Shamir's Secret Sharing — криптографическая схема, разбивающая секрет на N частей так, что для восстановления нужно собрать любые K из них (порог), а K−1 частей не дают о секрете ничего.
Если мастер-ключ доверить одному человеку, он становится единой точкой отказа: уволится, заболеет, окажется злоумышленником. Если раздать копию всем — любой одиночка сможет распечатать Vault. Схема Шамира решает обе крайности.
Идея порога K из N
При инициализации Vault генерирует мастер-ключ и тут же разбивает его на N unseal-ключей (shares) с порогом K (threshold). Стандартная конфигурация — 5 частей и порог 3: ключи раздают пятерым хранителям, а для распечатывания должны собраться любые трое.
Мастер-ключ | (схема Шамира, N=5, K=3) | +--> share 1 (хранитель A) +--> share 2 (хранитель B) +--> share 3 (хранитель C) +--> share 4 (хранитель D) +--> share 5 (хранитель E) Распечатать: ЛЮБЫЕ 3 из 5 Двое сговорившихся -- НЕ достаточно
Почему K−1 частей бесполезны
Гениальность схемы: имея K−1 частей, вы не приближаетесь к ключу ни на бит. Математически каждая недостающая часть оставляет ровно столько же неопределённости, сколько было в начале. Это не «угадать оставшийся кусок», а полная информационная защита до достижения порога.
Как задаётся при инициализации
Параметры N и K выбираются один раз — при vault operator init:
vault operator init \
-key-shares=5 \
-key-threshold=3
Vault единожды выведет 5 unseal-ключей и initial root token. Это единственный момент, когда части показываются; их нужно сразу безопасно раздать хранителям.
Unseal Key 1: 4jw...A==
Unseal Key 2: hT2...B==
Unseal Key 3: 9kx...C==
Unseal Key 4: pZ1...D==
Unseal Key 5: mQ8...E==
Initial Root Token: hvs.AbCd...
Как работает под капотом
Схема Шамира опирается на свойство многочленов: через любые K точек проходит ровно один многочлен степени K−1. Секрет прячут в свободный член такого многочлена, а каждая «часть» — это значение многочлена в некоторой точке. Имея K точек, многочлен восстанавливают интерполяцией и читают секрет; имея меньше — кандидатов бесконечно много.
Выбор параметров на практике
| N / K | Смысл |
| 5 / 3 | баланс по умолчанию: терпит потерю 2 ключей, требует сговора 3 |
| 3 / 2 | маленькая команда |
| 1 / 1 | только dev/тесты — единая точка отказа |
Важно: в проде схему Шамира всё чаще заменяют авто-unseal через облачный KMS, но recovery-ключи там работают по той же схеме Шамира.
Частые ошибки
- K=1 в проде — любой одиночка распечатает Vault.
- Раздать все ключи одному человеку — теряется смысл разделения.
- Не сохранить ключи при init — второго шанса увидеть их нет, Vault придётся пересоздавать.
Итог
- Схема Шамира делит мастер-ключ на N частей с порогом K; нужно собрать любые K.
- Менее K частей не дают о ключе никакой информации — это полная защита, а не «почти угадал».
- Параметры задаются один раз при
operator init; ключи показываются единственный раз.