Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реферат / 1(2)

.pdf
Скачиваний:
14
Добавлен:
15.06.2014
Размер:
710.5 Кб
Скачать

Глава 8

Алгоритм RSA

84

Пионерская статья Диффи и Хеллмана знаменовала появление нового подхода в криптографии и на самом деле бросила вызов криптологам предложением найти криптографический алгоритм, который отвечал бы всем требованиям, выдвигаемым криптосистемам с общим ключом. Одними из первых ответили на этот вызов в 1977 году Рон Райвест (Ron Rivest), Ади Шамир (Adi Shamir) и Лен Адлеман (Len Adleman) из МТИ, а соответствующая публикация появилась в 1978 году 1. Схема Райвеста-Шамира-Адлемана (RSA) стала с тех пор единственной получившей широкое признание и практически применяемой схемой шифрования с открытым ключом.

Схема RSA представляет собой блочный шифр, в котором и открытый текст, и шифрованный текст представляются целыми числами из диапазона от 0 до n − 1 для некоторого n. В этом разделе мы обсудим RSA в определенных подробностях, начиная с объяснения алгоритма 2.

8.1Описание алгоритма

Схема, разработанная Райвестом, Шамиром и Адлеманом, основана на выражениях со степенями. Открытый текст шифруется блоками, каждый из которых содержит двоичное значение, меньшее некоторого заданного числа n. Это значит, что длина блока должна быть меньше или равна log2(n). На практике длина блока выбирается равной 2k битам, где 2k < n 6 2k+1. Шифрование и дешифрование для блока открытого текста M и блока шифрованного текста C можно представить в виде следующих формул:

C =Me mod n,

M =Cd mod n = (Me)d mod n = Med mod n.

Как отправитель, так и получатель должны знать значение n. Отправитель знает значение e, и только получателю известно значение d. Таким образом, данная схема является алгоритмом шифрования с открытым ключом KU = {e, n} и личным ключом KR = {d, n}. Чтобы этот алгоритм мог использоваться для шифрования с открытым ключом, должны быть выполнены следующие требования.

1.Должны существовать такие значения e, d и n, что Med = M mod n для всех M < n.

2.Должны относительно легко вычисляться Me и Cd для всех значений M < n.

3.Должно быть практически невозможно определить d по имеющимся e и n.

Пока что мы сфокусируем внимание на первом требовании, а остальные рассмотрим позже. Необходимо найти соотношение вида

Med = M mod n.

1Очевидно, первую реальную криптосистему шифрования/дешифрования с открытым ключом . предложил в 1973 году Клиффорд Кок (Cli ord Cock) из британской Группы защиты электронных коммуникаций (CESG). Метод Кока практически идентичен RSA.

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

85

Здесь как нельзя лучше подойдет следствие теоремы Эйлера: для таких любых двух простых чисел p и q и таких любых двух целых чисел n и m, что n = pq и 0 < m < n, и произвольного целого числа k выполняются следующие соотношения:

mkφ(n)+1 = mk(p−1)(q−1)+1 ≡ m mod n,

где φ(n) является функцией Эйлера, значение которой равно числу положительных целых чисел, меньших n и взаимно простых с n. В случае простых p и q имеем φ(pq) = (p−1)(q−1). Поэтому требуемое отношение получается при условии

ed = kφ(n) + 1.

Это эквивалентно следующим соотношениям:

ed ≡1 mod φ(n), d ≡e−1 mod φ(n),

т.е. e и d являются взаимно обратными по модулю φ(n). Обратите внимание, что в соответствии с правилами арифметики в классах вычетов это может иметь место только тогда, когда d (а следовательно, и e) является взаимно простым с φ(n). В эквивалентной записи gcd(φ(n), d) = 1.

Теперь у нас есть все, чтобы представить схему RSA. Компонентами схемы являются:

p и q – два простых числа

(секретные, выбираются),

n = pq

(открытое, вычисляется),

такое e, что gcd(φ(n), e) = 1, 1 < e, φ(n),

(открытое, выбирается),

d ≡ e−1 mod φ(n)

(секретное, вычисляется).

Личный ключ складывается из {d, n}, а открытый – из {e, n}. Предположим, что пользователь A опубликовал свой открытый ключ и теперь пользователь B собирается переслать ему сообщение M. Тогда пользователь B вычисляет C = Me(mod n) и пересылает C. Получив этот шифрованный текст, пользователь A дешифрует его, вычисляя M = Cd(mod n).

Имеет смысл привести здесь обоснование этого алгоритма. Мы выбрали e и d такие, что

d ≡ e−1 mod φ(n).

Таким образом,

ed ≡ 1 mod φ(n).

Значит, ed имеет вид kφ(n) + 1. Но по следствию теоремы Эйлера, для таких любых двух простых чисел p и q и целых чисел n = pq и M, что 0 < M < n, выполняются соотношения

Mkφ(n)+1 = Mk(p−1)(q−1)+1 ≡ M mod n.

Поэтому Med ≡ M mod n. Теперь мы имеем

C =Me mod n,

M =Cd mod n = (Me)d mod n = Med mod n ≡ M mod n.

Рис. 8.1 резюмирует алгоритм RSA, а на рис. 8.2 показан пример его применения. В этом примере ключи вычисляются следующим образом.

86

1.Выбирается два простых числа, p = 7 и q = 17.

2.Вычисляется n = pq = 7 × 17 = 119.

3.Вычисляется φ(n) = (p − 1)(q − 1) = 96.

4.Выбирается e, взаимно простое с φ(n) = 96 и меньшее, чем φ(n); в данном случае e = 5.

5.Определяется такое d, что de = 1 mod 96 и d < 96. Соответствующим значением будет d = 77, так как 77 × 5 = 385 = 4 × 96 + 1.

Врезультате получаются открытый ключ KU = {5, 119} и личный ключ KR = {77, 119}.

Вданном примере показано использование этих ключей с вводимым открытым текстом M = 19. При шифровании 19 возводится в пятую степень, что в результате дает 2476099.

Врезультате деления на 119 определяется остаток, равный 66. Следовательно, 195 = 66 mod 119, и поэтому шифрованным текстом будет 66. Для дешифрования выясняется, что

6677 ≡ 19 mod 119.

Рис. 8.1. Алгоритм RSA.

Рис. 8.2. Пример использования алгоритма RSA.

87

8.2Шифрование и дешифрование

Как шифрование, так и дешифрование в RSA предполагает использование операции возведения целого числа в целую степень по модулю n. Если возведение в степень выполнять непосредственно с целыми числами и только потом проводить сравнение по модулю n, то промежуточные значения окажутся просто огромными. К счастью, здесь можно воспользоваться свойствами арифметики в классах вычетов:

[(a mod n) × (b mod n)] mod n = (a × b) mod n.

Таким образом, мы можем рассматривать промежуточные результаты по модулю n. Это делает вычисления практически возможными.

Другой проблемой является эффективная реализация операции возведения в степень, так как в случае применения RSA мы должны иметь дело с потенциально большими показателями. Чтобы продемонстрировать, насколько здесь можно увеличить эффективность вычислений, предположим, что необходимо вычислить x16. Прямолинейный подход потребует 15 умножений, как показано ниже.

x16 = x × x × x × x × x × x × x × x × x × x × x × x × x × x × x × x

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

x2, x4, x8, x16.

В общем случае предположим, что нам нужно найти значение am, где a и m являются положительными целыми числами. Если представить m в виде двоичного числа

bkbk−1 . . . b0, то

X m = 2i,

bi6=0

и поэтому

am = a(Pbi6=0 2i) = Y a(2i),

bi6=0

"#

am mod n =

bi6=0 a(2i)

mod n = bi6=0 ha(2i) mod ni .

 

Y

Y

Таким образом, для вычисления ab mod n можно использовать алгоритм, показанный на рис. 8.3. На рис. 8.4 вы видите пример последовательности значений, получаемых в результате выполнения этого алгоритма. Обратите внимание на то, что переменная c, вообще говоря, не нужна – она включена в алгоритм только с целью обеспечения наглядности. Конечное значение c будет значением показателя вычисляемой степени.

c ←; d ← 1

for i ← k downto 0 do c ← 2 × c

d ← (d × d) mod n if bi = 1

then c ← c + 1

d ← (d × a) mod n

return d

Puc. 8.3. Алгоритм вычисления ab mod n

88

i

9

8

7

6

5

4

3

2

1

0

bi

1

0

0

0

1

1

0

0

0

0

c

1

2

4

8

17

35

70

140

280

560

d

7

49

157

526

160

241

298

166

67

1

 

 

 

 

 

 

 

 

 

 

 

Puc. 8.4. Результаты выполнения алгоритма быстрого возведения в степень для ab mod n

при a = 7, b = 560 = 1000110000, n = 561.

8.3Вычисление ключей

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

определение двух простых чисел p и q;

выбор одного из чисел e или d и вычисление второго.

Сначала рассмотрим процедуру выбора p и q. Ввиду того что значение n = pq будет известно любому потенциальному противнику, то для того, чтобы не допустить возможности нахождения p и q с помощью простого перебора вариантов, эти простые числа должны быть выбраны из достаточно большого множества (т.е. p и q должны быть большими числами). В то же время метод нахождения больших простых чисел должен быть практически эффективным.

На сегодняшний день нет хороших методов вычисления произвольно больших простых чисел, поэтому для решения этой проблемы приходится прибегать к различным хитростям. Чаще всего процедура заключается в выборе случайного нечетного число приблизительно желаемой величины и выяснения, является ли это число простым. Если окажется, что число простым не является, выбирается следующее случайное число, пока не будет найдено простое.

Для проверки того, что числа простые, существует целый ряд тестов. Почти все такие тесты носят вероятностный характер. Это значит, что тест определит только, что данное целое число, вероятно, простое. Несмотря на отсутствие полной уверенности, такие тесты могут выполняться так, чтобы обеспечить уверенность с вероятностью, как угодно близкой к 1.

Для алгоритма Миллера-Рабина (Miller-Rabin) и большинства других подобных алгоритмов процедура проверки простоты данного целого числа n заключается в выполнении ряда вычислений, в которых используется n и некоторое случайно выбранное целое число a. Если n не выдерживает тестирования, то n простым не является. Если n выдерживает одно тестирование, то n может оказаться простым, а может и не быть простым. Если же n успешно проходит целый ряд таких "испытаний" с различными случайно выбранными значениями a, это дает нам большую степень уверенности в том, что n на самом деле является простым числом.

Вкратце процедуру выбора простого числа можно представить в следующем виде.

1.Выберите нечетное целое число n некоторым случайным образом (например, используя генератор псевдослучайных чисел).

2.Выберите целое число a < n некоторым случайным образом.

89

3.Выполните вероятностный тест на простоту, например тест Миллера-Рабина. Если n не выдерживает тестирования, отбросьте данное значение n и перейдите к п. 1.

4.Если n выдерживает достаточное число повторных тестов, примите данное значение n как подходящее, в противном случае перейдите к п. 2.

Эта процедура несколько утомительна. Однако не забывайте о том, что этот процесс выполняется относительно нечасто – только тогда, когда требуется новая пара (KU, KR).

При этом неплохо знать, как много чисел, скорее всего, окажутся отброшенными прежде, чем обнаружится простое число. Одна из теорем теории чисел, известная под названием теоремы о простых числах, утверждает, что простые числа около N распределяются в среднем по одному на каждые ln(N) целых чисел. Таким образом, в среднем придется протестировать порядка ln(N) целых чисел прежде, чем найдется простое число. В действительности из-за того, что все четные целые числа можно отбросить сразу же, истинный порядок задается числом ln(N)/2. Например, если искать простые числа в области величин порядка 2200, то для нахождения простого числа потребуется около ln(2200)/2 = 70 попыток.

После определения простых чисел p и q процесс вычисления ключей завершается выбором значения e и вычислением d или, наоборот, выбором значения d и вычислением e. В первом случае необходимо сначала выбрать такое e, что gcd(φ(n), e) = 1, а потом вычислить d = e−1 mod φ(n). К счастью, имеется один алгоритм, который в одно и то же время вычисляет наибольший общий делитель двух целых чисел и, если наибольший общий делитель оказывается равным 1, определяет обратное для одного из целых чисел по модулю другого. Этот алгоритм называется обобщенный алгоритм Евклида. Процедура заключается в генерировании случайных чисел и сравнении их с φ(n) до тех пор, пока не будет найдено число, взаимно простое с φ(n). Теперь мы снова можем спросить, как много случайных чисел придется проверить прежде, чем будет найдено подходящее число, т.е. число, взаимно простое с φ(n)? Легко показать, что вероятность того, что два выбранных случайно числа окажутся взаимно простыми, равна примерно 0, 6 – это значит, что для нахождения подходящего целого значения понадобится всего несколько проверок.

8.4Защищенность алгоритма RSA

Тремя возможными подходами к криптоанализу алгоритма RSA являются следующие.

Простой перебор. Предполагает проверку всех возможных личных ключей.

Математический анализ. Существует несколько подходов такого рода, но все они по сути эквивалентны нахождению множителей произведения двух простых чисел.

Анализ временных затрат. Опирается на анализ времени выполнения алгоритма дешифрования.

Защита против простого перебора в случае RSA остается той же, что и для всех других криптосистем, – использование большого пространства ключей. С этой точки зрения чем больше битов в e и d, тем лучше. Однако из-за сложности вычислений как при генерировании ключей, так и при шифровании/дешифровании, чем большим оказывается размер ключа, тем медленнее работает система. В этом разделе для алгоритма RSA мы представляем краткий обзор возможностей его криптоанализа при использовании математического подхода и подхода на основе анализа временных затрат.

90

8.4.1 Проблема разложения на множители

Можно выделить следующие три математически различных подхода к криптоанализу RSA.

Разложение n на два его простых множителя. Это позволит вычислить φ(n) = (p − 1)(q − 1), на основании чего можно будет определить d = e−1(mod φ(n)).

Определение непосредственно φ(n) без того, чтобы сначала определять p и q. Это также позволит определить d = e−1(mod φ(n)).

Определение непосредственно d без того, чтобы сначала определять φ(n).

Вбольшинстве случаев обсуждение вопросов криптоанализа шифра RSA касается задачи разложения значения n на два его простых множителя. Задача определения φ(n) по данному n оказывается эквивалентной задаче разложения n на множители. Для известных сегодня алгоритмов проблема определения d по данным e и n оказывается требующей по крайней мере таких же затрат времени, как и проблема разложения на множители. Следовательно, затраты на решение задачи разложения на множители можно использовать в качестве эталона при оценке степени защищенности RSA.

Для больших n с большими простыми множителями разложение на множители является серьезной проблемой, но не настолько, как требуется. Поразительной иллюстрацией этого может служить следующая история. В 1977 году три изобретателя алгоритма RSA отважились предложить читателям популярного журнала Scientific American раскрыть шифрованное сообщение, которое они поместили в разделе "Математические игры" Мартина Гарднера (Martin Gardner). За расшифровку этого сообщения они предложили награду в 100 долл.

По их оценкам, задача не могла быть решена ранее, чем приблизительно через 40 квадрильонов лет. Но в апреле 1994 года группа пользователей Internet потребовала выплаты призовой суммы после всего восьми месяцев совместной работы в Internet. В предложенной задаче использовался открытый ключ длиной в 129 десятичных знаков (длина n), что равно примерно 428 битам. И точно так же, как и для DES, RSA Laboratories объявили конкурсы для шифров с длинами ключей в 100, 110, 120 и больше знаков. Последней из решенных задач является задача, для RSA-130, в которой длина ключа равна 130 десятичным знакам. Имеющиеся на сегодня результаты показаны в табл. 8.1. Единицей меры сложности задачи в данном случае является MIPS-год – объем работы, выполняемой в течение года процессором, осуществляющим обработку одного миллиона команд в секунду, что примерно эквивалентно выполнению 3 × 1013 команд. Так, машина на базе Pentium

счастотой 200 МГц показывает скорость около 50 MIPS.

Таблица 8.1. Прогресс в решении проблемы разложения на множители

Число

Приблизи-

Дата решения

Требуемое

Использованный алгоритм

десятичных

тельное число

 

число

 

знаков

битов

 

MIPS-лет

 

 

 

 

 

 

100

332

Апрель 1991 г.

7

Квадратичное решето

110

365

Апрель 1992 г.

75

Квадратичное решето

120

398

Июнь 1993 г.

830

Квадратичное решето

129

428

Апрель 1994 г.

5000

Квадратичное решето

130

431

Апрель 1996 г.

500

Решето в поле чисел

 

 

 

 

общего вида

 

 

 

 

 

91

Из табл. 8.1 вытекает удивительный факт, касающийся важности используемого метода. Вплоть до недавнего времени для разложения на множители применялся подход, известный под названием метода квадратичного решета. Для криптоанализа RSA-130 использовался новый алгоритм, называемый методом решета в поле чисел общего вида, что позволило сократить объем вычислительных усилий почти на 10% по сравнению с теми, что требовались ранее для анализа RSA-129.

Puc. 8.5. MIPS-годы, требуемые для разложения на множители.

Угроза ключам большой длины здесь двойная: непрерывный рост вычислительной мощи современных компьютеров и непрерывное усовершенствование алгоритмов разложения на множители. Как видите, применение совершенно нового алгоритма привело к существенному сокращению времени на решение задачи. Можно ожидать дальнейшего усовершенствования метода решета в поле обобщенных чисел, не исключается также возможность появления новых, еще более совершенных алгоритмов. Например, имеющийся уже сегодня родственный алгоритм, использующий метод решета в поле чисел специального вида, позволяет раскладывать на множители числа специального вида значительно быстрее, чем метод решета в поле чисел общего вида. На рис. 8.5 представлены результаты сравнения этих двух алгоритмов. Логично ожидать появления результатов, которые дадут возможность увеличить скорость выполнения разложения на множители в общем случае до показателей, которые будут равны или даже выше показателей метода решета в поле

92

чисел специального вида. Поэтому приходится быть весьма осторожным в выборе длины ключа для RSA. В перспективе недалекого будущего кажется разумным выбор длины ключа в диапазоне от 1024 до 2048 битов.

В дополнение к проблеме выбора размера n исследователями был обнаружен ряд других ограничений. Чтобы избежать выбора значений n, которые могут быть разложены на множители с меньшими усилиями, изобретатели алгоритма предлагают следующие ограничения относительно p и q.

1.Значения p и q должны различаться по длине всего на несколько разрядов. Например, и p, и q должны попадать в диапазон от 1075 до 10100.

2.Как (p−1), так и (q−1) должны содержать в своих разложениях достаточно большой простой множитель.

3.gcd(p − 1, q − 1) должен быть достаточно малым.

Кроме того, было показано, что если e < n и d < n1/4, то d можно определить достаточно легко.

8.4.2 Анализ временных затрат

Если кому-то требуются другие доказательства того, что защита криптографического алгоритма оказывается непростой задачей, то для этого как нельзя лучше подойдет описание метода анализа временных затрат. Как убедительно продемонстрировал специалистконсультант по криптографии Пол Кочер (Paul Kocher), противник получает возможность определить личный ключ, анализируя затраты времени, которые требуются компьютеру для расшифровки сообщений. Анализ временных затрат можно использовать не только в случае RSA, но и с другими системами шифрования с открытым ключом. Атаки такого рода оказываются опасными по двум причинам: они могут вестись с самых неожиданных направлений и предусматривать анализ только шифрованного текста.

Анализ временных затрат отчасти аналогичен подходу взломщика, отгадывающего комбинацию замка сейфа, наблюдая за тем, сколько времени требуется владельцу для того, чтобы повернуть устройство замка от цифры к цифре. Можно было бы объяснить суть этого подхода на примере алгоритма возведения в степень в арифметике классов вычетов, представленного на рис. 8.3, но данный подход можно адаптировать к любой реализации, которая не предполагает выполнения алгоритма за фиксированное время. В рассматриваемом здесь алгоритме возведение в степень выполняется бит за битом, с одним умножением на каждой итерации и дополнительным умножением, выполняемым для каждого бита, равного 1.

Как отмечает Кочер в своей работе, проще всего понять суть предлагаемого подхода на примере, соответствующем экстремальному случаю. Предположим, что система шифрования использует функцию умножения в классах вычетов, которая выполняется очень быстро почти во всех случаях, кроме небольшого их числа, когда умножение занимает значительно больше времени. Анализ проводится бит за битом, начиная с первого слева бита bk. Предположим, что первые j битов уже известны. (Чтобы получить значение показателя степени, следует начать с j = 0 и повторять процедуру анализа до тех пор, пока не станут известными все биты показателя.) Для имеющегося шифрованного текста противник может выполнить первые j итераций цикла for. На следующем этапе выполнение операции

93

Соседние файлы в папке Реферат