Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Защ_инф_4гл.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
105.98 Кб
Скачать

Логика выполнения алгоритма sha-1

Алгоритм SHA-1 позволяет обрабатывать сообщения с максимальной длиной 264 бит. В результате на выходе создается хэш-код («отпечаток») сообщения длиной 160 бит. Вычисление хэш-кода сообщения осуществляется в пять этапов.

Этап 1: расширение сообщения

Исходное сообщение расширяется с помощью дополнительных бит. При этом биты добавляются таким образом, чтобы длина сообщения стала кратной 448 по модулю 512. Расширение осуществляется всегда, даже если сообщение уже имеет нужную длину. Таким образом, число добавляемых битов находится в диапазоне от 1 до 512. Добавление бит к исходному сообщению состоит из единицы, за которой следует необходимое количество нулей.

Этап 2: добавление длины сообщения

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

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

Этап 3: инициализация sha-1 буфера

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

На данном этапе регистры буфера инициализируются следующими шестнадцатеричными числами:

A = 67452301,

B = EFCDAB89,

C = 98BADCFE,

D = 10325476,

E = C3D2E1F0.

Этап 4: обработка сообщения в 512-битных блоках

Обработка каждого 512-битного блока сообщения осуществляется циклически. В результате за 80 циклических обработок блока формируется промежуточное значение хэш-функции SHAi. Все 80 циклических обработок имеют одинаковую структуру. Каждый цикл получает на входе текущий обрабатываемый блок Mi и 160-битное значение буфера ABCDE. Вычисление промежуточного значения хэш-функции SHAi осуществляется с помощью логических операций и элементарных функций Ft (B, C, D), а каждый цикл обработки одного 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 ≤ t ≤ 79;

Ft - элементарная логическая функция;

CLSs - циклический левый сдвиг 32-битного аргумента на s битов;

Wt - 32-битное слово, полученное из текущего входного 512-битного

блока;

Kt - дополнительная константа;

+ - сложение по модулю 232.

Каждая элементарная функция получает на входе три 32-битных слова и посредством выполнения набора логических операций создает на выходе одно 32-битное слово, т.е. n-ый бит выхода элементарной функции является функцией от n-ых битов трех входов. Всего используется три вида элементарных функций, выбор которых для выполнения определяется номером цикла:

0 ≤t ≤19 Ft (B, C, D) = (B C) (B D)

20 ≤t ≤39 Ft (B, C, D) = B + C + D

40 ≤t ≤59 Ft (B, C, D) = (B C) (B D) (C D)

60 ≤t ≤79 Ft (B, C, D) = B + C + D

При этом для циклов с номерами 0 ≤t ≤19 функция является условной: if B then C else D, для 20 ≤t ≤39 и 60 ≤t ≤79 функция создает бит четности, а для 40 ≤t ≤59 функция является истинной, если два или три аргумента истинны.

32-битные слова Wt получаются из обрабатываемого 512-битного блока сообщения следующим образом: первые 16 значений Wt берутся непосредственно из 16 слов текущего блока. Для оставшихся 64 циклов оставшиеся значения определяются путем сложения по модулю 2 нескольких слов блока сообщения следующим образом:

W16 =W0  W1  W8 W13

Wt =Wt-16  Wt-14  Wt-8 Wt-3

W79 =W63 W65  W74 W76

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

0 ≤ t ≤ 19 Kt = 5A827999 (целая часть числа [230 × 21/2])

20 ≤ t ≤ 39 Kt = 6ED9EBA1 (целая часть числа [230 × 31/2])

40 ≤ t ≤ 59 Kt = 8F1BBCDC (целая часть числа [230 × 51/2])

60 ≤ t ≤ 79 Kt = CA62C1D6 (целая часть числа [230 × 101/2])

Для получения SHAi выход 80-го цикла складывается со значением SHAi-1 по модулю 232. Сложение по модулю 232 выполняется независимо для каждого из пяти слов в буфере с каждым из соответствующих слов в SHA i:

Аi = Аi Ai-1,

Bi = Bi Bi-1,

Ci = Ci  Ci-1,

Di = Di  Di-1,

Ei = Ei  Ei-1.