Продвинутый Урок 4 4 мин чтения

Кенгуру Полларда: алгоритм, который решает большие задачи

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

Алгоритм, который решил самые большие из известных задач, получил название животного, потому что сам автор объяснил его так. В 1978 году британский математик Джон Поллард описал метод, в котором два кенгуру прыгают по полю: один ручной, чье положение известно, и другой дикий, которого нужно найти. Ручной оставляет ловушки там, где прыгает. Рано или поздно дикий наступает на одну из них.

Перевод на кривую прямой. Ручной кенгуру начинает с известной точки внутри интервала — скажем, с середины — и расстояние, которое он уже прошел, фиксируется при каждом прыжке. Дикий кенгуру начинает с точки Q, публичного ключа цели, расстояние от которой до начала и есть искомое число.

Деталь, которая делает все это возможным, заключается в размере прыжков. Он не выбирается случайно: он вычисляется из координаты точки, где находится кенгуру. Два кенгуру, которые наступают на одну и ту же точку, делают одинаковый следующий прыжок, и следующий, и следующий — с момента первой встречи оба пути идентичны навсегда. Это и превращает случайную встречу в обнаруживаемое столкновение.

Один из них отмечает, где прыгает. Другой рано или поздно наступает на отметку.

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

Остается решить практическую проблему: как заметить, что столкновение произошло, не сохраняя все точки, через которые прошел каждый кенгуру? Ответ — отличимые точки. Выбирается редкое и легко проверяемое свойство — например, чтобы координата x заканчивалась двадцатью нулевыми битами — и точка фиксируется только тогда, когда она обладает этим свойством. Примерно один из миллиона прыжков. Поскольку после столкновения оба пути совпадают, они оба в конечном итоге наступят на одну и ту же отличимую точку, и именно там фиксируется встреча.

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

Итоговый расчет — это тот же квадратный корень из предыдущего метода — что-то около двух раз корня из ширины интервала — с решающим отличием: используемая память — это таблица отличимых точек, которая помещается в несколько мегабайт. Там, где метод "шаг младенца и шаг гиганта" требовал семьсот пятьдесят гигабайт для семидесяти бит, кенгуру требует почти ничего.

Добавьте к этому, что он почти идеально параллелизуется. Выпустите тысячу ручных и тысячу диких кенгуру, каждый на отдельной машине, все записывающие отличимые точки на общий сервер: общий объем работы не изменится, а календарное время сократится в тысячу раз. Техника параллелизации с отличимыми точками была разработана в 1999 году Полом ван Уршотом и Майклом Винером, и именно она делает метод практичным в масштабе.

Есть два условия, и оба важны.

Первое — публичный ключ должен быть известен. Кенгуру прыгает по точкам кривой; если у вас есть только адрес, нет начальной точки для дикого, и метод не применим. Это был Урок 1, который разделил два мира, и здесь это разделение имеет значение.

Второе — интервал должен быть известен. Ручной кенгуру должен начать недалеко от дикого, чтобы встреча произошла за несколько прыжков; на поле размером с всю кривую ожидание снова становится 2^128. Без знания участка нет места для ожидания.

Без знания участка нет места для ожидания.

Обратите внимание, что это значит для обычного кошелька. Ваш публичный ключ становится доступным, как только вы тратите в первый раз, и все же интервала нет: он был выбран случайно из всех 256 бит, и кенгуру понадобилось бы 2^128 прыжков. Оба условия должны выполняться вместе, и в задаче они выполняются по конструкции — потому что тот, кто ее составил, специально выбрал интервал.

Остается рассмотреть оборудование, которое выполняет эти прыжки, и где оно останавливается. В следующем уроке — видеокарты, ASIC и реальное расстояние между 2^40 и 2^70.