Система шифрования RSA

advertisement
Кафедра ТВ и МС
С.Я. Шатских
Введение в специальность КБ
Система шифрования 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
Download