КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Логика выполнения SHA-1
Функция SHA-1 Хэш- Безопасный хэш-алгоритм (Secure Hash Algorithm) был разработан национальным институтом стандартов и технологии (NIST) и опубликован в качестве федерального информационного стандарта (FIPS PUB 180) в 1993 году. SHA-1, как и MD5, основан на алгоритме MD4. Алгоритм получает на входе сообщение максимальной длины 264 бит и создает в качестве выхода дайджест сообщения длиной 160 бит. Алгоритм состоит из следующих шагов: Шаг 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 Шаг 4: обработка сообщения в 512-битных (16-словных) блоках Основой алгоритма является модуль, состоящий из 80 циклических обработок, обозначенный как HSHA. Все 80 циклических обработок имеют одинаковую структуру (рис 9.7). Каждый цикл получает на входе текущий 512-битный обрабатываемый блок Yq и 160-битное значение буфера ABCDE, и изменяет содержимое этого буфера. В каждом цикле используется дополнительная константа К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])
Рис. 9.7. Обработка очередного 512 битного блока по алгоритму SHA -1 Для получения SHAq+1 выход 80-го цикла складывается со значением SHAq. Сложение по модулю 232 выполняется независимо для каждого из пяти слов в буфере с каждым из соответствующих слов в SHAq. Шаг 5: выход После обработки всех 512-битных блоков выходом L-ой стадии является 160-битный дайджест сообщения. Рассмотрим более детально логику в каждом из 80 циклов обработки одного 512-битного блока.
Рис. 9.8. Логика выполнения отдельного цикла SHA-1 Aq+1 = Eq + ft(Bq, Cq, Dq) +CLS5(Aq) + Wt +Kt Bq+1 = Aq Cq+1 +CLS30(Bq) Dq+1 = Cq Eq+1 = Dq где: A, B, C, D, E - пять слов буфера; t - номер цикла, 0 ≤ t ≤79;
Каждая элементарная функция получает на входе три 32-битных слова и создает на выходе одно 32-битное слово. Элементарная функция выполняет набор побитных логических операций, т.е. n -ый бит выхода является функцией от n -ых битов трех входов. Функции следующие:
32-битные слова Wt получаются из очередного 512-битного блока сообщения следующим образом.
Рис. 9.9. Схема получения входных значений цикла из очередного блока Хэш-функции SHA – 2 В 2001 году NIST (Национальный институт стандартов и технологии США) принял в качестве стандарта три хэш-функции с существенно большей длиной хэш-кода. Часто эти хэш-функции называют SHA-2 или SHA-256, SHA-384 и SHA-512 (соответственно, в названии указывается длина создаваемого ими хэш-кода). Эти алгоритмы отличаются не только длиной создаваемого хэш-кода, но и длиной обрабатываемого блока, длиной слова и используемыми внутренними функциями. В данных алгоритмах размер блока сообщения равен m бит. Для SHA-256 m = 512, для SHA-384 и SHA-512 m = 1024. Каждый алгоритм оперирует с w -битными словами. Для SHA-256 w = 32, для SHA-384 и SHA-512 w = 64. В алгоритмах используются обычные булевские операции над словами, а также сложение по модулю 2w, правый сдвиг на n бит SHRn (x), где х – w-битное слово, и циклические (ротационные) правый и левый сдвиги на n бит ROTRn (x) и ROTLn (x), где х – w -битное слово. Сравнительные характеристики хэш-функций
Под безопасностью здесь понимается стойкость к атакам типа "парадокса дня рождения". SHA-256 использует шесть логических функций, при этом каждая из них выполняется с 32-битными словами, обозначенными как x, y и z. Результатом каждой функции тоже является 32-битное слово. Ch (x, y, z) = (x & y) Å (¬x & z) Maj (x, y, z) = (x & y) Å (x & z) Å (y & z) Σ0{256} (x) = ROTR2 (x) Å ROTR13 (x) Å ROTR22 (x) Σ1{256} (x) = ROTR6 (x) Å ROTR11 (x) Å ROTR25 (x) σ0{256} (x) = ROTR7 (x) Å ROTR18 (x) Å SHR3 (x) σ1{256} (x) = ROTR17 (x) Å ROTR19 (x) Å SHR10 (x) SHA-384 и SHA-512 также используют шесть логических функций, каждая из которых выполняется над 64-битными словами, обозначенными как x, y и z. Результатом каждой функции является 64-битное слово. Ch (x, y, z) = (x & y) Å (¬x & z) Maj (x, y, z) = (x & y) Å (x & z) Å (y & z) Σ0{512} (x) = ROTR28 (x) Å ROTR34 (x) Å ROTR39 (x) Σ1{512} (x) = ROTR14 (x) Å ROTR18 (x) Å ROTR41 (x) σ0{512} (x) = ROTR1 (x) Å ROTR8 (x) Å SHR7 (x) σ1{512} (x) = ROTR19 (x) Å ROTR61 (x) Å SHR6 (x) Предварительная подготовка сообщения, т.е. добавление определенных битов до целого числа блоков и последующее разбиение на блоки выполняется аналогично тому, как это делалось в MD5 (конечно, с учетом длины блока каждой хэш-функции). После этого каждое сообщение можно представить в виде последовательности N блоков M(1), M(2), …, M(N). Рассмотрим SHA-256. В этом случае инициализируются восемь 32-битных переменных, которые послужат промежуточным значением хэш-кода:
Дата добавления: 2014-01-07; Просмотров: 820; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |