Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Криптография / ОБУЧАЮЩИЕ ПРОГРАММЫ / Пояснительная записка.doc
Скачиваний:
39
Добавлен:
01.05.2014
Размер:
411.65 Кб
Скачать
  1. Описание использованных атак

    1. Атака на общий модуль против алгоритмаRsa

Предположим, что генерация ключей для группы пользователей происходит следующим образом: всем пользователям дается одно значение n, но разные значенияeиd. ПользовательA хочет послать одно и то же сообщение,m, двум различным пользователям с открытыми ключами (n,e1) и (n,e2). Зашифрованными текстами будут:

c1 =me1modn,

c2=me2modn.

Противник узнал c1иc2, и хочет узнатьm. Чтобы он смог это сделать надо, чтобыe1иe2были взаимно простыми, а чаще всего так и оказывается. Поэтому будем считать, что НОД(e1,e2) = 1. Следовательно, существуют числаrиs, такие чтоr*e1+s*e2=1. Для вычисленияrиsможно воспользоваться расширенным алгоритмом Евклида.

Числа rиsимеют разные знаки. Предположим, чтоrотрицательно. Тогда противник может вычислить (c1-1)-r*c2s=mmodn, т.е. получить открытый текст.

Описание атаки взято из [3].

    1. Атака на выбранный шифртекст против алгоритмаRsa

Пользователю A направлено сообщениеm, зашифрованное его открытым ключом,e. ПротивникE смог получить соответствующий зашифрованный текст,c.Е хочет узнать открытый текст, т.е. получитьm=cdmodn, но он не знает секретного ключаd. ПоэтомуEдействует следующим образом:

  1. Eвыбирает случайным образом числоr:r<n.

  2. Имея открытый ключ A - e, Eвычисляет

x = re mod n

y = xc mod n

t = r-1 mod n.

  1. E добивается, чтобыA подписалyс помощью алгоритмаRSA, т.е. расшифровалy, а затем послал ему результатu=ydmodn.A должен подписать само сообщение, а не его дайджест. Сообщениеyскорее всего будет выглядеть случайным, а на практике иногда приходится подписывать случайные сообщения.

  2. E вычисляет

tu mod n = r-1 yd mod n = r-1 xd cd mod n = cd mod n = m,

т.е. получает открытый текст.

Описание атаки взято из [3].

    1. Атака против алгоритмаDsa

Для каждой новой подписи с помощью DSAтребуется генерировать новое значениеk, а после создания подписи немедленно уничтожать. Если эти требования не выполняются, то противник может вычислить секретный ключ создателя подписи.

Первый сценарий атаки

Противник узнал значение k, которое использовалось при создании подписи. Конкретный способ, который использовал для этого противник, неважен. Возможно, это значениеkне было уничтожено, или противник использовал какие-либо свойства генератора случайных чисел, который сгенерировалk.

Противник знает:

r= (gkmodp)modq,

s = (k-1 (H(m) + xr)) mod q,

k, m.

Противник вычисляет:

s - k-1*H(m) = k-1rx mod q

т.к. q– простое, то можно найти (k-1*r)-1modq, откуда

x = (s – k-1*H(m))* (k-1*r)-1 mod q.

Второй сценарий атаки

Противник не знает значения k, но он получил две подписи, при создании которых использовалось одно и то же значениеk.

Противник знает:

r= (gkmodp)modq,

s1 = (k-1 (H(m1) + xr)) mod q,

s2 = (k-1 (H(m2) + xr)) mod q,

m1,m2.

Противник производит следующие действия.

  1. s1 – s2 = k-1 (H(m1) – H(m2)) mod q (1)

  2. из уравнения (1) вычисляет k-1modq

  3. зная k-1modq, вычисляетk

  4. когда kизвестно, можно произвести те же вычисления, что и в первом сценарии

  1. Особенности реализации алгоритмов

    1. Управление ключами

      1. Генерация ключей

В данной программе ключи для асимметричных алгоритмов не вводятся пользователем, а генерируются случайным образом. Это объясняется тем, что на ключ часто накладываются специальные условия. Например, в алгоритме RSAчислоnдолжно быть произведением двух больших простых чисел. Поэтому пользователю надо только ввести длину ключа в битах.

Алгоритм генерации простых чисел [3]

Вход: длина числа в битах n.

  1. Сгенерировать случайным образом число pдлинойnбит.

  2. Установить младший бит числа равным 1, т.е. сделать его нечетным.

  3. Последовательно вычислять остаток от деления pна все простые числа от 3 до 1471. Еслиpделится хотя бы на одно из этих чисел, то прервать вычисление остатков, увеличитьpна 2 и повторить шаг 3.

  4. Произвести тест Рабина-Миллера 5 раз. Если pпрошло все тесты, то закончить работу алгоритма, иначе увеличитьpна 2 и перейти к шагу 3.

Выход: число p, которое является простым с вероятностью близкой к 1.

Основная идея данного алгоритма заключается в том, что совсем не обязательно производить разложение числа на множители, для того чтобы убедиться в том, что оно составное. Согласно малой теореме Ферма, если число Nпростое, то для любого целогоa, не делящегося наNвыполняется сравнение

aN-1 1 (modN).

Если же при каком-то aэто сравнение нарушается, можно утверждать, чтоN– составное. Миллер предложил проверять несколько иное условие. ЕслиN– простое число,N-1=2st, гдеtнечетно, то согласно малой теореме Ферма для каждогоaс условием (a,N)=1 хотя бы одна из скобок в произведении

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

Для простого числа Nне существует чиселa, 1<a<N, для которых нарушается одно из двух условий:

  1. Nне делится наa;

  2. at1 (modN) или существует целоеk, 0k<s, такое, что

Если же Nсоставное число, то, как доказал Рабин, их существует не менее.

Алгоритм Рабина-Миллера, доказывающий, что число не является простым [1]:

  1. Выбрать случайным образом число a, 1<a<N, и проверить для этого числа указанные выше условия.

  2. Если хотя бы одно из них нарушается, то число Nсоставное.

Составное число не будет определено как составное после однократного применения теста Рабина-Миллера с вероятностью не большей 4-1. А вероятность не определить его послеkповторений не превосходит 4-k, т.е. убывает очень быстро.

В данной программе тест Рабина-Миллера применялся 5 раз, т.е. вероятность взять вместо простого числа составное не превосходит 4-5. Сама по себе эта величина не так уж мала. Но 4-k- это самая пессимистичная оценка. Практика показывает, что для большинства составныхNтаких чисел не, а примерно[3].

При разработке программы было выяснено, что проведение теста Рабина-Миллера является довольно длительной операцией, поэтому сначала надо попытаться разделить Nна маленькие простые числа. При этом отсеивается большинство составныхN. Было выяснено, что увеличение скорости генерации простых чисел имеет место при делении на все простые числа до 1500.

В алгоритме DSAтребуется два простых числа,pиq, причемqделитp-1. В этом случае сначала генерируетсяq, затем начинается поискp:

  1. p := q*q+1

  2. Пока pявляется составным, увеличиватьpнаq.

Эта процедура конечна, т.к. доказано, что в арифметической прогрессии

a,a+q,a+ 2q,…,

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

В алгоритме цифровой подписи ГОСТ требуется получить число a, такое чтоaqmodp= 1. Для этого выбирается случайное числоt, и. При этом требуемое условие выполняется, т.к.tp-1modp=1 по малой теореме Ферма.