Интернет магазин китайских планшетных компьютеров |
||
Компьютеры - SHA-1 - Описание алгоритма06 июля 2011Оглавление: 1. SHA-1 2. Описание алгоритма 3. Примеры 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 Просмотров: 4271
|