Функция хэширования SHA
Алгоритм безопасного хэширования SHA (Secure Hash Algorithm) принят в качестве стандарта США в 1992 г. и предназначен для использования совместно с алгоритмом цифровой подписи, определенным в стандарте DSS. При вводе сообщения M
алгоритм вырабатывает 160-битовое выходное сообщение, называемое сверткой (Message Digest), которая и используется при выработке ЭЦП.
Рассмотрим работу алгоритма подробнее.
Прежде всего исходное сообщение дополняется так, чтобы его длина стала кратной 512 битам. При этом сообщение дополняется даже тогда, когда его длина уже кратна указанной. Процесс происходит следующим образом: добавляется единица, затем столько нулей, сколько необходимо для получения сообщения, длина которого на 64 бита меньше, чем кратная 512, и затем добавляется 64-битовое представление длины исходного сообщения.
Далее инициализируются пять 32-битовых переменных следующими шестнадцатеричными константами:
A = 67452301
B = EFCDAB89
C = 98BADCFE
D = 10325476
E = C3D2E1F0,
Далее эти пять переменных копируются в новые переменные a, b, c, d и e соответственно.
Главный цикл может быть довольно просто описан на псевдокоде следующим образом:
for (t = 0; t < 80; t++){
temp = (a <<< 5)+ft(b,c,d) + e + Wt + Kt;
e = d; d = c; c = b <<< 30; b = a; a = temp;
},
где
<<< - операция циклического сдвига влево;
Kt – шестнадцатеричные константы, определяемые по следующим формулам:
,функции ft(x, y, z) задаются следующими выражениями:
,
значения Wt получаются из 32-битовых подблоков 512-битового блока расширенного сообщения по следующему правилу:
.После окончания главного цикла значения a, b, c, d и e складываются с содержимым A, B, C, D и E
соответственно и осуществляется переход к обработке следующего 512-битового блока расширенного сообщения. Выходное значение хэш-функции является конкатенацией значений A, B, C, D и E.