- •Постановка задачи
- •Обзор современного состояния темы
- •Выбор алгоритмов и атак
- •Критерии выбора алгоритмов
- •Выбор симметричных алгоритмов шифрования
- •Выбор алгоритмов шифрования с открытым ключом
- •Выбор алгоритмов цифровой подписи
- •Выбор криптографических атак
- •Описание использованных криптографических алгоритмов
- •Симметричные алгоритмы шифрования
- •Алгоритм гост
- •Асимметричные алгоритмы шифрования
- •Алгоритмы цифровой подписи
- •Алгоритм гост
- •Описание использованных атак
- •Атака на общий модуль против алгоритмаRsa
- •Атака на выбранный шифртекст против алгоритмаRsa
- •Атака против алгоритмаDsa
- •Особенности реализации алгоритмов
- •Управление ключами
- •Генерация ключей
- •Хранение ключей
- •Длина ключа
- •Особенности реализации асимметричных алгоритмов
- •Модульная арифметика
- •Представление многозначных чисел
- •Сложение многозначных чисел
- •Умножение многозначных чисел
- •Деление многозначных чисел
- •Особенности реализации симметричных алгоритмов
- •Дополнение сообщений
- •Подключи и таблицы подстановки для алгоритмаBlowfish
- •Режим использования блочных шифров
- •Проектирование интерфейса
- •Сценарии использования программы
- •Пошаговое выполнение симметричных алгоритмов
- •Пошаговое выполнение асимметричных шифров
- •Пошаговое выполнение алгоритмов цифровой подписи
- •Демонстрация работы атак
- •Оценка скорости работы алгоритма
- •Структура диалога
- •Архитектура программы
- •Использование объектов-функций
- •Использование потоков
- •Использование генераторов ключей
- •Структура модулей
- •Заключение
- •Список литературы
Алгоритмы цифровой подписи
RSA
Описание алгоритма взято из [2].
Открытый и секретный ключи те же, что и при шифровании RSA. Перед подписью сообщения или его дайджеста, его надо разбить на блоки, каждый из которых надо представить в виде числа, меньшего чемn. Получение подписи числаm:
s=mdmodn.
Процедура проверки подписи s, соответствующей сообщениюm:
m’ =semodn.
Если m’=m, то сообщениеmпризнается подписанным пользователем, который предоставил ранее открытый ключe.
DSA
Описание алгоритма взято из [6].
Открытый ключ:
p– простое число, которое может быть общим для группы пользователей
q– простое число, которое делитp-1 и может быть общим для группы пользователей
g=h(p-1)/qmodp, гдеh<p-1 иh(p-1)/qmodp>1.gможет быть общим для группы пользователей
y=gxmodp
Закрытый ключ:
x<q
Алгоритм генерации подписи:
выбрать случайным образом число k:k<q
подписью сообщения Mбудет пара чисел:
r= (gk mod p) mod q
s= (k-1(H(m)+xr))modq
где H(m) – результат применения хеш-функции к сообщениюm
Алгоритм проверки подписи:
w=s-1 mod q
u1=(H(m)*w) mod q
u2=(rw) mod q
v=((gu1*yu2) mod p) mod q
если v=r, то сообщениеmпризнается подписанным пользователем, который предоставил ранее открытый ключy
В стандарте цифровой подписи DSS[6] определено, что длина числаpдолжна составлять от 512 бит до 1024 бит, длина числаq– 160 бит. Эти требования связаны с тем, что при таких длинах достигается достаточная вычислительная стойкость. Но алгоритм цифровой подписи будет работать, даже если используются числаpиqдругой длины.
Стандарт DSSопределяет, что в качестве хеш-функции надо использоватьSHA.
Схема подписи Эль-Гамаля
Описание алгоритма взято из [2]. Открытые и секретные ключи те же, что и в схеме шифрования Эль-Гамаля. Перед формирование подписи надо представить сообщение в виде числа, меньшего чем p. Если сообщение слишком большое, то надо либо разбить его на части, либо, что гораздо эффективнее, подписывать дайджест сообщения.
Алгоритм формирования подписи числа m:
Выбрать k– случайное число, взаимно простое сp-1.
Вычислить числа aиb, которые и будут подписью:
a = gk mod p
b – такое что m=(xa + kb) mod (p-1).
Проверка подписи:
Если yaabmodp=gmmodp, то признается что сообщениеmподписано пользователем, который предоставил открытый ключy.
Алгоритм гост
Это российский стандарт цифровой подписи ГОСТ 34.10-94 [5].
Открытый ключ:
p– простое число
q– простое число, которое делитp-1
a– число меньшее, чемp-1, такое чтоaqmodp=1
y=axmodp
Секретный ключ:
x– число, меньшее чемq
Алгоритм генерации подписи:
выбрать случайным образом число k:k<q
подписью сообщения mбудет пара чисел:
r=(ak mod p) mod q
s=(xr+k*H(m))modq
Алгоритм проверки подписи:
v=H(m)q-2 mod q
z1=(sv) mod q
z2=((q-r)*v) mod q
u=((az1*yz2)mod p) mod q
если u=r, то признается что сообщениеmподписано пользователем, который предоставил открытый ключy.
В стандарте определено, что длина числа pдолжна составлять от 509 до 512 бит или от 1020 до 1024 бит, длина числаq– от 254 до 256 бит. Эти требования связаны с тем, что при таких длинах достигается достаточная вычислительная стойкость. Но алгоритм цифровой подписи будет работать, даже если используются числаpиqдругой длины.
Хеш-функцияSHA
Для использования в криптографических приложениях любая хеш-функция h=H(M) должна удовлетворять следующим требованиям [3]:
Для заданного сообщения Mлегко вычислитьH(M).
Для заданного hвычислительно трудно найтиM, такое чтоH(M)=h.
Для заданного Mвычислительно трудно найти другое сообщениеM1, такое чтоH(M)=H(M1).
Вычислительно трудно найти два случайных сообщения MиM1, таких чтоH(M)=H(M1).
В SHA-1 [7] используются функцииf(t,B,C,D), где 0t79;B,CиD– 32-битовые слова.
f(t,B,C,D) = (BC)((B)D) при 0t19
f(t,B,C,D) =BCDпри 20t39
f(t,B,C,D) = (BC)(BD)(CD) при 40t59
f(t,B,C,D) =BCDпри 60t79
При этом используются логические побитовые операции.
Используется также набор констант:
Kt= 5A827999 при 0t19
Kt= 6ED9EBA1 при 20t39
Kt= 8F1BBCDCпри 40t59
Kt=CA62C1D6 при 40t79
Алгоритм вычисления хеш-функции SHA-1
Вход: сообщение длиной <264бит.
Дополнить сообщение: добавить в конец сообщения 1, затем 0 или более нулей, а затем 64-битовое представление длины сообщения до дополнения. Количество добавленных нулевых битов должно быть таким, чтобы длина дополненного сообщения в битах была кратна 512. Дополненное сообщение состоит из блоков M1,M2, … ,Mn, длиной по 512 бит.
Инициализировать переменные
H0 := 67452301, H1 := EFCDAB89, H2 := 98BADCFE,
H3 := 10325476, H4:= C3D2E1F0
i := 1
Разделить блок Miна 16 32-битовых словw0,w1, …,w15.
Для всех t: 16t79wt:= (wt-3wt-8wt-14wt-16)1, где «n» - циклический сдвиг влево наnбит.
A := H0, B := H1, C := H2, D := H3, E := H4.
Для всех tот 0 до 79
TEMP := (A 5 + f(t, B, C, D) + E + wt + Kt) mod 232;
E := D; D := C; C := B 30; B := A; A := TEMP.
H0 := H0 + A, H1 := H1+B, H2 := H2 + C, H3 := H3 + D, H4 := H4 + E,
где все сложения производятся по модулю 232.
Если i<n, тоi:=i+1 и перейти к шагу 4.
Выход: дайджест длиной 160 бит – конкатенация 32-битовых слов H0 |H1 |H2 |H3 |H4.