Большие простые числа
Что, однако, можем мы теперь спросить, помешает русским агентам посчитать результат так же, как считал его Тоби? Ведь они же знают, не хуже Цирка, модуль 221 и экспоненту 11, а также отправленное Джорджем Смайли кодовое число 184. Что мешает им вычислить остаток от деления числа 18435 на 221?
Дело в том, что они не знают секретную экспоненту 35.
Но не могут ли они, зная модуль 221 и показатель степени 11, вычислить секретную экспоненту 35? Ведь каким-то образом это удалось сделать яйцеголовым из Цирка, которые затем заперли в сейф бумажку с этим заветным числом.
Надо сказать, что вообще-то это возможно. И нет никакой тайны в том, как именно получили число 35. Во всяком случае, ее нет, если знать, что 221 есть результат перемножения двух простых чисел 13 и 17: 13 × 17 = 221. Все остальное очень просто. Далее следуют такому «рецепту»: из обоих простых чисел вычитают по единице и получают соответственно числа 12 и 16, а затем перемножают их: 12 × 16 = 192. Это число 192 является «секретным модулем».
Затем составляют таблицу из увеличенных на единицу произведений последовательности натуральных чисел на секретный модуль 192, или, другими словами, следующие числа:
1 × 192 + 1 = 192 + 1 = 193,
2 × 192 + 1 = 384 + 1 = 385,
3 × 192 + 1 = 576 + 1 = 577,
4 × 192 + 1 = 768 + 1 = 769,
5 × 192 + 1 = 960 + 1 = 961
…
Какое-то из полученных чисел 193, 385, 577, 769, 961, … делится на показатель степени 11. В нашем примере уже второе из этих чисел кратно 11 — действительно, 385: 11 = 35. Так мы находим секретную экспоненту 35.
Однако если это так просто, то к чему все эти хлопоты? На самом деле все так просто, потому что в нашей вымышленной истории за модуль было принято небольшое число 221, которое можно без особых усилий представить в виде произведения двух простых чисел. Если бы Цирк предложил в качестве модуля большое число, то вся простота мгновенно бы улетучилась.
Здесь надо, конечно, признать, что вся история о Смайли и его требовании прислать агента 007 до предела упрощена, и вообще в реальности ничего подобного быть просто не могло. Хотя бы по той причине, что описанный мною способ шифрования был изобретен только в 1977 г. в Массачусетском технологическом институте. К этому времени Джордж Смайли уже давно был на долгожданном покое и, как писал Джон ле Карре, «поселился в Стипл-Астоне и жил так, как вышедший на пенсию старый чудак-отшельник, удивлявший обывателей своей милой привычкой бродить по улицам, вслух разговаривая с самим собой».
Тем не менее описанный здесь метод шифрования действительно существует, и был он предложен специалистами по информатике Рональдом Ривестом, Ади Шамиром и Леонардом Адлеманом и назван по первым буквам их фамилий «RSA-методом». Для шифрования берут два простых числа — в нашем примере 13 и 17 — и перемножают их между собой. Таким способом получают модуль. У нас он получился равным 13 × 17 = 221. Потом берут произвольное число — в нашем случае 11 — и называют его степенью. (Выбор степени не вполне произволен, но в данном случае это несущественная деталь.) После этого число, которое хотят сохранить в тайне, кодируют, возводя его в степень, а остаток от деления полученного числа на модуль сообщают партнеру. В нашей истории Смайли хотел сообщить число 7. Для этого он вычислил значение степени 711, разделил его на 221, а остаток от деления, то есть число 184, сообщил своему начальству. Дешифровка осуществляется так: из выбранных простых чисел вычитают по единице, а затем перемножают между собой. Мы назвали это произведение секретным модулем. В нашем случае он равен числу 12 × 16 = 192. Так как в нашей истории 2 × 192 + 1 = 35 × 11, секретная экспонента равна 35. Степень зашифрованного числа с показателем, равным секретной экспоненте, дает в результате, если проанализировать остаток от деления на модуль, исходное число, отправленное агентом. В нашем случае Тоби Эстерхази разделил 18435 на 221 и получил 7, то есть номер того агента, с которым хотел встретиться Смайли.
На деле для шифрования чисел по методу RSA, в отличие от нашей вымышленной истории, используют произведения простых чисел, неизмеримо больших, нежели 13 и 17. Используют огромные простые числа с тремястами или четырьмястами разрядами. Естественно, что произведения этих чисел дают в результате гигантские модули из семисот-восьмисот разрядов. Расчеты с такими числами можно выполнять только с помощью компьютеров, но умножение машины выполняют молниеносно. По методу RSA модуль вычисляют за считаные секунды.
Секретной службе абсолютно безразлично, знает ли противник (да хоть и весь мир) величину модуля, потому что вычислить два простых числа, произведение которых составляет число, состоящее из 700 разрядов, очень и очень непросто. До сих пор не существует алгоритмов, позволяющих сделать это быстро. Даже при использовании самых совершенных компьютеров, обладающих невероятным быстродействием, на решение этой задачи могут уйти месяцы. Однако для дешифровки знание этих простых чисел безусловно необходимо, ибо, только используя их, можно вычислить секретный модуль и секретную экспоненту. Без этого вычислить секретную экспоненту невозможно даже теоретически.
Конечно, если модуль известен на протяжении нескольких недель, не говоря уже о месяцах, то пользоваться им для шифрования рискованно. Возможно, противнику уже удалось вычислить оба простых числа, произведение которых равно модулю. Поэтому все секретные службы время от времени меняют модули и экспоненты, использующиеся для кодирования. Эти изменения не слишком трудоемки. В конце концов, существует бесконечное множество простых чисел. Количество 400-значных простых чисел превышает 10397. Это число начинается с единицы и заканчивается 397 нулями.
Методом RSA пользуются не только секретные службы.
Когда человек набирает на клавиатуре банкомата код своей банковской карты, этот номер передается в банк по открытой телефонной линии. Однако ни один посторонний человек не может подсмотреть код, потому что в банкомате он автоматически шифруется и только в зашифрованном виде передается в банк. Во всех операциях по выдаче наличных метод RSA бесчисленное множество раз используется в банкоматах по всему миру.
Если человек делает через интернет какой-либо заказ и оплачивает его кредитной картой, то номер этой карты должен быть передан по адресу проведения расчетов. Очень опасна сама возможность того, что этот номер может стать известным посторонним людям, которые затем могут считать все остальные данные кредитной карты. По этой причине фирмы одним нажатием клавиши шифруют номер карты, а затем дешифруют его — только после того, как зашифрованный номер приходит по нужному адресу. Таким образом, метод RSA обеспечивает безопасность электронной торговли.
Но не будем закрывать глаза на очевидное: смысл и цель создания метода RSA состоит в облегчении работы спецслужб — сокрытия и обмана, дезинформации и мошенничества.