Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Простые хэш-функции




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

Одним из простейших примеров хэш-функции является побитное сложение по модулю 2 (операция XOR) каждого блока:

Сi = bi1 Å bi2 Å... Å bik

Где: Сi i ый бит хэш-кода, 1≤ i ≤ n,

k – число n – битных блока входа,

bij – i – ый бит в j – ом блоке,

Å - операция XOR.

В результате получается хэш-код длины n, известный как продольный избыточный контроль. Это эффективно при случайных сбоях для проверки целостности данных.

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

  1. Установить n -битный хэш-код в ноль.
  2. Для каждого n -битного блока данных выполнить следующие операции:

- сдвинуть циклически текущий хэш-код влево на один бит;

- выполнить операцию XOR для очередного блока и хэш-кода.

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

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

"Парадокс дня рождения"

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

Так называемый " парадокс дня рождения " состоит в следующем. Предположим, количество выходных значений хэш-функции Н равно n. Каким должно быть число k, чтобы для конкретного значения X и значений Y1, …, Yk вероятность того, что хотя бы для одного Yi выполнялось равенство

H (X) = H (Y) была бы больше 0,5.

Для одного Y вероятность того, что H (X) = H (Y), равна 1/n.

Соответственно, вероятность того, что H(X) ≠ H(Y), равна 1 – 1/n.

Если создать k значений, то вероятность того, что ни для одного из них не будет совпадений, равна произведению вероятностей, соответствующих одному значению, т.е. (1 – 1/n)k.

Следовательно, вероятность, по крайней мере, одного совпадения равна

1 – (1 – 1/n)k

По формуле бинома Ньютона

(1 – a)k = 1 – ka + (k(k-1)/2!)a2 -... ≈ 1 – ka

1 – (1 – k/n) = k/n = 0,5

Следовательно – k = n/2

Таким образом, мы выяснили, что для m -битового хэш-кода достаточно выбрать 2m-1 сообщений, чтобы вероятность совпадения хэш-кодов была больше 0,5, то есть не будет выполняться п.5 вышеперечисленных свойств хэш-функций.

Теперь рассмотрим следующую задачу: обозначим P (n, k) вероятность того, что в множестве из k элементов, каждый из которых может принимать n значений, есть хотя бы два с одинаковыми значениями. Чему должно быть равно k, чтобы P (n, k) была бы больше 0,5?

Число различных способов выбора элементов таким образом, чтобы при этом не было дублей, равно

n(n-1) … (n-k+1)n!/(n-k)!

Всего возможных способов выбора элементов равно - nk

Вероятность того, что дублей нет, равна - n!/(n-k)!nk

Вероятность того, что есть дубли, соответственно равна

1 – n!/(n-k)!nk

P (n, k) = 1 – n! /((n-k)! ´ nk) =

1 – (n ´ (n-1) ´ … ´ (n-k-1)) / nk =

1 – [(n-1)/n ´ (n-2)/n ´ … ´ (n-k+1)/n] =

1 – [(1- 1/n) ´ (1 – 2/n) ´ … ´ (1 – (k-1)/n)]

Известно, что

1 – x ≤ e-x

P (n, k) > 1 – [e-1/n ´ e-2/n ´ … ´ e-k/n]

P (n, k) > 1 – e-k(k-1)/n

1/2 = 1 – e-k(k-1)/n

2 = ek(k-1)/n

ln 2 = k (k-1) / 2n

k (k-1) ≈ k2

k = (2n ´ ln 2)1/2 = 1,17 n1/2 ≈ n1/2

Если хэш-код имеет длину m бит, т.е. принимает 2m значений, то

k = √ 2m = 2m/2

Подобный результат называется "парадоксом дня рождения", потому что в соответствии с приведенными выше рассуждениями для того, чтобы вероятность совпадения дней рождения у двух человек была больше 0,5, в группе должно быть всего 23 человека. Этот результат кажется удивительным, возможно, потому, что для каждого отдельного человека в группе вероятность того, что с его днем рождения совпадет день рождения кого-то другого в группе, достаточно мала.

Вернемся к рассмотрению свойств хэш-функций. Предположим, что используется 64-битный хэш-код. Можно считать, что это вполне достаточная и, следовательно, безопасная длина для хэш-кода. Например, если зашифрованный хэш-код С передается с соответствующим незашифрованным сообщением М, то противнику необходимо будет найти М' такое, что

Н (М') = Н (М)

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

Тем не менее, возможны различного рода атаки, основанные на "парадоксе дня рождения". Возможна следующая стратегия:

1. Противник создает 2m/2 вариантов сообщения, каждое из которых имеет некоторый определенный смысл. Противник подготавливает такое же количество сообщений, каждое из которых является поддельным и предназначено для замены настоящего сообщения.

2. Два набора сообщений сравниваются в поисках пары сообщений, имеющих одинаковый хэш-код. Вероятность успеха в соответствии с "парадоксом дня рождения" больше, чем 0,5. Если соответствующая пара не найдена, то создаются дополнительные исходные и поддельные сообщения до тех пор, пока не будет найдена пара.

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

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

В заключение отметим, что длина хэш-кода должна быть достаточно большой. Длина, равная 64 битам, в настоящее время не считается безопасной. Предпочтительнее, чтобы длина составляла порядка 100 битов и более.




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 359; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.