Алгоритм безопасного хэширования SHA (Secure Hash Algorithm) разработан НИСТ и АНБ США в рамках стандарта безопасного хэшиования SHS (Secure Hash Standard) в 1992 г. Он разработан для использования совместно с алгоритмом цифровой подписи DSA.
При вводе сообщения M произвольной длины менее 264 бит алгоритм SHA вырабатывает 160-битовое выходное сообщение, называемое дайджестом сообщения M D (Message Digest). Затем этот дайджест сообщения используется в качестве входа алгоритма DSA, который вычисляет цифровую подпись сообщения M. Формирование цифровой подписи для дайджеста сообщения, а не для самого сообщения повышает эффективность процесса подписания, поскольку дайджест сообщения обычно намного короче самого сообщения. Такой же дайджест сообщения должен вычисляться пользователем, проверяющим полученную подпись, при этом в качестве входа в алгоритм SHA используется полученное сообщение M.
Алгоритм SHA построен на основе конечных автоматов Мили и описан, например, в [9]. Главный цикл алгоритма обрабатывает по 512 бит сообщения поочередно для всех блоков, имеющихся в сообщении. Он содержит четыре цикла по 20 операций каждый. Каждая операция реализует нелинейную функцию, а затем производит сдвиг и сложение.
|
|
Алгоритм хэширования SHA назван безопасным, потому что его создатели утверждают, что вычислительно невозможно восстановить сообщение, соответствующее данному дайджесту, а также найти два различных сообщения, которые дадут одинаковый дайджест. Любое изменение сообщения при передаче с очень большой вероятностью вызовет изменение дайджеста, и принятая цифровая подпись не пройдет проверку. Также считается, что алгоритм SHA более устойчив к атакам полного перебора и атакам "дня рождения", поскольку выдает 160-битовое хэш-значение, тогда как большинство других алгоритмов хэширования формируют 128-битовые хэш-значения.
Отечественный стандарт хэш-функции
Российский стандарт ГОСТ Р 34.11-94 определяет алгоритм и процедуру вычисления хэш-функции для любых последовательностей двоичных символов, применяемых в криптографических методах обработки и защиты информации. определенная им хэш-функция формирует 256-битовое хэш-значение.
Этот стандарт базируется на блочном алгоритме шифрования ГОСТ 28147-89, хотя в принципе позволяет использовать и другой блочный алгоритм шифрования с 64-битовым блоком и 256-битовым ключом.
Функция сжатия Hi = f (Mi, Hi -1) (оба операнда Mi, и Hi -1 являются 256-битовыми величинами) определяется следующим образом:
1. Генерируются 4 ключа шифрования kj, j = 1...4, путем линейного смешивания операндов Mi, Hi -1 и некоторых констант c j, j = 1...4.
|
|
2. Каждый ключ kj используют для шифрования 64-битовых подслов hi слова Hi -1 в режиме простой замены: S j =E kj (hj).
Результирующая последовательность S4, S3, S2, S1 длиной 256 бит запоминается во временной переменной S.
3. Значение Hi является сложной, хотя и линейной функцией смешивания S, Mi и Hi -1.
При вычислении окончательного хэш-значения сообщения M учитываются значения трех связанных между собой переменных:
- Hn - хэш-значения последнего блока сообщения;
- Z - значения контрольной суммы, получаемой при сложении по модулю два всех блоков сообщения;
- L-длины сообщения.
Эти три переменные и дополненный последний блок M ' сообщения объединяются в окончательное хэш-значение следующим образом:
h (M)= f (Z Å M', f (L, f (M', Hn))).
Данная хэш-функция определена стандартом ГОСТ Р 34.11-94 для использования совместно с российским стандартом электронной цифровой подписи.