Функция хэширования SHA 1

 

Безопасный хэш-алгоритм (Secure Hash Algorithm) был разработан национальным институтом стандартов и технологии (NIST) и опубликован в качестве федерального информационного стандарта (FIPS PUB 180) в 1993 году. SHA-1, как и MD5, основан на алгоритме MD4.

Логика выполнения SHA-1

Алгоритм получает на входе сообщение максимальной длины znak3.gif (937 bytes) бит и создает в качестве выхода дайджест сообщения длиной 160 бит.

Алгоритм состоит из следующих шагов:

ball1.gif (146 bytes)     добавление недостающих битов

ообщение добавляется таким образом, чтобы его длина была кратна 448 по модулю 512 (длина ? 448 mod 512). Добавление осуществляется всегда, даже если сообщение уже имеет нужную длину. Таким образом, число добавляемых битов находится в диапазоне от 1 до 512.

Добавление состоит из единицы, за которой следует необходимое количество нулей.

ball1.gif (146 bytes)     добавление длины

К сообщению добавляется блок из 64 битов. Этот блок трактуется как беззнаковое 64-битное целое и содержит длину исходного сообщения до добавления.

Результатом первых двух шагов является сообщение, длина которого кратна 512 битам. Расширенное сообщение может быть представлено как последовательность 512-битных блоков Y0, Y1, . . . , YL-1, так что общая длина расширенного сообщения есть L * 512 бит. Таким образом, результат кратен шестнадцати 32-битным словам.

ball1.gif (146 bytes)     инициализация SHA-1 буфера

Используется 160-битный буфер для хранения промежуточных и окончательных результатов хэш-функции. Буфер может быть представлен как пять 32-битных регистров A, B, C, D и E. Эти регистры инициализируются следующими шестнадцатеричными числами:

A = 67452301
B = EFCDAB89
C = 98BADCFE
D = 10325476
E = C3D2E1F0

ball1.gif (146 bytes)     обработка сообщения в 512-битных (16-словных) блоках

Основой алгоритма является модуль, состоящий из 80 циклических обработок, обозначенный как HSHA. Все 80 циклических обработок имеют одинаковую структуру.

Каждый цикл получает на входе текущий 512-битный обрабатываемый блок Yq и 160-битное значение буфера ABCDE, и изменяет содержимое этого буфера.

В каждом цикле используется дополнительная константа Кt, которая принимает только четыре различных значения:

SHA-1.gif (6971 bytes)

ля получения SHAq+1 выход 80-го цикла складывается со значением SHAq. Сложение по модулю 2 в степени 32 выполняется независимо для каждого из пяти слов в буфере с каждым из соответствующих слов в SHA со степенью q.

ball1.gif (146 bytes)     выход

После обработки всех 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 znak.gif (845 bytes) t znak.gif (845 bytes) 19)   (B znak5.gif (845 bytes) C) znak6.gif (843 bytes) (¬ B znak5.gif (845 bytes) D)
(20 znak.gif (845 bytes) t znak.gif (845 bytes) 39) B znak7.gif (866 bytes)C znak7.gif (866 bytes)D
(40 znak.gif (845 bytes) t znak.gif (845 bytes) 59) (B znak5.gif (845 bytes) C) znak6.gif (843 bytes) (B znak5.gif (845 bytes) D) znak6.gif (843 bytes) (C znak5.gif (845 bytes) D)
(60 znak.gif (845 bytes) t znak.gif (845 bytes) 79) B znak7.gif (866 bytes)C znak7.gif (866 bytes)D

а самом деле используются только три различные функции. Для 0 znak.gif (845 bytes) t znak.gif (845 bytes) 19 функция является условной: if B then C else D. Для 20 znak.gif (845 bytes) t znak.gif (845 bytes) 39 и 60 znak.gif (845 bytes) t znak.gif (845 bytes) 79 функция создает бит четности. Для 40 znak.gif (845 bytes) t znak.gif (845 bytes) 59 функция является истинной, если два или три аргумента истинны.

2-битные слова Wt получаются из очередного 512-битного блока сообщения следующим образом.

Первые 16 значений Wt берутся непосредственно из 16 слов текущего блока. Оставшиеся значения определяются следующим образом:

Wt = Wt-16 B znak7.gif (866 bytes)Wt-14 B znak7.gif (866 bytes)Wt-8 B znak7.gif (866 bytes)Wt-3

первых 16 циклах вход состоит из 32-битного слова данного блока. Для оставшихся 64 циклов вход состоит из XOR нескольких слов из блока сообщения.

 

        ball2.gif (146 bytes)    Схема логика выполнения SHA-1

 

01LEFT.JPG (1550 bytes)01RIGHT.JPG (1552 bytes)

АИСС БКБ, www.orioncom.ru, tel (495) 783-5510