Мы могли бы создавать и хранить резервные копии ключей, что снижает риск потери или повреждения ключа, но увеличивает риск кражи.
Этот компромисс кажется фундаментальным.
Можем ли мы взять часть данных и сохранить их таким образом, чтобы доступность и безопасность увеличивались одновременно?
Очень хорошо, что ответ «да», и это еще один трюк, который использует криптографию, который называется делением секрета.
Идея заключается в следующем: мы хотим разделить наш приватный ключ на некоторое количество частей N.
Мы хотим сделать это таким образом, чтобы, если мы получим какое-либо количество K этих частей, мы сможем восстановить оригинальный секрет, но, если нам дадут меньше, чем K частей, тогда мы не сможем узнать что-либо об оригинальном секрете.
Учитывая это строгое требование, просто «разрезать» секрет на куски не сработает, потому что даже одна часть дает некоторую информацию о секрете.
Нам нужно что-то умнее.
Предположим, что N = 2 и K = 2.
Это означает, что мы генерируем 2 части на основе секрета, и нам нужны обе части, чтобы иметь возможность восстановить секрет.
Назовем наш секрет S, который является просто большим (скажем, 128-битным) числом.
Мы могли бы генерировать 128-битное случайное число R и сделать две части равными R и (S побитовое исключающее ИЛИ R).
По сути, мы «зашифровали» бы S одноразовым ключом R, и мы сохранили бы ключ (R) и зашифрованный текст (S ИЛИ R) в разных местах.
Ни ключ, ни зашифрованный текст сами по себе ничего не говорят о секрете.
Но, учитывая две части, мы просто собираем их вместе, чтобы восстановить секрет.
Этот трюк работает до тех пор, пока N и K будут одинаковыми – нам просто нужно будет генерировать N-1 разных случайных чисел R для первых N-1 частей, а последней частью будет секрет S – операция ИЛИ – со всеми остальными N- 1 частями.
Но если N больше K, это уже не работает, и нам нужна некоторая алгебра.
Посмотрите на слайд.
Здесь мы должны сначала сгенерировать точку (0, S) по оси Y, а затем нарисовать линию со случайным наклоном через эту точку.
Затем мы создаем точки на этой линии, сколько захотим.
Получается, что это разделение секрета S на N – количество созданных нами точек и K = 2.
Почему это работает?
Во-первых, если мы получим две из созданных точек, мы можем провести через них линию и посмотреть, где она пересечет ось Y.