Как открыть ядерный чемоданчик, если половина ключей потерялась?
На самом деле для этого не нужен ни запасной чемоданчик, ни человек с ключом под матрасом. Есть алгоритм, который позволяет разделить один секрет между несколькими людьми так, чтобы для его восстановления понадобилась только определённая часть из них.
Это схема разделения секрета по Шамиру.
Адьи Шамир — один из создателей RSA, автор множества работ по криптографии и вообще человек, чьё имя регулярно встречается там, где начинаются разговоры про безопасность.
Идея его алгоритма довольно простая.
Допустим, у нас есть секрет S (наш ключ от ядерного чемоданчика). Мы хотим разделить его между 5 людьми, но восстановить секрет можно только если соберутся любые 3.
Шамир предлагает представить секрет как точку на полиноме.
Для самого простого случая возьмём параболу:
Здесь S — свободный член. То есть значение функции при x = 0:
Теперь выбираем случайные a и b и получаем параболу.
Берём несколько точек на этой параболе:
Каждому участнику отдаём одну точку.
Что произошло?
Сам секрет мы никому не дали. Но если собрать любые 3 точки, по ним можно восстановить исходную параболу. А значит, найти f(0) и получить наш секрет.
Две точки не помогут. Три — помогут. Это и есть главный фокус схемы Шамира: секрет можно восстановить только когда собрано заданное количество частей.
И вот здесь становится понятнее метафора с ядерным чемоданчиком. Представьте, что код запуска хранится в одном месте, а доступ к нему разделили между несколькими людьми. Один человек уволился — ничего страшного. Второй в отпуске — тоже. Но если собрать, например, 3 из 5 ключей, доступ можно восстановить. Причём участники даже не обязаны доверять друг другу полностью. Им достаточно иметь свои части секрета.
Где это может пригодиться в реальной инфраструктуре?
Например, есть ключ шифрования, которым шифруются карточные данные в контуре PCI DSS. Хранить его целиком у одного инженера — плохая идея. Положить в один vault и надеяться, что к нему никогда не получат доступ, тоже так себе план.
Можно разделить ключ по схеме Шамира и хранить части у разных ответственных.
Для восстановления ключа потребуется, скажем, 3 из 5 частей. Один человек не сможет достать секрет самостоятельно. Компрометация одной части тоже ничего не даёт.
И вот это уже интереснее обычного «давайте просто положим секрет в секрет-хранилище». Потому что иногда проблема не в том, где хранить секрет. Проблема в том, кому вообще разрешено обладать им целиком.
А схема Шамира позволяет ответить на этот вопрос архитектурно, а не организационным костылём.