Введение в технологию Блокчейн. Тимур Сергеевич Машнин
это строгое требование, просто «разрезать» секрет на куски не сработает, потому что даже одна часть дает некоторую информацию о секрете.
Нам нужно что-то умнее.
Предположим, что 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.
Это даст нам секрет S.
С другой стороны, если у нас есть только одна точка, она ничего не говорит о секрете S, потому что наклон линии случайный.
Каждая линия в этой точке равно вероятна, и все они пересекают ось Y в разных точках.
Есть только одна тонкость.
Мы берем большое простое число P.
Так, чтобы секрет S был между 0 и P-1, включительно.
Далее мы генерируем случайное значение R, также между 0 и P-1, и создаваемые нами точки
x = 1, y = (S + R) mod P – остаток от деления
x = 2, y = (S + 2R) mod P
x = 3, y = (S + 3R) mod P
и так далее.
Секрет соответствует точке x = 0, y = (S + 0 * R) mod P, которая равна x = 0, y = S.
Таким образом, это способ сделать деление секрета с K = 2 и любым значением N.
Если N = 4, вы можете разделить свой приватный ключ на 4 части и поместить их на 4 разных устройства, чтобы, если кто-то украдет какое-либо из этих устройств, они ничего не узнают о вашем ключе.
С другой стороны, даже если два из этих устройств будут уничтожены, вы сможете восстановить ключ, используя два других устройства.
Как и было обещано, мы увеличили доступность и безопасность.
Но мы можем сделать лучше: мы можем делать деление секрета с любыми N и K, если K не больше N.
Чтобы посмотреть, как это сделать, вернемся к фигуре.
Причина, по которой мы использовали линию вместо некоторой другой кривой, состоит