Стандарт Security Hash Algorithm
Security Hash Algorithm (SHA) разработан в NIST совместно с NSA для использования со стандартом на цифровую подпись DSS. Этот алгоритм предназначен для работы с входными последовательностями длиной < 264 бит и имеет хэш-код длиной 160 бит. Принципиальную основу SHA составляет алгоритм MD 4, созданный Ривестом.
Работа алгоритма начинается с того, что входная последовательность делится на блоки по 512 бит. Перед тем как разбить ее, необходимо, чтобы длины полученных блоков в битовом выражении были равны 512 битам. Для этого к данной последовательности приписываются единица и необходимое количество нулей, чтобы ее длина стала на 64 бита меньше числа, кратного 512. Затем к последовательности приписывается 64-битное представление длины входной последовательности.
Далее инициализируются пять переменных по 32 бита:
А - 0x67452301 В - 0xtfcdab89 С - 0x98badcfe D = 0x10325476
Е = 0xc3d2elf0
Основной цикл, совершаемый над одним 512-битным блоком, состоит из четырех подциклов, в каждом из которых используются по 20 операторов. Перед тем как начать преобразования, создаются копии перечисленных выше пяти переменных а, Ь, с, d и е.
Каждый оператор представляет собой набор нелинейных функций от трех переменных (В, С и D) и операций циклического сдвига и суммирования. Эти функции имеют следующий вид:
1 раунд ft(X, Y, Z) = (X Л Y) V (( -1 X) Л Z)
2 раунд f2(X, Y, Z) = Х0 Y© Z
3 раунд f3(X, Y, Z) = (X Л Y) V (X Л Z) V (YaZ)
4 раунд f4(X, Y, Z) = ХФ Y0 Z