Электронная цифровая подпись


2. Однонаправленные хэш-функции

Хэш-функция предназначена для сжатия подписываемого документа М до нескольких десятков или сотен бит. Хэш-функция h(•) принимает в качестве аргумента сообщение (документ) М произвольной длины и возвращает хэш-значение h(М)=Н фиксированной длины. Обычно хэшированная информация является сжатым двоичным представлением основного сообщения произвольной длины. Следует отметить, что значение хэш-функции h(М) сложным образом зависит от документа М и не позволяет восстановить сам документ М.

Хэш-функция должна удовлетворять целому ряду условий:

Большинство хэш-функций строится на основе однонаправленной функции f(•), которая образует выходное значение длиной n при задании двух входных значений длиной п. Этими входами являются блок исходного текста М, и хэш-значение Ні-1 предыдущего блока текста (рис.1):

Ні = f(Мi, Нi-1).

Хэш-значение, вычисляемое при вводе последнего блока текста, становится хэш-значением всего сообщения М.

Рис.1. Построение однонаправленной хэш-функции

В результате однонаправленная хэш-функция всегда формирует выход фиксированной длины n (независимо от длины входного текста).

Алгоритм безопасного хэширования SНА

Алгоритм безопасного хэширования SНА (Secure Hash Algorithm) разработан НИСТ и АНБ США в рамках стандарта безопасного хэширования SHS (Secure Hash Standard) в 1992 г. Алгоритм хэширования SНА предназначен для использования совместно с алгоритмом цифровой подписи DSА.

При вводе сообщения М произвольной длины менее 264 бит алгоритм SНА вырабатывает 160-битовое выходное сообщение, называемое дайджестом сообщения МD (Message Digest). Затем этот дайджест сообщения используется в качестве входа алгоритма DSА, который вычисляет цифровую подпись сообщения М. Формирование цифровой подписи для дайджеста сообщения, а не для самого сообщения повышает эффективность процесса подписания, поскольку дайджест сообщения обычно намного короче самого сообщения.

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

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

Рассмотрим подробнее работу алгоритма хэширования SНА. Прежде всего исходное сообщение М дополняют так, чтобы оно стало кратным 512 битам. Дополнительная набивка сообщения выполняется следующим образом: сначала добавляется единица, затем следуют столько нулей, сколько необходимо для получения сообщения, которое на 64 бита короче, чем кратное 512, и наконец добавляют 64-битовое представление длины исходного сообщения.

Инициализируется пять 32-битовых переменных в виде:

А = 0 х 6 7 4 5 2 3 0 1

В = 0 х Е F С D А В 8 9

С = 0 х 9 8 В А D С F Е

D = 0 x 1 0 3 2 5 4 7 6

Е = 0 х С 3 D 2 Е 1 F 0

Затем начинается главный цикл алгоритма. В нем обрабатывается по 512 бит сообіцения поочередно для всех 512-битовых блоков, имеющихся в сообщении. Первые пять переменных А, В, С, D, Е копируются в другие переменные a, b, с, d, е:

а=А, b=В, с=С, d=D, е=Е.

Главный цикл содержит четыре цикла по 20 операций каждый. Каждая операция реализует нелинейную функцию от трех из пяти переменных а, b, с, d, е, а затем производит сдвиг и сложение.

Алгоритм SНА имеет следующий набор нелинейных функций:

ft (Х, Y, Z) = (X Ù Y) Ú ((ØX) Ù Z) для t = 0...19,

ft (Х, Y, Z) =Х Å Y Å Z для t =20...39,

ft (Х, Y, Z) = (X Ù Y) Ú (X Ù Z) Ú (Y Ù Z) для t = 40...59,

ft (Х, Y, Z) = Х Å Y Å Z для t = 60...79,

где t - номер операции.

В алгоритме используются также четыре константы:

Кt = 0х5А827999 для t = 0...19,

Кt = 0х6ЕD9ЕВА1 для t = 20...39,

Кt = 0х8F1ВВСDС для t = 40...59,

Кt = 0хСА62С1D6 для t = 60...79.

Блок сообщения преобразуется из шестнадцати 32-битовых слов (М0...М15) в восемьдесят 32-битовых слов (W0...W79) с помощью следующего алгоритма:

Wt = Мt для t = 0...15,

Wt = (Wt-3 Å Wt-8 Å Wt-14 Å Wt-16) <<< 1 для t = 16...79,

где t - номер операции (для t = 1...80),

Wt - t-й субблок расширенного сообщения,

<<< S - циклический сдвиг влево на S бит.

С учетом введенных обозначений главный цикл из восьмидесяти операций можно описать так:

FOR t = 0 до 79

ТЕМР = (а <<< 5) + ft (b, c, d) + е + Wt + Кt

е = d

d = с

с = (b <<< 30)

b = а

а = ТЕМР

Схема выполнения одной операции показана на рис.2.

После окончания главного цикла значения а, b, с, d и е складываются с А, В, С, D и Е соответственно, и алгоритм приступает к обработке следующего 512-битового блока данных. Окончательный выход формируется в виде конкатенации значений А, В, С, D и Е.

Рис.2. Схема выполнения одной операции алгоритма SHA

Поскольку алгоритм SНА выдает 160-битовое хэш-значение, он более устойчив к атакам полного перебора и атакам "дня рождения", чем большинство других алгоритмов хэширования, формирующих 128-битовые хэш-значения.

Однонаправленные хэш-функции на основе симметричных блочных алгоритмов

Однонаправленную хэш-функцию можно построить, используя симметричный блочный алгоритм. Наиболее очевидный подход состоит в том, чтобы шифровать сообщение М посредством блочного алгоритма в режиме СВС или СFВ с помощью фиксированного ключа и некоторого вектора инициализации IV. Последний блок шифртекста можно рассматривать в качестве хэш-значения сообщения М. При таком подходе не всегда возможно построить безопасную однонаправленную хэш-функцию, но всегда можно получить код аутентификации сообoения МАС (Message Authentication Code).

Более безопасный вариант хэш-функции можно получить, используя блок сообщения в качестве ключа, предыдущее хэш-значение - в качестве входа, а текущее хэш-значение - в качестве выхода. Реальные хэш-функции проектируются еще более сложными. Длина блока обычно определяется длиной ключа, а длина хэш-значения совпадает сдлиной блока.

Рис.3. Обобщённая схема формирования хэш-функции

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

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

Н0 = Ін, Нi = ЕA(В) Å С,

где Ін - некоторое случайное начальное значение; А, В и С могут принимать значения Мі, Ні-1, (Мi Å Ні-1) или быть константами.

Таблица 1 Схемы безопасного хэширования, у которых длина хэш-значения равна длине блока

Номер схемы Функция хэширования
1 Нi = ЕHi-1 i) Å Мi
2 Нi = ЕHi-1i A Нi-1) Å Мi Å Нi-1
3 Нi = EHi-1i) Å Нi-1 Å Мi
4 Нi = ЕHi-1i Å Нi-1) Å Мi
5 Нi = ЕMii-1) Å Нi-1
6 Нi = ЕMiі A Нi-1) Мi A Нi-1
7 Нi = ЕMii-1) Мi Å Нi-1
8 Нi = EMi i Å Нi-1) Å Нi-1
9 Нi = ЕMiÅHi-1і) Å Мi
10 Нi = ЕMiÅHi-1i-1) Å Нi-1
11 Ні = ЕMiÅHi-1 (Mi) Å Ні-і
12 Нi = ЕMiÅHi-1i-1) Å Мi

Сообщение М разбивается на блоки Мi принятой длины, которые обрабатываются поочередно.

Три различные переменные А, В и С могут принимать одно из четырех возможных значений, поэтому в принципе можно получить 64 варианта общей схемы этого типа. Из них 52 варианта являются либо тривиально слабыми, либо небезопасными. Остальные 12 безопасных схем хэширования перечислены в табл.1.

Первые четыре схемы хэширования, являющиеся безопасными при всех атаках, приведены на рис.4.

Рис.4. Четыре схемы безопасного хэширования

Отечественный стандарт хэш-функции

Российский стандарт ГОСТ Р 34.11-94 определяет алгоритм и процедуру вычисления хэш-функции для любых последовательностей двоичных символов, применяемых в криптографических методах обработки и защиты информации. Этот стандарт базируется на блочном алгоритме шифрования ГОСТ 28147-89, хотя в принципе можно было бы использовать и другои блочный алгоритм шифрования с 64-битовым блоком и 256-битовым ключом.

Данная хэш-функция формирует 256-битовое хэш-значение.

Функция сжатия Ні = f (Мi, Нi-1) (оба операнда Мі и Ні-1 являются 256-битовыми величинами) определяется следующим образом:

1. Генерируются 4 ключа шифрования Кj, j = 1...4, путем линейного смешивания Мі, Ні-1 и некоторых констант Сj.

2. Каждый ключ Кj, используют для шифрования 64-битовых подслов hі слова Нi-1 в режиме простой замены: Si = EKj(hj).

Результирующая последовательность S4, S3, S2, S1 длиной 256 бит запоминается во временной переменной S.

3. Значение Ні является сложной, хотя и линейной функцией смешивания S, Мi, и Нi-1.

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

Нn - хэш-значение последнего блока сообщения;

Z - значение контрольной суммы, получаемой при сложении по модулю 2 всех блоков сообщения;

L - длина сообщения.

Эти три переменные и дополненный последний блок М' сообщения объединяются в окончательное хэш-значение следующим образом:

Н = f (Z Å М', f (L, f(М', Нn))).

Данная хэш-функция определена стандартом ГОСТ Р 34.11-94 для использования совместно с российским стандартом электронной цифровой подписи.


[Предыдущий раздел][Содержание][Следующий раздел]

Hosted by uCoz