Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Инф. безопасность

.pdf
Скачиваний:
39
Добавлен:
18.03.2015
Размер:
2.7 Mб
Скачать

различные прообразы при решении обратной задачи. Так как обычно хэш-функция представляет собой соотношение "многие к одному", невозможно со всей определенностью сказать, что две строки совпадают, но их можно использовать, получая приемлемую оценку точности.

Однонаправленная хэш-функция - это хэш-функция, которая работает только в одном направлении: легко вычислить значение хэш-функции по прообразу, но трудно создать прообраз, значение хэш-функции которого равно заданной величине. Хорошей однонаправленной хэш-функцией является хэш-функция без столкновений - трудно создать два прообраза с одинаковым значениемхэш-функции.

Хэш-функция является открытой, тайны ее расчета не существует. Безопасность однонаправленной хэш-функцией заключается именно в ее однонаправленности. У выхода нет видимой зависимости от входа . Изменение одного бита прообраза приводи к изменению, в среднем, половины битов значения хэш-функции. Вычислительно невозможно найти прообраз, соответствующий заданномузначениюхэш-функции.

Посмотрите на это как на способ получить характерные признаки файлов. Если вы хотите проверить, что у кого-то есть тот же файл, что и у вас, но вы не хотите, чтобы этот файл был передан вам, попроситепослатьвамзначение хэш-функции. Еслиприсланное значение хэш-функции совпадет с рассчитанным вами, то почти навернякачужойфайлсовпадаетсвашим.

Однонаправленная функция с люком это особый тип однонаправленной функции, с секретной лазейкой. Ее легко вычислить в одном направлении и трудно — в обратном . Но если вам известен секрет, вы можете легко рассчитать и обратную функцию. То есть, легко вычислить f(x) по заданному х, но трудно по известному f(x) вычислить х. Однако, существует небольшая секретная информация, у, позволяющая, при знании f(x) и у, легко вычислитьх.

В качестве хорошего примера однонаправленной функции с люком рассмотрим часы. Легко разобрать часы на сотни малюсеньких кусочков и трудно снова собрать из этих деталей работающие часы. Но, с секретной информацией - инструкцией по сборкенамноголегчерешитьэтузадачу.

61

Однонаправленная функция Н(М) применяется к сообщению произвольной длины М и возвращает значение фиксированной длины h.

h = Н(М), где h имеет длину т

Многие функции позволяют вычислять значение фиксированной длины по входным данным произвольной длины, но у однонаправленных хэш-функций есть дополнительные свойства, делающие их однонаправленными:

9Зная М, легко вычислить h.

9Зная Н, трудно определить М, для которого H(M)=h.

9Зная М, трудно определить другое сообщение, М', для которого H(M)= H(М').

Внекоторых приложениях однонаправленности недостаточно, необходимо выполнение другого требования, называемого устойчивостью к столкновениям.

Должно быть трудно найти два случайных сообщения, М и М', для которых H(M)= H(М').

Не легко построить функцию, вход которой имеет произвольный размер, а тем более сделать ее однонаправленной.

Вреальном мире однонаправленные хэш-функций строятся на идее функции сжатия. Такая однонаправленная функция выдает хэш-значение длины п при заданных входных данных большей длины т. Входами функции сжатия являются блок сообщения и выход предыдущего блока текста. Выход представляет собой хэш-значение всех блоков до этого момента.

Это хэш-значение вместе со следующим блоком сообщения становится следующим входом функции сжатия. Хэш-значением всего сообщения является хэш-значение последнего блока (рисунок 15).

Рисунок 15 — Вычисление хэш - функции

6.2.1N-хэш

N-хэш - это алгоритм, придуманный в 1990 году

62

исследователями Nippon Telephone and Telegraph, теми же людьми, которые изобрели FEAL. N-хэш использует 128-битовые блоки сообщения, сложную рандомизирующую функцию, похожую на FEAL, и выдает 128-битовое хэш-значение.

Хэш-значение каждого 128-битового блока является функцией блока и хэш-значения предыдущего блока.

H0 =I, где I - случайное начальное значение

Хэш-значение всего сообщения представляет собой хэшзначение последнего блока сообщения. Случайное начальное значение может быть любым числом, определенным пользователем (даже одними нулями).

Функция g достаточно сложна. Схема алгоритма приведена на рисунке 8. Сначала переставляются левая и правая 64-битовые половины 128-битового хэш-значения предыдущего блока Hi-1 а затем выполняется XOR с повторяющимся шаблоном (128битовым) и XOR с текущим блоком сообщения Мi-. Далее это значение каскадно преобразуется в N (на рисунках N= 8) стадий обработки. Другим входом стадии обработки является предыдущее хэш-значение, подвергнутое XOR с одной из восьми двоичных констант (рисунок 16).

Блок сообщения разбивается на четыре 32-битовых значения. Предыдущее хэш-значение также разбивается на четыре 32-битовых значения. Функции S0 и S1 те же самые, что и в FEAL.

So(a,b) = циклический сдвиг влево на два бита ((а + b) mod

256)

S1(a,b) = циклический сдвиг влево на два бита ((а + b+1) mod 256)

63

Рисунок 16 Схема N – хэш

6.2.2MD4

MD4 - это однонаправленная хэш-функция, изобретенная Роном Ривестом. MD обозначает Message Digest (краткое изложение сообщения), алгоритм для входного сообщения выдает 128-битовое хэш-значение, или краткое изложение сообщения.

Ривест описал цели, преследуемые им при разработке алгоритма :

Безопасность. Вычислительно невозможно найти два сообщения с одинаковым хэш-значением. Вскрытие грубой силой является самым эффективным.

64

Прямая безопасность. Безопасность MD4 не основывается на каких-либо допущениях, например, предположении о трудности разложения на множители.

Скорость. MD4 подходит для высокоскоростных программных реализаций. Она основана на простом наборе битовых манипуляций с 32-битовыми операндами.

Простота и компактность. MD4 проста, насколько это возможна, и не содержит больших структур данных или сложных программных модулей.

Удачна архитектура. MD4 оптимизирована для микропроцессорной архитектуры (особенно для микропроцессоров Intel), для более крупных и быстрых компьютеров можно выполнить любые необходимые изменения.

6.2.3MD5

MD5 - это улучшенная версия MD4. Хотя она сложнее MD4, их схемы похожи, и результатом MD5 также является 128битовое хэш-значение.

Описание MD5

После некоторой первоначальной обработки MD5 обрабатывает входной текст 512-битовыми блоками, разбитыми на 16 32-битовых подблоков. Выходом алгоритма является набор из четырех 32-битовых блоков, которые объединяются в единое 128-битовое хэш-значение.

Во – первых, сообщение дополняется так, чтобы его длина была на 64 бита короче числа, кратного 512. Этим дополнением является 1, за которой вплоть до конца сообщения следует столько нулей, сколько нужно. Затем, к результату добавляется 64-битовое представление длины сообщения (истинной, до дополнения). Эти два действия служат для того, чтобы длина сообщения была кратна 512 битам (что требуется для оставшейся части алгоритма), и чтобы гарантировать, что разные сообщения не будут выглядеть одинаково после дополнения. Инициализируются четыре переменных:

А = 0x01234567 В = Ox89abcdef С = Oxfedcba98 £ = 0x76543210

65

Они называются переменными сцепления.

Рисунок 17 — Одна стадия обработки N – хэш

Выход одной стадии обработки становится входом следующей стадии обработки. После последней стадии обработки выполняется ХОР выхода с Mi и Hi-1, а затем к хэшированию готов следующий блок.

66

Рисунок 18 Функция f

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

Четыре переменных копируются в другие переменные : А в а, В в Ь, С в с и D в d.

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

67

Рисунок 19 — Главный цикл MD5.

Рисунок 20 — Одна операция MD5

F(X,Y,Z) = (Х Y) ((¬X) Z)

G(X,Y,Z) = (X Z) (Y (¬Z)) H (X,Y,Z) = X Y Z

I (X,Y,Z) = Y (X (¬Z))

( - это XOR, - AND, - OR, ¬ NOT.)

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

Если Mj обозначает j-ый подблок сообщения (от 0 до 15), a

<<<s обозначает циклический сдвиг влево на s битов, то

68

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

FF(a,b,c,d,Mj,s,ti) означает а = b + ((а + F(b,c,d) + Мj• + ti)

<<<s)

GG(a,b,c,d,Mj,s,ti) означает а = b + ((а + G(b,c,d) + Мj + ti)

<<<s)

RR(a,b,c,d,Mj,s,tt) означает а = b + ((a + R(b,c,d) + Мj + ti)

<<<s)

HH(a,b,c,d,Mj,s,ti) означает a = b + ((a +I(b,c,d) + Мj + ti)

<<<s)

Четыре этапа (64 действия выглядят следующим образом): Этап 1:

FF(a, b, с, d, MO, 7, Oxd76aa478) FF(J, a, b, с, Mb 12, Oxe8c7b756) FF(c, d, a, b, M2, 17, Ox242070db) FF(ft, c, d, a, M3, 22, Oxclbdceee) FF(a, b, c, d, M4, 7, Oxf57cOfaf)

FF(J, a, b, c, M5, 12, Ox4787c62a) FF(c, d, a, b, M6, 17, Oxa8304613) FF(6, c, d, a, M7, 22, Oxfd469501) FF(a, b, c, d, M8, 7, Ox698098d8) FF(J, a, b, c, M9, 12, Ox8b44f7af) FF(c, d, a, b, Mw, 17, OxffffSbbl)

FF(ft, c, d, а, М„, 22, Ox895cd7be) FF(a, b, c, d, M12, 7, Ox6b901122) FF(J, a, b, c, M13, 12, Oxfd987193) FF(c, d, a, b, M14, 17, Oxa679438e) FF(ft, c, d, a, M15, 22, Ox49b40821)

Этап 2:

GG(a, b, c, d, Mb 5, Oxf61e2562)

GG(d, a, b, c, M6, 9, Oxc040b340) GG(c, d, a, b, М„, 14, Ox265e5a51) GG(b, c, d, a, M0, 20, Oxe9b6c7aa) GG(a, b, c, d, M5, 5, Oxd62fl05d) GG(d, a, b, c, M10, 9, 0x02441453) GG(c, d, a, b, M15, 14, Oxd8ale681) GG(b, c, d, a, M4, 20, Oxe7d3fbc8) GG(a, b, c, d, M9, 5, Ox2,lelcde6) GG(d, a, b, c, M14, 9, Oxc33707d6)

69

GG(c, d, a, b, M3, 14, Oxf4d50d87) GG(ft, c, d, a, M8, 20, Ox455al4ed) GG(a, b, c, d, M13, 5, Oxa9e3e905) GG(d, a, b, c, M2, 9, Oxfcefa3f8)

GG(c, d, a, b, M7, 14, Ox676fD2d9) GG(b, c, d, a, M12, 20, Ox8d2a4c8a)

ЭтапЗ:

HHO, b, с, d, M5, 4, Oxfffa3942) HHO, a, b, c, M8, 11, Ox8771f681) HH(c, d, a, 6, Mn, 16, Ox6d9d6122) HH(6, c, d, a, M14, 23, Oxfde5380c) HHO, 6, c, rf, Mb 4, Oxa4beea44) HHO, a, b, c, M4, 11, Ox4bdecfa9) HH(c, d, a, b, M7, 16, Oxf6bb4b60) HH(6, c, rf, a, M10, 23, OxbebfbcTO) HHO, 6, c, rf, M13, 4, Ox289b7ec6) HHO, a, 6, c, M0, 11, Oxeaal27fa) HH(c, d, a, b, M3, 16, Oxd4ef3085) HH(6, c, rf, a, M6, 23, 0x0488Ы05) HHO, 6, c, d, M9, 4, Oxd9d4d039) HHO, a, b, c, M12, 11, Oxe6db99e5) HH(c, d, a, b, Ми, 16, Oxlfa27cf8) HH(6, c, d, a, M2, 23, Oxc4ac5665)

Этап 4:

ПО, 6, с, d, M0, 6, Oxf4292244) ПО, a, b, c, M7, 10, Ox432aff97) II(c, d, a, b, M14, 15, Oxab9423a7) 11(6, c, d, a, M5, 21, Oxfc93a039)

ПО, b, c, d, M12, 6, Ox655b59c3) ПО, a, 6, c, M3, 10, Ox8fflccc92)

II(c, d, a, b, M10, 15, Oxffeff47d) 11(6, c, rf, a, Mb 21, Ox85845ddl) ПО, 6, c, rf, M8, 6, Ox6fa87e4f)

ПО, a, b, c, M15, 10, Oxfe2ce6eO) II(c, d, a, b, M6, 15, Oxa3014314) 11(6, c, d, a, M13, 21, Ox4e0811al) ПО, 6, c, rf, M4, 6, Oxf7537e82)

ПО, a, 6, c, Mn, 10, Oxbd3af235)

70