Функция хэширования SHA 1
Безопасный хэш-алгоритм (Secure Hash Algorithm) был разработан национальным институтом стандартов и технологии (NIST) и опубликован в качестве федерального информационного стандарта (FIPS PUB 180) в 1993 году. SHA-1, как и MD5, основан на алгоритме MD4.
Логика выполнения SHA-1
Алгоритм получает на входе сообщение максимальной длины бит и создает в качестве выхода дайджест сообщения длиной 160 бит.
Алгоритм состоит из следующих шагов:
добавление недостающих битов
ообщение добавляется таким образом, чтобы его
длина была кратна 448 по модулю 512 (длина ? 448 mod 512).
Добавление осуществляется всегда, даже если
сообщение уже имеет нужную длину. Таким образом,
число добавляемых битов находится в диапазоне от
1 до 512.
Добавление состоит из единицы, за которой
следует необходимое количество нулей.
добавление длины
К сообщению добавляется блок из 64 битов. Этот
блок трактуется как беззнаковое 64-битное целое и
содержит длину исходного сообщения до
добавления.
Результатом первых двух шагов является
сообщение, длина которого кратна 512 битам.
Расширенное сообщение может быть представлено
как последовательность 512-битных блоков Y0,
Y1, . . . , YL-1, так
что общая длина расширенного сообщения есть L * 512
бит. Таким образом, результат кратен шестнадцати
32-битным словам.
инициализация SHA-1 буфера
Используется 160-битный буфер для хранения промежуточных и окончательных результатов хэш-функции. Буфер может быть представлен как пять 32-битных регистров A, B, C, D и E. Эти регистры инициализируются следующими шестнадцатеричными числами:
A = 67452301
B = EFCDAB89
C = 98BADCFE
D = 10325476
E = C3D2E1F0
обработка сообщения в 512-битных (16-словных) блоках
Основой алгоритма является модуль, состоящий из 80 циклических обработок, обозначенный как HSHA. Все 80 циклических обработок имеют одинаковую структуру.
Каждый цикл получает на входе текущий 512-битный
обрабатываемый блок Yq и 160-битное
значение буфера ABCDE, и изменяет содержимое этого
буфера.
В каждом цикле используется дополнительная
константа Кt, которая принимает
только четыре различных значения:
ля получения SHAq+1 выход 80-го цикла складывается со значением SHAq. Сложение по модулю 2 в степени 32 выполняется независимо для каждого из пяти слов в буфере с каждым из соответствующих слов в SHA со степенью q.
выход
После обработки всех 512-битных блоков выходом
L-ой стадии является 160-битный дайджест сообщения.
Рассмотрим более детально логику в каждом из 80
циклов обработки одного 512-битного блока. Каждый
цикл можно представить в виде:
A, B, C, D, E (CLS5 (A) + ft (B, C, D) + E + Wt + Kt), A, CLS30 (B), C, D
Где
A, B, C, D, E - пять слов из буфера.
t - номер цикла, 0 %le; t ? 79.
ft - элементарная логическая функция.
CLSs - циклический левый сдвиг 32-битного аргумента на s битов.
Wt - 32-битное слово, полученное из текущего входного 512-битного блока.
Kt - дополнительная константа.
+ - сложение по модулю 2 в степени 32.
Каждая элементарная функция получает на входе три 32-битных слова и создает на выходе одно 32-битное слово. Элементарная функция выполняет набор побитных логических операций, т.е. n-ый бит выхода является функцией от n-ых битов трех входов. Функции следующие:
Номер цикла | ft (B, C, D) |
(0 t 19) | (B C) (¬ B D) |
(20 t 39) | B C D |
(40 t 59) | (B C) (B D) (C D) |
(60 t 79) | B C D |
а самом деле используются только три различные функции. Для 0 t 19 функция является условной: if B then C else D. Для 20 t 39 и 60 t 79 функция создает бит четности. Для 40 t 59 функция является истинной, если два или три аргумента истинны.
2-битные слова Wt получаются из очередного 512-битного блока сообщения следующим образом.
Первые 16 значений Wt берутся непосредственно из 16 слов текущего блока. Оставшиеся значения определяются следующим образом:
Wt = Wt-16 B Wt-14 B Wt-8 B Wt-3
первых 16 циклах вход состоит из 32-битного слова данного блока. Для оставшихся 64 циклов вход состоит из XOR нескольких слов из блока сообщения.
АИСС БКБ, www.orioncom.ru, tel (495) 783-5510