Анимация
JavaScript


Главная  Библионтека 

0 1 [ 2 ] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Теперь перейдем к основному циклу алгоритма. Этот цикл продолжается, пока не исчерпаются 512-битовые блоки сообщения.

Четыре переменных копируются в другие переменные : A в a, B в b, C в c и D в d.

Главный цикл состоит из четырех очень похожих этапов (у MD4 было только три этапа). На каждом этапе 16 раз используются различные операции. Каждая операция представляет собой нелинейную функцию над тр е-мя из a, b, c и d. Затем она добавляет этот результат к четвертой переменной, подблоку текста и константе. Д алее результат циклически сдвигается вправо на переменное число битов и добавляет результат к одной из пер е-менных a, b, c и d. Наконец результат заменяет одну из переменных a, b, c и d. См. 13-й и 12-й. Существуют четыре нелинейных функции, используемые по одной в каждой операции (для каждого этапа - другая фун кция).


Этап 1

Этап 2

Этап 3

Этап 4

гп .

МТ"

J

ГР

-1

Рис. 18-5. Главный цикл MD5.


Нелинейнаяч функция у~

Рис. 18-6. Одна операция MD5.

F(X,F,Z) = (X л Y) V ((-X) л Z)

G(X,Y,Z) = (Xл Z) V (Yл (-Z))

H(X,Y,Z) = X © Y © Z

I(X,Y,Z) = Y © (X V (-Z))

(© - это XOR, л - AND, v - OR, а - - NOT.)

Эти функции спроектированы так, чтобы, если соответствующие биты X, Y и Z независимы и несмещены, каждый бит результата также был бы независимым и несмещенным . Функция F - это побитовое условие: если X, то Y, иначе Z. Функция H - побитовая операция четности.

Если Mj обозначает j-ый подблок сообщения (от 0 до 15), а «<s обозначает циклический сдвиг влево на



битов, то используются следующие четыре операции :

FF(a,b,c,d,Mj,s,ti) означает a = b + ((a + F(b,c,d) + Mj + t,) «<s) GG(a,b,c,d,Mj,s,ti) означает a = b + ((a + G(b,c,d) + Mj + t,) «<s) HH(a,b,c,d,MJ,s,t,-) означает a = b + ((a + H(b,c,d) + Mj + t,) «<s) II(a,b,c,d,MJ,s,t,-) означает a = b + ((a + I(b,c,d) + Mj + t,) «<s) Четыре этапа (64 действия выглядят следующим образом):

Этап 1:

FF(a, b, c, d, М0, 7, 0xd76aa478) FF(d, a, b, c, M1, 12, 0xe8c7b756) FF(c, d, a, b, M2, 17, 0x242070db) FF(b, c, d, a, M3, 22, 0xc1bdceee) FF(a, b, c, d, M4, 7, 0xf57c0faf) FF(d, a, b, c, M5, 12, 0x4787c62a) FF(c, d, a, b, M6, 17, 0xa8304613) FF(b, c, d, a, M7, 22, 0xfd469501) FF(a, b, c, d, Ms, 7, 0x698098d8) FF(d, a, b, c, M9, 12, 0x8b44f7af) FF(c, d, a, b, M10, 17, 0xffff5bb1)

FF(b, c, d, a, M11, 22, 0x895cd7be) FF(a, b, c, d, M12, 7, 0x6b901122)

FF(d, a, b, c, M13, 12, 0xfd987193) FF(c, d, a, b, M14, 17, 0xa679438e) FF(b, c, d, a, M15, 22, 0x49b40821)

Этап 2:

GG(a, b, c, d, M1, 5, 0xf61e2562) GG(d, a, b, c, M6, 9, 0xc040b340) GG(c, d, a, b, M11, 14, 0x265e5a51) GG(b, c, d, a, Mo, 20, 0xe9b6c7aa) GG(a, b, c, d, M5, 5, 0xd62fl05d) GG(d, a, b, c, Mi0, 9, 0x02441453) GG(c, d, a, b, M15, 14, 0xd8ale681) GG(b, c, d, a, M4, 20, 0xe7d3fbc8) GG(a, b, c, d, M9, 5, 0x2,lelcde6) GG(d, a, b, c, Mi4, 9, 0xc33707d6) GG(c, d, a, b, M3, 14, 0xf4d50d87) GG(b, c, d, a, Ms, 20, 0x455al4ed) GG(a, b, c, d, Mi3, 5, 0xa9e3e905) GG(d, a, b, c, M2, 9, 0xfcefa3f8)

GG(c, d, a, b, M7, 14, 0x676f02d9)

GG(b, c, d, a, M12, 20, 0x8d2a4c8a)

Этап 3:



HH(a, b, c, d, M5, 4, 0xfffa3942) HH(d, a, b, c, M8, 11, 0x8771f681) HH(c, d, a, b, M11, 16, 0x6d9d6122) HH(b, c, d, a, M14, 23, 0xfde5380c) HH(a, b, c, d, M1, 4, 0xa4beea44) HH(d, a, b, c, M4, 11, 0x4bdecfa9) HH(c, d, a, b, M7, 16, 0xf6bb4b60) HH(b, c, d, a, M10, 23, 0xbebfbc70) HH(a, b, c, d, M13, 4, 0x289b7ec6) HH(d, a, b, c, M0, 11, 0xeaa127fa) HH(c, d, a, b, M3, 16, 0xd4ef3085) HH(b, c, d, a, M6, 23, 0x04881d05) HH(a, b, c, d, M9, 4, 0xd9d4d039) HH(d, a, b, c, M12, 11, 0xe6db99e5) HH(c, d, a, b, M15, 16, 0x1fa27cf8) HH(b, c, d, a, M2, 23, 0xc4ac5665)

Этап 4:

II(a, b, c, d, M0, 6, 0xf4292244)

II(d, a, b, c, M7, 10, 0x432aff97) II(c, d, a, b, M14, 15, 0xab9423a7) II(b, c, d, a, M5, 21, 0xfc93a039) II(a, b, c, d, M12, 6, 0x655b59c3) II(d, a, b, c, M3, 10, 0x8f0ccc92) II(c, d, a, b, M10, 15, 0xffeff47d) II(b, c, d, a, M1, 21, 0x85845ddl) II(a, b, c, d, Ms, 6, 0x6fa87e4f) II(d, a, b, c, M15, 10, 0xfe2ce6e0) II(c, d, a, b, M6, 15, 0xa3014314) II(b, c, d, a, M13, 21, 0x4e081lal)

II(a, b, c, d, M4, 6, 0xf7537e82)

II(d, a, b, c, M11, 10, 0xbd3af235)

II(c, d, a, b, M2, 15, 0x2ad7d2bb)

II(b, c, d, a, M9, 21, 0xeb86d391)

Эти константы, t,-, выбирались следующим образом:

На ,-ом этапе it является целой частью 232*abs(sin(,)), где , измеряется в радианах.

После всего этого a, b, c и d добавляются к A, B, C и D, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение A, B, C и D.

Безопасность MD5

Рон Ривест привел следующие улучшения MD5 в сравнении с MD4 [1322]:

1. Добавился четвертый этап.

2. Теперь в каждом действии используется уникальная прибавляемая константа .



0 1 [ 2 ] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17