Интернет магазин китайских планшетных компьютеров |
||
Компьютеры - SHA-1 - Описание алгоритма06 июля 2011Оглавление: 1. SHA-1 2. Описание алгоритма 3. Примеры
Одна итерация алгоритма SHA1
SHA-1 реализует хеш-функцию, построенную на идее функции сжатия. Входами функции сжатия являются блок сообщения длиной 512 бит и выход предыдущего блока сообщения. Выход представляет собой значение всех хеш-блоков до этого момента. Иными словами хеш блока Mi равен hi = f. Хеш-значением всего сообщения является выход последнего блока. ИнициализацияИсходное сообщение разбивается на блоки по 512 бит в каждом. Последний блок дополняется до длины, кратной 512 бит. Сначала добавляется 1, а потом нули, чтобы длина блока стала равной бит. В оставшиеся 64 бита записывается длина исходного сообщения в битах. Если последний блок имеет длину более 448, но менее 512 бит, дополнение выполняется следующим образом: сначала добавляется 1, затем нули вплоть до конца 512-битного блока; после этого создается ещё один 512-битный блок, который заполняется вплоть до 448 бит нулями, после чего в оставшиеся 64 бита записывается длина исходного сообщения в битах. Дополнение последнего блока осуществляется всегда, даже если сообщение уже имеет нужную длину. Инициализируются пять 32-битовых переменных. A = a = 0x67452301 B = b = 0xEFCDAB89 C = c = 0x98BADCFE D = d = 0x10325476 E = e = 0xC3D2E1F0 Определяются четыре нелинейные операции и четыре константы.
Главный циклГлавный цикл итеративно обрабатывает каждый 512-битный блок. Итерация состоит из четырех этапов по двадцать операций в каждом. Блок сообщения преобразуется из 16 32-битовых слов Mi в 80 32-битовых слов Wj по следующему правилу: Wt = Mt при 0≤t≤15 здесь << это циклический сдвиг влево для t от 0 до 79 После этого a, b, c, d, e прибавляются к A, B, C , D , E соответственно. Начинается следующая итерация. Итоговым значением будет объединение пяти 32-битовых слов в одно 160-битное хеш-значение. Псевдокод SHA-1Псевдокод алгоритма SHA-1 следующий:
Замечание: Все используемые переменные 32 бита.
Инициализация переменных:
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0
Предварительная обработка:
Присоединяем бит '1' к сообщению
Присоединяем k битов '0', где k наименьшее число ≥ 0 такое, что длина получившегося сообщения
сравнима по модулю 512 с 448
Добавляем длину исходного сообщения как целое 64-битное
Big-endian число, в битах.
В процессе сообщение разбивается последовательно по 512 бит:
for перебираем все такие части
разбиваем этот кусок на 16 частей, слов по 32-бита w, 0 <= i <= 15
16 слов по 32-бита дополняются до 80 32-битовых слов:
for i from 16 to 79
w = циклический сдвиг 1
Инициализация хеш-значений этой части:
a = h0
b = h1
c = h2
d = h3
e = h4
Основной цикл:
for i from 0 to 79
if 0 ≤ i ≤ 19 then
f = or and d)
k = 0x5A827999
else if 20 ≤ i ≤ 39
f = b xor c xor d
k = 0x6ED9EBA1
else if 40 ≤ i ≤ 59
f = or or
k = 0x8F1BBCDC
else if 60 ≤ i ≤ 79
f = b xor c xor d
k = 0xCA62C1D6
temp = + f + e + k + w
e = d
d = c
c = b leftrotate 30
b = a
a = temp
Добавляем хеш-значение этой части к результату:
h0 = h0 + a
h1 = h1 + b
h2 = h2 + c
h3 = h3 + d
h4 = h4 + e
Итоговое хеш-значение:
digest = hash = h0 append h1 append h2 append h3 append h4
Вместо оригинальной формулировки FIPS PUB 180-1 приведены следующие эквивалентные выражения и могут быть использованы на компьютере : f = d xor) : f = xor and d) : f = + and d) : f = or) : f = or) : f = +) : f = xor xor Просмотров: 4655
|