АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Хэш-функции SHA-2

Читайте также:
  1. Однонаправленные хэш-функции
  2. Простые хэш-функции

В 2001 году NIST принял в качестве стандарта три хэш-функции с существенно большей длиной хэш-кода. Часто эти хэш-функции называют SHA-2 или SHA-256, SHA-384 и SHA-512 (соответственно, в названии указывается длина создаваемого ими хэш-кода). Эти алгоритмы отличаются не только длиной создаваемого хэш-кода, но и длиной обрабатываемого блока, длиной слова и используемыми внутренними функциями. Сравним характеристики этих хэш-функций.

Алгоритм Длина сообщения (в битах) Длина блока (в битах) Длина слова (в битах) Длина дайджеста сообщения (в битах) Безопасность (в битах)
SHA-1 <264        
SHA-256 <264        
SHA-384 <2128        
SHA-512 <2128        

Под безопасностью здесь понимается стойкость к атакам типа "парадокса дня рождения".

В данных алгоритмах размер блока сообщения равен 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)

Предварительная подготовка сообщения, т.е. добавление определенных битов до целого числа блоков и последующее разбиение на блоки выполняется аналогично тому, как это делалось в SHA-1 (конечно, с учетом длины блока каждой хэш-функции). После этого каждое сообщение можно представить в виде последовательности N блоков M(1), M(2), …, M(N).

Рассмотрим SHA-256. В этом случае инициализируются восемь 32-битных переменных, которые послужат промежуточным значением хэш-кода:

a, b, c, d, e, f, g, h

Основой алгоритма является модуль, состоящий из 64 циклических обработок каждого блока M(i):

T1 = h + Σ1{256}(e) + Ch(e, f, g) + Kt{256} + WtT2 = Σ0{256}(a) + Maj(a, b, c)h = gg = ff = ee = d + T1d = cc = bb = aa = T1 + T2

где Ki{256} - шестьдесят четыре 32-битных константы, каждая из которых является первыми 32-мя битами дробной части кубических корней первых 64 простых чисел.

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

Wt = Mt(i), 0 t 15Wt = σ1{256}(Wt-2) + Wt-7 + σ0{256}(Wt-15) + Wt-16, 16 t 63

i-ое промежуточное значение хэш-кода H(t) вычисляется следующим образом:

H0(i) = a + H0(i-1)H1(i) = b + H1(i-1)H2(i) = c + H2(i-1)H3(i) = d + H3(i-1)H4(i) = e + H4(i-1)H5(i) = f + H5(i-1)H6(i) = g + H6(i-1)H7(i) = h + H7(i-1)

Теперь рассмотрим SHA-512. В данном случае инициализируются восемь 64-битных переменных, которые будут являться промежуточным значением хэш-кода:

a, b, c, d, e, f, g, h

Основой алгоритма является модуль, состоящий из 80 циклических обработок каждого блока M(i):

T1 = h + Σ1{512}(e) + Ch(e, f, g) + Kt{512} + WtT2 = Σ0{512}(a) + Maj(a, b, c)h = gg = ff = ee = d + T1d = cc = bb = aa = T1 + T2

где Ki{512} - восемьдесят 64-битных констант, каждая из которых является первыми 64-мя битами дробной части кубических корней первых восьмидесяти простых чисел.

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

Wt = Mt(i), 0 t 15Wt = σ1{512}(Wt-2) + Wt-7 + σ0{512}(Wt-15) + Wt-16, 16 t 79

i-ое промежуточное значение хэш-кода H(t) вычисляется следующим образом:

H0(i) = a + H0(i-1)H1(i) = b + H1(i-1)H2(i) = c + H2(i-1)H3(i) = d + H3(i-1)H4(i) = e + H4(i-1)H5(i) = f + H5(i-1)H6(i) = g + H6(i-1)H7(i) = h + H7(i-1)

Рассмотрим SHA-384. Отличия этого алгоритма от SHA-512:


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)