Кафедра ТВ и МС С.Я. Шатских Введение в специальность КБ Система шифрования RSA Черновик Система шифрования RSA была разработана Р. Ривестом, А. Шамиром и Л. Адельманом в 1978 году1 (см. [1], [2]). В основе системы RSA лежат следующие алгоритмы шифрования и расшифрования. 1. Выбираются два простых числа: p и q. 2. Вычисляется их произведение n = p · q. 3. Вычисляется произведение m = (p − 1)(q − 1). 4. Выбирается натуральное число e : 2 ≤ e < m и взаимно простое с m. 5. Вычисляется2 натуральное число d < m такое, что e · d ≡ 1(mod m). 6. Теперь пара {e, n} - это открытый ключ, а пара {d, n} - секретный ключ. 7. Буквы сообщения преобразуются3 в числа. Числовое представление сообщения разбивается на блоки, каждый из которых является некоторым числом b ∈ Zn . Итак, открытый текст - это конечная последовательность чисел b1 , b2 , . . . , br . 8. Числа bi последовательно шифруются независимо друг от друга. 9. Алгоритм шифрования числа bi : зная {e, n, bi }, вычисляем ci ≡ bie (mod n), ci ∈ Zn . Таким образом, шифротекст - это последовательность чисел c1 , c2 , . . . , cr . 10. Числа ci последовательно расшифровываются независимо друг от друга. 11. Алгоритм расшифрования числа ci : зная {d, n, ci }, вычисляем bi ≡ cid (mod n), bi ∈ Zn . Замечание. В дальнейшем, для простоты изложения, будем считать, что открытый текст, также как и шифротекст, состоит из одного блока. 1 Позднее стало известно (см. [3]), что ешё в 1974 году Британская служба безопасности уже имела основную технику криптографии с открытым ключём. 2 Ввиду п. 4 (см. теорему 2 Приложения), такое число d обязательно найдется во множестве Zm и притом только одно. Число d называют обратным по отношению к e и обозначают через e−1 (mod m) или кратко, если это не вызывает путаницы, через e−1 . 3 Например, каждой букве ставится в соответствие её номер в алфавите, начиная с нуля: а 7→ 0, б 7→ 1, в 7→ 2, . . . , я 7→ 32. . 1 Пример 1. Проведем шифрование в системе RSA при следующих значениях параметров:p = 7, q = 11. Тогда n = p · q = 77, а m = 60. Выберем открытый ключ e = 37, для которого выполняется условие взаимной простоты (37, 60) = 1. Пользуясь результатами вычислений примера 5 к теореме 3 Приложения, можно утверждать, что секретный ключ d = e−1 = 13. Выберем открытый текст b = 2. Вычислим шифротекст на основе открытого ключа c = be (mod n) = 237 (mod 77) = 51. Заметим, что вычисление остатка по модулю 77 можно провести вручную или с помощью калькулятора. Аналогичным образом происходит процесс расшифрования с помощью секретного ключа b = 5113 (mod 77) = 2. Шифрование и расшифрование с помощью пакета MATHEMATICA Команда вычисления наибольшего общего делителя двух натуральных чисел (a, b) = GCD[a,b]. Команда разложения натурального числа n на простые множители с указанием показателей степеней этих множителей: FactorInteger[n]. Команда вычисления остатка от деления числа a на число (модуль) n : a (mod n) = Mod[a,n]. Команда вычисление обратного элемента в Zm a · x ≡ 1 (mod m), x = a−1 (mod m), если (a, m) = 1. a−1 (mod m) = PowerMod[a,-1,m]. Команда вычисления натуральной степени элемента в Zn uv (mod n) = PowerMod[u,v,n]. Пример 2 . Провести шифрование в системе RSA при следующих значениях параметров: p = 7703, q = 7919 (простые числа). Tогда n = 61000057, m = 60984436. Выбран открытый ключ e = 5743. Имеет место взаимная простота чисел e и m : (e, m) = (5743, 60984436) = 1. Вычислен секретный ключ d = e−1 = 35753891. Выбран открытый текст b = 1234567. Вычислен шифротекст c = b e (mod n) = 33136480. 2 Вскрытие шифра RSA Задача RSA. Известны: модуль n, открытый ключ e и шифротекст c. Требуется восстановить открытый текст, т.е. найти такое число b, что c ≡ b e (mod n). Решение. Применяя алгоритм факторизации, разложим модуль n на простые множители: n = p · q. Знание чисел p и q позволяет найти число m = (p − 1) · (q − 1). Далее находим секретный ключ d как элемент обратный e : d ≡ e−1 (mod m). Теперь, зная секретный ключ d, можно восстановить открытый текст b = c d (mod n). Пример 3. (Задача RSA.) Известны следующие параметры системы RSA: модуль n = 10471957439, открытый ключ e = 10471753, а также шифротекст c = 7820151105. Требуется восстановить открытый текст, т.е. найти число b такое, что c ≡ b e (mod n). Решение. FactorInteger[10471957439] 7−→ 1047291 · 999911 , p = 104729, q = 99991; m = (p − 1) · (q − 1) = 104728 · 99990 = 10471752720; (m, e) = (10471752720, 10471753) = GCD[10471752720,10471753] = 1; d = e−1 (mod m) = 10471753−1 (mod 10471752720) = = PowerMod[10471753,-1,10471752720] = 9835967737; b = c d (mod n) = PowerMod[7820151105,9835967737,10471957439] = = 471957439. Проверка шифрованием b e (mod n) = PowerMod[471957439,10471753,10471957439] = 7820151105 = c. 3 Сложность вскрытия шифра RSA Теорема 1. Задача RSA не сложнее алгоритма факторизации натуральных чисел. Доказательство этой теоремы приведено в Приложении. Замечания. Приведем две цитаты из книги [3] (см. стр. 191 и 193). "Существует гипотеза, подтвержденная некоторыми косвенными соображениями, что задача RSA на самом деле легче проблемы факторизации. В настоящее время проверка этой гипотезы - один из главных открытых вопросов криптологии". "Если проблема факторизации модуля системы окажется легкой, RSA будет взламываться. Самые большие числа, которые в настоящее время удается разложить на множители за разумное время, имеют 500 двоичных знаков. В связи с этим, для обеспечения стойкости систем среднего срока действия, рекомендуется брать модули шифрования порядка 1024 битов. Для систем большего срока действия следует выбирать модули, состоящие из 2048 битов". Полезную информацию, относящуюся к обсуждаемой теме, можно найти в книге [2] на стр. 532-533. 4 ПРИЛОЖЕНИЕ 1. Сравнения. Имея дело с натуральными числами, будем использовать стандартные обозначения: • a|b - ”a делит b • a - b - ”a не делит b • (a, b) - наибольший общий делитель чисел a и b, • Zn = {0, 1, . . . , n − 1}. Определенние. Если два целых числа a и b при делении на число (модуль) n дают одинаковые остатки, то эти числа называют сравнимыми по модулю n и пишут a ≡ b (mod n). Нетрудно убедиться в справедливости утверждения a ≡ b (mod n) тогда и только тогда, когда n|(a − b). 2. Алгоритм Евклида. Простым алгоритмом для получения наибольшего общего делителя двух натуральных чисел (с помощью последовательного деления с остатком) является алгоритм Евклида. Лемма Если a = qb + r, то (a, b) = (b, r). Доказательство. Обозначим c := (a, b), а d := (b, r). Тогда c|a и c|b, поэтому c|r. Следовательно c ≤ d. Аналогично рассуждая, будем иметь: d|b и d|r, поэтому d|a. Следовательно d ≤ c. Итак, c = d. Теорема 2. Для любых натуральных a и b таких, что b - a при некотором s существуют натуральные числа q0 , q1 , . . . , qs , и r1 , . . . , rs , для которых выполняются соотношения b > r1 > r2 > . . . > rs > 0, a = q0 b + r1 b = q1 r1 + r2 r1 = q2 r2 + r3 (1) ............... r = qs−1 rs−1 + rs s−2 rs−1 = qs rs . И, кроме того, (a, b) = rs . (2) Доказательство. Система равенств (1) получается в результате деления a на b с остатком r1 , затем b на r1 с остатком r2 и т.д. Ввиду монотонного убывания (положительных) остатков, на некотором (s + 1)-ом шаге мы получим нулевой остаток rs+1 = 0 и процесс деления остановится. Для доказательства равенства (2) следует воспользоваться леммой: (a, b) = (b, r1 ) = (r1 , r2 ) = . . . = (rs−1 , rs ) = rs . 5 Таким образом наибольший общий делитель (a, b) равен последнему отличному от нуля остатку. Следствие. Для наибольшего общего делителя двух натуральных чисел a и b найдутся целые числа k и l такие, что (a, b) = ka + lb. (3) Доказательство. Спускаясь вниз по последовательности равенств (1), можно увидеть, что остатки r1 , r2 , r3 и т.д. являются линейными комбинациями чисел a и b : r1 = a − q 0 b r2 = b − q1 r1 = b − q1 (a − q0 b) = −q1 a + (1 + q1 q0 )b r3 = r1 − q2 r2 = a − q0 b − q2 (−q1 a + (1 + q1 q0 )b) = (1 + q1 q2 )a − (q0 + q2 (1 + q1 q0 ))b .................................................................................... Следовательно, найдутся целые числа k и l такие, что (a, b) = rs = ka + lb. Замечание. Для натуральных a и b целые числа k и l не определяются единственным образом. Действительно, если равенство (3) имеет место, то для любого натурального s : (k + sb)a + (l − sa)b = (a, b). В пакете MATHEMATICA задача нахождение наибольшего общего делителя натуральных чисел a и b вместе с нахождением пары целых чисел {k, l}, для которых выполняется равенство (3), решается с помощью одной команды расширенного алгоритма Евклида (см. [6], стр. 14) ExtendedGCD[a, b] 7→ {(a, b), {k, l}}. Пример 4. Найти наибольший общий делитель пары чисел {5743, 60984436} а также числа k и l такие, что 5743 · k + 60984436 · l = (5743, 60984436). Решаем эту задачу с помощью команды ExtendedGCD[5743, 60984436] 7→ {1, {−25230545.2376}}. Таким образом, (5743, 60984436) = 1, k = −25230545 и l = 2376. 3. Обратимые элементы в Zm Определение. Элемент c ∈ Zm называется обратимым по умножению, если найдется элемент d ∈ Zm , такой что c · d ≡ 1 (mod m ). (4) Если для элементов c и d выполняется равенство (4), то d называют обратным элементом по отношению к c и обозначают через c−1 . Итак, для обратимого элемента c выполняется равенство c · c−1 ≡ 1 (mod m). Теорема 3. Обратимыми по умножению являются те и только те элементы из Zm , которые взаимно просты с модулем m. Для каждого обратимого элемента c ∈ Zm существует только один обратный элемент. 6 Доказательство. Пусть c ∈ Zm и (c, m) = r > 1. Тогда ни для какого d ∈ Zm сравнение c · d ≡ 1 (mod m) не может выполняться. Действительно, в случае выполнения этого сравнения m делит (c · d − 1) и r делит как (c · d − 1) так и c, а следовательно r делит 1, что невозможно. Обратно, если (c, m) = 1, то, используя алгоритм Евклида4 , найдем целые числа k и l такие, что (c, m) = 1 = kc+lm. Отсюда будем иметь: m делит (1−k ·c). Следовательно, справедливо соотношение c · k ≡ 1 (mod m) (5) и, если k ∈ Zm , то k = c−1 . Если целое число k ∈ / Zm , то существует число e k ∈ Zm такое, e что k ≡ k (mod m). Следовательно, для некоторого числа s ∈ Z выполняется равенство k=e k + s · m. Поэтому, ввиду (5) c·e k ≡ 1 (mod m) и e k = c−1 . Единственность обратного элемента будем доказывать от противного. Пусть для обратимого элемента c ∈ Zm существует два различных обратных элемента d1 и d2 из Zm : c · d1 ≡ 1 (mod m ), c · d2 ≡ 1 (mod m ). Тогда по свойствам сравнений c(d1 − d2 ) ≡ 0 (mod m ), или m делит c(d1 − d2 ). Однако это невозможно, поскольку (c, m) = 1 и |d1 − d2 | < m. Пример 5. Рассмотрим пару чисел {37, 60}, для которых выполняется условие взаимной простоты (37, 60) = 1. Вычислим 37−1 (mod 60). Для этого, следуя теореме 2, найдем целые числа k и l такие, что 37k + 60l = 1. Используя алгоритм Евклида, получаем 60 − 1 · 37 = 23 37 − 23 = −60 + 2 · 37 = 14 23 − 14 = 2 · 60 − 3 · 37 = 9 14 − 9 = −3 · 60 + 5 · 37 = 5 9 − 5 = 5 · 60 − 8 · 37 = 4 5 − 4 = −8 · 60 + 13 · 37 = 1 13 · 37 − 8 · 60 = 1, т.е. k = 13, l = 8. Таким образом, 37 · 13 ≡ 1 (mod 60) и 37−1 (mod 60) = 13. Доказательство теоремы 1. Применяя алгоритм факторизации, разложим модуль n на простые множители: n = p · q. (6) 4 Точнее говоря, следствие из теоремы 2. 7 Затем, найдем число m = (p − 1) · (q − 1). Далее, решая сравнение ex ≡ 1 (mod m) (7) с помощью алгоритма Евклида, найдем секретный ключ d = x. Теперь, зная секретный ключ d, можно восстановить открытый текст b = c d (mod n). (8) Заметим, что возведение в степень по модулю может быть выполнено методом повторного возведения в квадрат (см. [4], стр. 26). Для завершения доказательства осталось заметить (см. [3], стр. 191; [4], стр. 103, [5], стр. 89), что с вычислительной точки зрения решение задачи факторизации (6), существенно сложнее решения задач (7) и (8). ЛИТЕРАТУРА 1. Rivest R.L., Shamir A., Adelman L. A method for obtaining digital signatures and public-key cryptosystems. Comm. ACM, 21(2):120-126,1978. 2. van Tilborg H. (ed.) Encyclopedia of cryptography and sequrity. Springer, 2005. 3. Смарт Н. Криптография. М.: Техносфера, 2005. 4. Коблиц Н. Курс теории чисел и криптографии. М.: ТВП, 2001. 5. Ященко В.В. (ред.) Введение в криптографию. СПб., МЦНМО, 2001. 6. Черемушкин А.В. Лекции по арифметическим алгоритмам в криптографии. М.: МЦНМО, 2002. 8