Московский государственный университет имени М.В.Ломоносова
Опубликован: 28.11.2014 | Доступ: свободный | Студентов: 1395 / 128 | Длительность: 23:26:00
ISBN: 978-5-9556-0163-2
Лекция 3:

Хэш-функции

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Хэш-функция SHA-1

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

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

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

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

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

Шаг 1: добавление недостающих битов

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

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

Шаг 2: добавление длины

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

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

Шаг 3: инициализация SHA-1 буфера

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

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

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

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

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

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

 0 \leq t \leq 19 K_t = 5A827999 (целая часть числа [2^3^0 \times \sqrt 2])\\
20 \leq t \leq 39 K_t = 6ED9EBA1 (целая часть числа [2^3^0 \times \sqrt 3])\\
40 \leq t \leq 59 K_t = 8F1BBCDC (целая часть числа [2^3^0 \times \sqrt 5])\\
60 \leq t \leq 79 K_t = CA62C1D6 (целая часть числа [2^3^0 \times \sqrt 10])

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

Обработка очередного 512-битного блока

Рис. 3.6. Обработка очередного 512-битного блока

Шаг 5: выход

После обработки всех 512-битных блоков выходом L-ой стадии является 160-битный дайджест сообщения.

Рассмотрим более детально логику в каждом из 80 циклов обработки одного 512-битного блока. Каждый цикл можно представить в виде:

A,B,C,D,E \leftarrow (CLS_5 (A) + f_t (B, C, D) + E + W_t + K_t), A, CLS_3_0 (B), C, D

Где

A,B,C,D,E - пять слов из буфера.

t - номер цикла, 0 ≤ t ≤ 779.

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

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

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

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

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

Логика выполнения отдельного цикла

Рис. 3.7. Логика выполнения отдельного цикла

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

Таблица 3.1


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

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

Получение входных значений каждого цикла из очередного блока

Рис. 3.9. Получение входных значений каждого цикла из очередного блока

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

W_t = W_t_-_1_6 \oplus W_t_-_1_4 \oplus W_t_-_8 \oplus W_t_-_3

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

Алгоритм SHA-1 можно суммировать следующим образом:

SHA0= IV
SHAq+1= ∑ 32(SHAq, ABCDEq)
SHA = SHAL-1

Где

IV - начальное значение буфера ABCDE.

ABCDEq - результат обработки q-того блока сообщения.

L - число блоков в сообщении, включая поля добавления и длины.

∑32 - сумма по модулю 232, выполняемая отдельно для каждого слова буфера.

SHA - значение дайджеста сообщения.

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >