Долгое время самым популярным алгоритмом симметричного шифрования являлся DES (Data Encrypting Standart), принятый в 1977 году. Этот алгоритм базируется на структуре шифра Файстеля с размером блока 64 бита и 56-битным ключом. Функция раунда F использует набор из восьми так называемых S-матриц. Каждая матрица состоит из 4 строк, причем каждая строка представляет собой перестановку чисел от 0 до 15 (16 столбцов). Матрицы жестко заданы. Каждая матрица получает на вход шесть бит и выдает четырехбитовый результат. Первый и последний бит входного значения задают строку матрицы, а четыре остальных – столбец. Двоичное представление числа, находящегося на их пересечении, и будет результатом преобразования. Преобразование F заключается в следующем:
1. 32-битовый блок Ri расширяется до 48 битов с помощью специальной таблицы путем дублирования некоторых 16 битов.
2. Полученный результат складывается с 48-битным подключом Kiоперацией XOR.
3. Результат сложения разбивается на 8 шестибитовых блоков и каждый из них преобразуется с помощью соответствующей S-матрицы.
4. Получившийся в итоге 32-битный блок подвергается жестко заданной в алгоритме перестановке.
Долгое время DES являлся федеральным стандартом шифрования США. Этот алгоритм показывает хороший лавинный эффект (изменение одного бита открытого текста или ключа приводит к изменению многих битов зашифрованного текста) и успешно противостоял многолетним попыткам взлома. Однако длина ключа в 56 битов при возросшей производительности ЭВМ сделала шифр потенциально уязвимым к перебору ключей, поэтому в 1997 году был объявлен конкурс на новый алгоритм.
Победитель конкурса был определен в 2000 году – им стал бельгийский шифр RIJNDAEL, который был переименован в AES (Advanced Encryption Standard). Он является нетрадиционным блочным шифром, поскольку не использует сеть Фейштеля. Каждый блок входных данных представляется в виде двумерного массива байт (4х4, 4х6 или 4х8 в зависимости от размера блока, которая может варьироваться). В зависимости от размера блока и длины ключа алгоритм содержит от 10 до 14 раундов, в каждом из которых проводится ряд преобразований – либо над независимыми столбцами, либо над независимыми строками, либо над отдельными байтами в таблице.
Среди других современных алгоритмов симметричного шифрования шифры IDEA, Blowfish, RC5, CAST-128.
Отечественный стандарт цифровой подписи (ГОСТ Р 34.10–94) вступил в силу в 1995 г. Алгоритм цифровой подписи, определяемый этим стандартом, концептуально близок американскому алгоритму DSA (Digital Signature Algorithm), который был предложен в 1991 г. Национальным институтом стандартов и технологий США для использования в стандарте цифровой подписи DSS (Digital Signature Standard). Алгоритм DSA является развитием алгоритмов цифровой подписи Эль Гамаля и К. Шнорра.
В российском стандарте цифровой подписи используются следующие параметры:
p – большое простое число длиной от 509 до 512 бит либо от 1020 до 1024 бит;
q – простой сомножитель числа (p −1), имеющий длину 254 … 256 бит;
α – любое целое число, меньшее (p −1), причем такое, что αqmod p=1;
δ – некоторое целое число, меньшее q;
β =αδ mod p.
Кроме того, этот алгоритм использует однонаправленную хэш-функцию H(⋅). Соответствующий российский стандарт ГОСТ Р 34.11–94 определяет хэш-функцию, основанную на использовании стандартного симметричного алгоритма ГОСТ 28147–89.
Первые три параметра p, q, α являются открытыми и могут быть общими для всех пользователей компьютерной сети. Число δ является секретным ключом, а число β – открытым ключом.
Чтобы подписать некоторое сообщение М, а затем проверить подпись, выполняются следующие шаги.
1. Абонент А генерирует случайное число r, причем r <q.
2. Абонент А вычисляет значения
k = (αrmod p)mod q,
s = (δ ⋅ k + r ⋅ (H(M)))mod q.
Если (H(M))mod q = 0, то значение (H(M))mod q принимают равным единице. Если k =0, то выбирают другое значение r, и алгоритм начинают снова.
Цифровая подпись представляет собой два числа:
rmod 2256 и smod 2256 .
Абонент А отправляет эти числа, а также открытый текст M абоненту Б.
3. Абонент Б проверяет полученную подпись, вычисляя
v=(H(M))q−2 mod q,
z1=(s ⋅ v)mod q,
z2=((q−k)⋅ v)mod q,
u =((αz1 ⋅βz2 )mod p)mod q.
Если u = r , то подпись считается подлинной.
Различие между этим алгоритмом и алгоритмом DSA заключается в том, что в DSA
s = (r−1(δ ⋅ k + (H(M))))mod q ,
что приводит к другому уравнению проверки подлинности цифровой подписи.
В американском стандарте цифровой подписи параметр q имеет длину 160 бит, в отечественном – 256 бит, что обеспечивает более безопасную подпись.
В 2001 г. в России принят еще один стандарт цифровой подписи – ГОСТ Р 34.10–2001, который базируется на математическом аппарате эллиптических кривых, использует хэш-функцию длиной 256 бит и обладает более высокой криптостойкостью, чем предыдущий стандартный алгоритм цифровой подписи ГОСТ Р 34.11–94.
В США с 2001 г. начал действовать новый стандарт на симметричные блочные криптосистемы – AES (Advanced Encryption Standard), заменивший DES. Алгоритм допускает размеры ключей в 128, 192 и 256 бит.