Бесключевые хэш-функции
известны как коды обнаружения ошибок (modification detection code(MDC)) и дают возможность с помощью дополнительных средств гарантировать целостность данных. На бесключевые хеш-функции накладываются определенные условия. Условия для бесключевых хэш-функций. однонаправленность устойчивость к коллизиям устойчивость к нахождению второго прообраза Применение ключевых хэш-функций Ключевые хеш-функции применяются в случаях, когда стороны имеют общий секретный ключ (доверяют друг другу). В подобных ситуациях обычно не требуется обеспечение защиты в случае отказа получателя от факта получения сообщения или его подмены. Поэтому от ключевых хеш-функций не требуется устойчивости к коллизиям. Вычисление дайджеста ключевых хеш-функций Для вычисления дайджеста ключевых хеш-функций могут использоваться блочные шифры, что неприемлемо по отношению к бесключевым хеш-функциям, так как противоречит требованию устойчивости к нахождению второго прообраза. Построение ключевых хэш-функций на основе бесключевых Ключевые хеш-функции могут строиться на основе бесключевых. При этом ключ приписывается к обрабатываемому сообщению, но не просто в начало его или конец, что приводит к потенциальным слабостям. Используются способы введения ключа, при которых он вставляется не один, а по крайней мере два раза. Укажем два способа: H=h(k, y, M, k) и H=h(k, y1, h(k, y2, M)), где y, y1 и y2 - дополнения ключа k до размера, кратного длине блока n. Недостатком такого метода является слишком большая длина дайджеста.
52)
Примеры хеш-функций: MD 5 (R. RIVEST 1992)
Данная хэш-функция является однопроходной хэш-функцией, размер хэш-функции - 128 бит. Алгоритм хэширования разделяется на две части. 1. Расширение исходного сообщения 2. Собственно хеширование . Расширение исходного битового сообщения M длины L происходит следующим образом. Пусть К - минимальное для которого выполняется соотношение L < K*512 - 64. Исходное сообщение M дополняется одним единичным битом и далее нулями до длины K*512 - 64, после чего к полученному сообщению дописывается 64 битный блок содержащий двоичную запись значения L. Таким образом, расширенное сообщение М имеет длину кратную 512 бит. Алгоритм хеширования работает циклами, за один цикл обрабатывается блок исходного сообщения длины 512 бит. Пусть A, B, C, D - 32 битные переменные. Перед первым циклом хеширования им присваиваются начальные значения (в шестнадцатиричной записи). Цикл состоит из четырех раундов каждый из которых вычисляет новые значения переменных A, B, C, D на основании их предыдущего значения и значения 64-битного отрезка хешируемого 512-битного блока исходного сообщения. В заключение цикла полученные значения A, B, C, D суммируются по модулю 232 с соответствующими значениями до начала цикла хэширования. Финальное (после обработки последнего блока хэшируемого сообщения) значение переменных A, B, C, D является 128 битным значением хэш-функции. Через функцию F обозначено соответствующее нелинейное преобразование (S, T, U или V). С учетом циклического сдвига переменных a, b, c, d в преобразованиях SS, TT, UU и VV. Один цикл работы алгоритма MD 5 можно представить в виде 64 тактов работы нелинейного регистра сдвига с четырьмя обратными связями, при этом первые 16 тактов работает первая обратная связь, следующие 16 вторая и т.д. В заключение рассмотрения алгоритма MD 5 отметим, что несмотря на многие попытки провести на него атаку, он остается практически стойким. MD 2 (R. RIVEST 1992)
Данный алгоритм также реализует 128 битную однопроходную хэш-функцию и в частности используется в протоколе PEM (Privacy -Enhanced Mail см. ниже). Этот алгоритм значительно более медленный чем остальные изложенные в книге примеры, однако, до сих пор у него не найдено даже потенциальных слабостей. Алгоритм использует случайную перестановку на байтах, задаваемую вектором (S0,S1, ... S255), сам автор, например, предлагает генерировать эту подстановку из битового вектора, получаемого записью числа p в двоичном виде. Также используется 48 байтный блок X=X0,...,X48, Алгоритм выглядит следующим образом; 1. Исходное сообщение расширяется до сообщения длины кратной 16 байтам. При этом если дописывается N байтов, до их значение равно 0, 1, ... N-1. 2. Сообщение дополняется 16 байтной контрольной суммой, которая содержит истинный размер сообщения и может содержать дополнительную информацию (например, CRC значение). 3. Первый 16 байтный блок блока X инициализируется нулями. 4. Второй 16 байтный блок блока Х устанавливается равным очередному 16 байтному блоку хэшируемого текста. 5. Третий 16 байтный блок блока Х получается покоординатным суммированием первого и второго 16-байтных блоков блока X. 6. Вычисляется преобразование (запишем его в терминах псевдоязыка программирования)
53) ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|