Глава 12
Криптосистема RSA
Литература
1. Н. Коблиц, Курс теории чисел и криптографии, Москва, ТВП, 2001 г., 154 с.
2. Введение в криптографию / Под общей ред. В.В. Ященко, СПб, Питер, 2001 г., 288 с.
12.1. Теоретические сведения
Простота чисел
Определение. Говорят, что два целых числа a и b взаимно просты, если НОД (a, b) = 1, т.е. если a и b не имеют
общих делителей, больших 1.
Функция Эйлера
Определение. Для любого целого положительного n функция Эйлера ϕ(n) определяется как число неотрицательных
целых b, меньших n и взаимно простых c n:
def
ϕ(n) = |0 ≤ b < n|НОД(b, n) = 1| .
Легко проверить, что ϕ(1) = 1 и что ϕ(p) = p − 1 для любого простого p. Можно убедиться также, что для любого
простого p
ϕ(pa) = pa − pa−1 = pa 1 −
1
p
.
Для этого достаточно заметить, что числа от 0 до pa − 1 , которые не взаимно просты c pa, – это в точности те
числа, которые делятся на p, а их количество равно pa−1.
Малая теорема Ферма
Теорема. Пусть p – простое число. Любое целое число a удовлетворяет сравнению ap ≡ a(mod p), и любое целое
число a, не делящееся на p, удовлетворяет сравнению ap−1 ≡ 1(mod p).
Доказательство. Предположим сначала, что p a. Покажем, что 0a, 1a, 2a, 3a, . . . , (p − 1)a есть полная система
вычетов по модулю p. В самом деле, если бы какие-либо два из этих чисел, скажем, ia и ja, принадлежали одному
классу вычетов, т.е. ia ≡ ja(mod p), это означало бы, что p | (i − j)a, а так как a не делится на p, мы получили
бы p | (i − j). Так как i и j меньше p, это возможно лишь в случае i = j. Таким образом, числа a, 2a, . . . , (p − 1)a,
рассматриваемые по модулю p, являются перестановкой чисел 1, 2, 3, . . . (p − 1). Отсюда следует, что произведение
всех чисел первого набора сравнимо по модулю p с произведением всех чисел второго набора, т.е. ap−1(p − 1)! ≡
(p − 1)!(mod p). Получаем, что p | (p − 1)!(ap−1 − 1). Так как (p − 1)! не делится на p, получим p | ap−1 − 1, что и
требовалось доказать. Наконец, если умножить обе части сравнения ap−1 ≡ 1(mod p) на a, получится первое сравнение
из утверждения теоремы для случая, когда a не делится на p. Если же a делится на p, то сравнение ap ≡ a(mod p)
является тривиальным, так как обе его части сравнимы с нулём по модулю p. Это завершает доказательство теоремы.
Следствие из малой теоремы Ферма
Следствие. Если a не делится на p и если n ≡ m(mod (p-1)), то an ≡ am(mod p).
Доказательство. Пусть n > m. Так как p − 1 | n − m, то n = m + c(p − 1) для некоторого положительного
целого c. Умножив почленно c сравнений ap−1 ≡ 1(mod p) и сравнение am ≡ am(mod p), получим искомый результат:
an ≡ am(mod p).
Пример. Найти последнюю цифру в семеричной записи числа 21000000.
Решение. Пусть p = 7. Так как 1000000 при делении на p − 1 = 6 даёт остаток 4, получаем 21000000 ≡ 24 = 16 ≡
2(mod 7), и, значит, последняя цифра равна 2.
Китайская теорема об остатках
Теорема. Пусть требуется решить систему сравнений по различным модулям:
12.1. Теоретические сведения
x ≡ a1(mod m1)
x ≡ a2(mod m2)
......
x ≡ ar (mod mr )
причём любые два модуля взаимно просты: НОД(mi, mj ) = 1 для i = j. Тогда эта система разрешима и любые два
решения сравнимы по модулю M = m1m2 · · · mr .
Доказательство. Сначала докажем единственность по модулю M (последнее утверждение теоремы). Пусть x и x
– два решения системы. Положим x = x − x . Тогда x сравним с нулём по любому модулю mi, а значит, и по модулю
M (по пятому свойству сравнений). Теперь покажем, как найти решение x.
Обозначим через Mi = M/mi произведение всех модулей, кроме i-го. Очевидно, что НОД(mi, Mi) = 1 и, следова-
тельно, существует такое целое Ni, что MiNi = 1(mod mi) (число Ni может быть найдено, например, по алгоритму
Евклида). Положим теперь x = i aiMiNi. Тогда для каждого i все слагаемые в этой сумме, за исключением i-го,
делятся на mi, так как mi | Mj для всех i = j. Таким образом, для каждого i имеем x ≡ aiMiNi ≡ ai(mod mi), что и
требовалось доказать.
Мультипликативность функции Эйлера
Следствие. Функция Эйлера обладает свойством мультипликативности , т.е. ϕ(mn) = ϕ(m)ϕ(n), если НОД(m, n) =
1.
Доказательство. Для доказательства необходимо подсчитать количество целых чисел между нулём и mn − 1, не
имеющих общих делителей с mn. Для каждого j из этого множества обозначим за j1 наименьший неотрицательный
вычет по модулю m (т.е. 0 ≤ j1 < m и j ≡ j1(mod m)) и через j2 наименьший неотрицательный вычет по модулю
n(т.е. 0 ≤ j2 < n и j ≡ j2(mod n)). Из китайской теоремы об остатках следует, что каждой паре j1, j2 соответствует
одно и только одно число j в промежутке от 0 до mn − 1, для которого j ≡ j1(mod m) и j ≡ j2(mod n). Заметим,
что число j не имеет общих делителей с mn тогда и только тогда, когда оно не имеет общих делителей с m(это
эквивалентно взаимной простоте j1 и m) и не имеет общих делителей с n(что эквивалентно взаимной простоте j2 и
n). Таким образом, числа j, взаимно простые с mn, находятся во взаимно однозначном соответствии с парами j1, j2,
для которых 0 ≤ j1 < m, НОД(j1, m) = 1, 0 ≤ j2 < n,НОД(j2, n) = 1. Число возможных значений для j1 равно ϕ(m),
а для j2 равно ϕ(n). Итак, число пар равно ϕ(m)ϕ(n). Следствие доказано.
Применение функции Эйлера для факторизации
Пусть известно, что n есть произведение двух простых чисел. Тогда, зная эти числа p и q, можно найти ϕ(n) и
обратно, зная n и ϕ(n), можно найти p и q. Точнее, ϕ(n) можно вычислить по p и q за O(log n) двоичных операций, а
числа p и q можно вычислить по n и ϕ(n) за O(log3 n) двоичных операций.
Применение функции Эйлера для факторизации
Доказательство. Утверждение очевидно, если n чётно, так как в этом случае p = 2, q = n/2 и ϕ(n) = n/2−1; поэтому
предположим, что n нечётно. В силу мультипликативности функции ϕ для n = pq получаем ϕ(n) = (p − 1)(q − 1) =
n + 1 − (p + q). Таким образом, значение ϕ(n) может быть получено из чисел p и q при помощи одного сложения и
одного вычитания. Обратно, предположим, что известны n и ϕ(n), и надо найти p и q. Для неизвестных величин p и
q известны их произведение n и сумма p + q = n + 1 − ϕ(n). Обозначим последнее выражение через 2b (p + q – число
чётное). Но два числа, произведение которых равно n, а сумма 2b, должны быть корнями квадратного уравнения
z2 − 2bz + n = 0. Итак, p и q равны b ± b2 − n. Наибольшее время при вычислении занимает процедура извлечения
квадратного корня: на неё потребуется O(log3 n) двоичных операций. Предложение доказано.
Теорема Эйлера
Теорема. Если НОД(a, m) = 1, то aϕ(m) ≡ 1 (mod m).
Доказательство. Сначала докажем это утверждение в случае, когда m есть степень простого числа: m = pα. Прове-
дём индукцию по α. При α = 1 получается малая теорема Ферма. Пусть α ≥ 2 и формула верна для (α − 1)й степени
α−1
p. Тогда αp −p
= 1 + pα−1b для некоторого целого b. Возводя обе части этого равенства в степень p и используя
тот факт, что все биномиальные коэффициенты в выражении (1 + x)p, кроме первого и последнего, делятся на p,
α
получаем, что αp −p
α
на 1 больше суммы, каждое слагаемое которой делится на pα. Другими словами, αϕ(p ) − 1
делится на pα. Итак, теорема доказана для степеней простых чисел.
Наконец, из мультипликативности функции ϕ следует, что если pα m, то αϕ(m) ≡ 1 (mod pα) (достаточно возвести
α
обе части сравнения αϕ(p ) ≡ 1 (mod pα) в соответствующую степень). Поскольку это верно для любого pα m и
поскольку степени различных простых чисел взаимно просты, из свойств сравнений следует, что αϕ(m) ≡ 1 (mod m).
47
√
α−2
α−1
12. Криптосистема RSA
Следствие из теоремы Эйлера
Следствие. Если НОД(a, m) = 1 и если n – наименьший неотрицательный вычет n по модулю ϕ(m), то an ≡
an (mod m).
Пример. Вычислить 21000000 (mod 77).
Решение. Так как 30 есть наименьшее общее кратное чисел ϕ(7) = 6 и ϕ(11) = 10, на основании приведённого выше
замечания получим 230 ≡ 1 (mod 77). Так как 1000000 = 30 · 33333 + 10, получим 21000000 ≡ 210 ≡ 23 (mod 77). Другой
способ решения заключается в том, чтобы вычислить 21000000 (mod 7) (так как 1000000 = 6 ∗ 166666 + 4, то это 24 ≡ 2),
то же проделать для 21000000 (mod 11) (так как 1000000 делится на 11 − 1, это 1) а затем, используя китайскую теорему
об остатках, в промежутке от 0 до 76 найти такое x, что x ≡ 2 (mod 7) и x ≡ (mod 11).
12.2. Криптосистема RSA
В 1978 г. американцы Р. Ривест, А. Шамир и Л. Адлеман (R.L. Rivest, A. Shamir, L. Adleman) предложили пример
функции f , обладающей рядом замечательных достоинств. На её основе была построена реально используемая система
шифрования, получившая название по первым буквам имён авторов – система RSA. Эта функция такова, что
· существует достаточно быстрый алгоритм вычисления значений f (x);
· существует достаточно быстрый алгоритм вычисления значений обратной функции f −1(x);
· функция f (x) обладает некоторым секретом , знание которого позволяет быстро вычислять значения f −1(x);
в противном же случае вычисление f −1(x) становится трудно разрешимой в вычислительном отношении зада-
чей, требующей для своего решения столь много времени, что по его прошествии зашифрованная информация
перестаёт представлять интерес для лиц, использующих отображение f в качестве шифра.
Однонаправленная функция в RSA
Пусть m и e натуральные числа. Функция f , реализующая схему RSA, устроена следующим образом:
f : x → xe (mod m)
Для дешифрования сообщения a = f (x) достаточно решить сравнение
xe ≡ a (mod m).
(12.1)
(12.2)
При некоторых условиях на m и e это сравнение имеет единственное решение x.
Если показатель степени e в сравнении (12.2) взаимно прост с ϕ(m), то сравнение (12.2) имеет единственное реше-
ние. Для того, чтобы найти его, определим целое число d, удовлетворяющее условиям
de ≡ 1 (mod ϕ(m)),
1 ≤ d < ϕ(m)
(12.3)
Такое число существует, поскольку (e, ϕ(m)) = 1, и притом единственно. Здесь и далее символом (a, b) будет обозна-
чаться наибольший общий делитель чисел a и b.
Классическая теорема Эйлера утверждает, что для каждого числа x, взаимно простого с m, выполняется сравнение
xϕ(m) ≡ 1 (mod m) и, следовательно,
ad ≡ xde ≡ x (mod m)
(12.4)
Таким образом, в предположении (a, m) = 1, единственное решение сравнения (12.2) может быть найдено в виде
x ≡ ad (mod m)
(12.5)
Если дополнительно предположить, что число m состоит из различных простых сомножителей, то сравнение (12.5)
будет выполняться и без предположения (a, m) = 1. Действительно, обозначим r = (a, m) и s = m/r. Тогда ϕ(m)
делится на ϕ(s), а из (12.2) следует, что (x, s) = 1. Подобно (12.4), теперь легко находим x ≡ ad (mod s). А кроме того,
имеем x ≡ 0 ≡ ad (mod r). Получившиеся сравнения в силу (r, s) = 1 дают нам (12.5).
Выбор параметров RSA
Авторы схемы RSA предложили выбирать число m в виде произведения двух простых сомножителей p и q, при-
мерно одинаковых по величине. Так как
ϕ(m) = ϕ(pq) = (p − 1)(q − 1)
то единственное условие на выбор показателя степени e в отображении (12.1) есть
(12.6)
48
12.2. Криптосистема RSA
(e, p − 1) = (e, q − 1) = 1
(12.7)
Итак, лицо, заинтересованное в организации шифрованной переписки с помощью RSA, выбирает два достаточно
больших простых числа p и q. Перемножая их, оно находит число m = pq. Затем выбирается число e, удовлетворяющее
условиям (12.7), вычисляется с помощью (12.6) число ϕ(m) и с помощью (12.3) – число d. Числа m и e публикуются,
число d остаётся секретным. Теперь любой может отправлять зашифрованные с помощью (12.1) сообщения организа-
тору этой системы, а организатор легко сможет дешифровывать их с помощью (12.5).
Практический взлом RSA
Для иллюстрации своего метода Ривест, Шамир и Адлеман зашифровали таким способом некоторую английскую
фразу. Сначала она стандартным образом (a = 01, b = 02, . . . , z = 26, пробел=00) была записана в виде целого числа
x, а затем зашифрована с помощью отображения (12.1) при
m =11438162575788886766932577997614661201021829672124236256256184293
5706935245733897830597123563958705058989075147599290026879543541
и e = 9007. Эти два числа были опубликованы, причём дополнительно сообщалось, что m = pq, где p и q – про-
стые числа, записываемые соответственно 64 и 65 десятичными знаками. Первому, кто дешифрует соответствующее
сообщение
f (x) =9686961375462206147714092225435588290575999112457431987469512093
0816298225145708356931476622883989628013391990551829945157815154
была обещана награда в 100$.
The magic words are squeamish ossifrage
Эта история завершилась спустя 17 лет в 1994 г., когда D. Atkins, M. Graff, A.K. Lenstra и P.C. Leyland сообщили
о дешифровке фразы. Она была вынесена в заголовок статьи, а соответствующие числа p и q оказались равными
p =3490529510847650949147849619903898133417764638493387843990820577,
q =32769132993266709549961988190834461413177642967992942539798288533
В работе, возглавлявшейся четырьмя авторами проекта, и продолжавшейся после предварительной теоретической
подготовки примерно 220 дней, на добровольных началах участвовало около 600 человеки и примерно 1600 компью-
теров, объединённых сетью Intranet. Наконец, отметим, что премия в 100$ была передана в Free Software Foundation.
49