|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Простые хэш-функцииВсе хэш-функции выполняются следующим образом. Входное значение (сообщение, файл и т.п.) рассматривается как последовательность n-битных блоков. Входное значение обрабатывается последовательно блок за блоком, и создается m-битное значение хэш-кода. Одним из простейших примеров хэш-функции является побитный XOR каждого блока: Сi = bi1 bi2 ... bikГде
В результате получается хэш-код длины n, известный как продольный избыточный контроль. Это эффективно при случайных сбоях для проверки целостности данных. Часто при использовании подобного продольного избыточного контроля для каждого блока выполняется однобитный циклический сдвиг после вычисления хэш-кода. Это можно описать следующим образом.
Это даст эффект "случайности" входа и уничтожит любую регулярность, которая присутствует во входных значениях. Хотя второй вариант считается более предпочтительным для обеспечения целостности данных и предохранения от случайных сбоев, он не может использоваться для обнаружения преднамеренных модификаций передаваемых сообщений. Зная сообщение, атакующий легко может создать новое сообщение, которое имеет тот же самый хэш-код. Для этого следует подготовить альтернативное сообщение и затем присоединить n-битный блок, который является хэш-кодом нового сообщения, и блок, который является хэш-кодом старого сообщения. Хотя простого XOR или ротационного XOR (RXOR) недостаточно, если целостность обеспечивается только зашифрованным хэш-кодом, а само сообщение не шифруется, подобная простая функция может использоваться, когда все сообщение и присоединенный к нему хэш-код шифруются. Но и в этом случае следует помнить о том, что подобная хэш-функция не может проследить за тем, чтобы при передаче последовательность блоков не изменилась. Это происходит в силу того, что данная хэш-функция определяется следующим образом: для сообщения, состоящего из последовательности 64-битных блоков Х1, Х2,..., ХN, определяется хэш-код С как поблочный XOR всех блоков, который присоединяется в качестве последнего блока: С = ХN+1 = X1 X2 ... XNЗатем все сообщение шифруется, включая хэш-код, в режиме СВС для создания зашифрованных блоков Y1, Y2,..., YN+1. По определению СВС имеем: Х1 = IV DK [Y1]Хi = Yi-1 DK [Yi]ХN+1 = YN DK [YN+1]Но XN+1 является хэш-кодом: ХN+1 = X1 X2 ... XN = (IV DK [Y1]) (Y1 DK [Y2]) ... (YN-1 DK [YN])Так как сомножители в предыдущем равенстве могут вычисляться в любом порядке, следовательно, хэш-код не будет изменен, если зашифрованные блоки будут переставлены. Первоначальный стандарт, предложенный NIST, использовал простой XOR, который применялся к 64-битным блокам сообщения, затем все сообщение шифровалось, используя режим СВС. "Парадокс дня рождения" Прежде чем рассматривать более сложные хэш-функции, необходимо проанализировать одну конкретную атаку на простые хэш-функции. Так называемый "парадокс дня рождения" состоит в следующем. Предположим, количество выходных значений хэш-функции Н равно 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 - ka1 - (1 - k/n) = k/n = 0,5k = n/2Таким образом, мы выяснили, что для m-битового хэш-кода достаточно выбрать 2m-1 сообщений, чтобы вероятность совпадения хэш-кодов была больше 0,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)!nkP (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-xP (n, k) > 1 - [e-1/n × e-2/n × … × e-k/n]P (n, k) > 1 - e-k(k-1)/n1/2 = 1 - e-k(k-1)/n2 = ek(k-1)/nln 2 = k (k-1) / 2nk (k-1) ≈ k2k = (2n × ln 2)1/2 = 1,17 n1/2 ≈ n1/2Если хэш-код имеет длину m бит, т.е. принимает 2m значений, то k = √2m = 2m/2Подобный результат называется "парадоксом дня рождения", потому что в соответствии с приведенными выше рассуждениями для того, чтобы вероятность совпадения дней рождения у двух человек была больше 0,5, в группе должно быть всего 23 человека. Этот результат кажется удивительным, возможно, потому, что для каждого отдельного человека в группе вероятность того, что с его днем рождения совпадет день рождения кого-то другого в группе, достаточно мала. Вернемся к рассмотрению свойств хэш-функций. Предположим, что используется 64-битный хэш-код. Можно считать, что это вполне достаточная и, следовательно, безопасная длина для хэш-кода. Например, если зашифрованный хэш-код С передается с соответствующим незашифрованным сообщением М, то противнику необходимо будет найти М' такое, что Н (М') = Н (М)для того, чтобы подменить сообщение и обмануть получателя. В среднем противник должен перебрать 263 сообщений для того, чтобы найти такое, у которого хэш-код равен перехваченному сообщению. Тем не менее, возможны различного рода атаки, основанные на "парадоксе дня рождения". Возможна следующая стратегия:
Таким образом, если используется 64-битный хэш-код, то необходимая сложность вычислений составляет порядка 232. В заключение отметим, что длина хэш-кода должна быть достаточно большой. Длина, равная 64 битам, в настоящее время не считается безопасной. Предпочтительнее, чтобы длина составляла порядка 100 битов. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |