Математические основы криптологии.-2
.pdf372
друг от друга. Схемы алгоритмов зашифрования и расшифрования в режиме простой замены приведены на рисунках 3.10а и 3.10б соответственно.
|
Начало (То) |
|
|
Начало (Тш) |
||
i = 1 .. n |
|
i = 1 .. n |
||||
|
|
|
|
|
|
|
|
Т iш = Ц32-З(Тiо ) |
|
|
Тiо = Ц32-Р(Тiш ) |
||
|
|
|
|
|
|
|
|
Конец (Тш) |
|
|
Конец (То) |
||
|
а) |
|
|
б) |
Рис. 3.10. Алгоритмы зашифрования (а) и расшифрования (б)
данных в режиме простой замены На рисунке 3.10 используются следующие обозначения:
Tо, Tш – массивы соответственно открытых и зашифрованных данных;
Ti о , Ti ш – i-тые по порядку 64-битные блоки соответственно открытых и
зашифрованных данных: Tо = (Tnо , …, T2о , T1о ), Tш = (Tnш , …, T2ш , T1ш ), 1i n;
n – число 64-битных блоков в массиве данных.
Размер массива открытых или зашифрованных данных, подвергающийся соответственно зашифрованию или расшифрованию, должен быть кратен 64 битам: |Tо|=|Tш|=64∙n, после выполнения операции размер полученного массива данных не изменяется.
Перемешивающее преобразование
Перемешивающее преобразование имеет вид hi = (mi, hi–1, si) = 61 (hi–1 (mi 12 (si))),
где j – j-я степень преобразования .
Схематически данное преобразование представлено на рисунке 1.10.
mi
si 12
hi–1 |
61 |
hi |
Рис. 3.11. Перемешивающее преобразование ГОСТ Р 34.11-94
373
Заметим, что si выводится из hi−1 (см. рисунок 1.4).
Функция : {01}256 → {01}256 преобразует слово 16 || 15 || … || 1 {01}16, i =1…16 в
слово 1 2 3 4 13 16 || 16 || 15 || … || 2 (рисунок 1.11).
16 |
15 |
4 |
3 |
2 |
1 |
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
13 |
|
|
|
Рис. 3.12. Функция ψ перемешивающего преобразования
Функция сжатия финальной итерации
Функция сжатия финальной итерации производит итоговую хэш величину, зависящую от
результата хэширования последовательным методом, контрольной суммы по mod 2 и длины сообщения в битах приведенной по mod 2256:
ml/ hl−1 l Ll → hитог,
где ml/ , hl−1, l, Ll {01}256, ml/ – последний набитый нулями блок (если необходимо, см.
рисунок 1.2).
Сначала вычисляется битовая длина последнего (ненабитого) блока сообщения |ml|≤256
бит. Если |ml|<256, то производится его набивка справа нулями до достижения длины 256 бит и получается новый блок ml/ ← {0}256–|ml| || ml. Вычисляются итоговая контрольная сумма l
← l–1 ml/ и длина всего сообщения Ll ← Ll–1 + |ml| (mod 2256). Параллельно выполняется последняя итерация hl = H* (m/, hl–1). Затем вычисляются значения hl+1 ← H* (l, hl) и hитог ← H* (Ll, hl+1), давая в результате итоговую хэш величину hитог.
Теперь дадим формальное описание алгоритма:
Вход: двоичное сообщение M, блоки замен для шифрования в режиме простой замены по ГОСТ 28147-89, начальный вектор IV {01}256.
Выход: хэш величина hитог для сообщения M.
1.Инициализация алгоритма: h ← IV, ← {0}256, L ← {0}256.
374
2.Функция сжатия внутренних итераций: Пока |M| > 256 выполняем следующее:
2.1.h ← H* (ms, h) (итерация метода последовательного хэширования);
2.2.L ← L + 256 (mod 2256) (итерация вычисления длины сообщения);
2.3.← ms (итерация вычисления контрольной суммы).
3.Иначе (функция сжатия финальной итерации)
3.1.L ← L + |m| (mod 2256) (вычисление полной длины сообщения);
3.2.m/ ← {0}256–|m| || m (набивка последнего блока);
3.3.← m/ (вычисление контрольной суммы сообщения);
3.4.h ← H* (m/, h);
3.5.h ← H* ( , h);
3.6.hитог ← H* (L, h).
4.Выход (hитог).
Российский стандарт ЭЦП ГОСТ Р 34.10-2001
Новый отечественный стандарт цифровой подписи обозначается как ГОСТ Р 34.10-2001.
Внем используются следующие параметры:
простое число p – модуль эллиптической кривой, удовлетворяющее неравенству p>2255. Верхняя граница данного числа должна определяться при конкретной реализации схемы цифровой подписи;
эллиптическая кривая E, задаваемая своим инвариантом J(E) или
коэффициентами a, b Fp;
целое число m – порядок группы точек эллиптической кривой E;
простое число q – порядок циклической подгруппы группы точек эллиптической кривой E, для которого выполнены следующие условия:
m nq, n Z, n 1, |
(38) |
|
2254 |
q 2256; |
|
|
|
|
точка P O эллиптической кривой E, с координатами (xp, yp),
удовлетворяющая равенству qP = O.
хэш-функция, отображающая сообщения, представленные в виде двоичных векторов произвольной конечной длины, в двоичные вектора длины 256
бит. Хэш-функция определена в ГОСТ Р 34.11, ее алгоритм будет рассмотрен ниже.
Каждый пользователь схемы цифровой подписи должен обладать личными ключами:
375
ключом подписи – целым числом d, удовлетворяющим неравенству 0 <
d < q;
ключом проверки – точкой эллиптической кривой Q с координатами (xq,
yq), удовлетворяющей равенству dP = Q.
На приведенные выше параметры схемы цифровой подписи накладываются следующие требования:
должно быть выполнено условие pt 1 (mod q), для всех целых t = 1, 2,
…B, где B удовлетворяет неравенству B 31;
должно быть выполнено неравенство m p;
инвариант кривой должен удовлетворять условию J(E) 0 или 1728.
Для получения цифровой подписи под сообщением M необходимо выполнить
следующие действия (рис. 1.12а):
1.вычислить хэш-значение сообщения M: h = h(M);
2.вычислить целое число , двоичным представлением которого является
вектор h , и определить e (mod q). Если e = 0, то определить e = 1;
3.сгенерировать случайное (псевдослучайное) целое число k, удовлетво-
ряющее неравенству 0 < k < q;
4.вычислить точку эллиптической кривой C = kP и определить r xc (mod
q), где xc - x-координата точки C. Если r = 0, то вернуться к шагу 3;
5.вычислить значение s (rd + ke) (mod q). Если s = 0, то вернуться к шагу
3;
Подпись для сообщения М составит пара чисел (r,s).
Для проверки цифровой подписи под полученным сообщением M необходимо выполнить следующие действия (рис. 1.12б):
1.Если выполнены неравенства 0 < r < q, 0 < s < q, то перейти к следующему шагу. В противном случае подпись неверна;
2.вычислить хэш-значение полученного сообщения М: h = h(M);
3.вычислить целое число , двоичным представлением которого является
вектор h и определить e (mod q). Если e = 0, то определить e = 1;
4.вычислить значение v = e–1 (mod q);
5.вычислить значения z1 sv (mod q), z2 – rv (mod q);
6.вычислить точку эллиптической кривой C = z1P + z2Q и определить R
xc (mod q), где xc – x-координата точки C;
377
Интерфейс учебного программного комплекса DigitSign
На рисунке 3.14 приведен интерфейс главного окна учебного программного комплекса.
Рис. 3.14. Интерфейс главного окна учебного программного комплекса Пункт меню ―Вычисления‖ содержит следующие опции:
Вычисление хэш-функции.
При выборе данной опции открывается окно ―Вычисление хэш-функции‖
(рисунок 3.15), которое позволяет определить хэш-значение произвольного файла при заданных пользователем начальном хэш-векторе и таблице замен. Полученный результат может быть сохранен в файл. Также пользователь получает информацию о времени хэширования сообщения.
Рис. 3.15. Окно ―Вычисление хэш-функции‖
378
Генератор псевдослучайных чисел.
При выборе данной опции открывается окно ―Генератор псевдослучайных чисел‖ (рисунок 3.16).
Рис. 3.16. Окно ―Генератор псевдослучайных чисел‖ Пользователь имеет возможность ввести параметры своего генератора,
произвести вычисления и сохранить полученный результат в файл.
Вычисление открытого ключа.
При выборе данной опции открывается окно ―Вычисление открытого ключа‖
(рисунок 3.17).
Рис. 3.17. Окно ―Вычисление открытого ключа‖
379
Пользователь имеет возможность вычислить открытый ключ для имеющегося у него секретного ключа и параметров схемы ЭЦП.
Формирование ЭЦП.
При выборе данной опции открывается окно ―Формирование ЭЦП‖ (рисунок
3.18).
Рис. 3.18. Окно ―Формирование ЭЦП‖ Пользователь имеет возможность, после ввода всех необходимых для расчетов
параметров, вычислить цифровую подпись и сохранить полученный результат в файл.
Проверка ЭЦП.
При выборе данной опции открывается окно ―Проверка ЭЦП‖ (рисунок 3.19).
380
Рис. 3.19. Окно ―Проверка ЭЦП‖
Пользователь имеет возможность, после ввода всех необходимых для расчетов параметров, проверить подлинность цифровой подписи.
Пункт меню ―Справка‖ содержит следующие опции:
Задание на лабораторную работу.
Данная опция позволяет открыть файл справки, содержащий задание на лабораторную работу.
Справка.
Данная опция позволяет открыть файл справки, содержащий информацию о хэш-функции и цифровых подписях.
О программе.
Пункт меню ―Выход‖ позволяет выйти из программы.