Введение в технологию Блокчейн - страница 76

Шрифт
Интервал


Мы могли бы создавать и хранить резервные копии ключей, что снижает риск потери или повреждения ключа, но увеличивает риск кражи.

Этот компромисс кажется фундаментальным.

Можем ли мы взять часть данных и сохранить их таким образом, чтобы доступность и безопасность увеличивались одновременно?

Очень хорошо, что ответ «да», и это еще один трюк, который использует криптографию, который называется делением секрета.



Идея заключается в следующем: мы хотим разделить наш приватный ключ на некоторое количество частей 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.