- •Введение
- •1.2 Пример хеш-функции.
- •Ключевые функции хеширования
- •Бесключевые функции хеширования
- •Обзор блочного шифрования.
- •Логика выполнения sha-1
- •Сравнение sha-1 и md5
- •Краткое описание алгоритма гост 28147-89
- •Алгоритм вычисления шаговой функции хэширования
- •Генерация ключей
- •Шифрующее преобразование
- •Перемешивающее преобразование
- •Различные атаки на хеш-функции.
-
Ключевые функции хеширования
В криптографических приложениях к ключевым функциям хеширования предъявляются следующие основные требования:
— невозможность фабрикации;
— невозможность модификации.
Первое требование означает высокую сложность подбора сообщения с правильным значением свертки. Второе — высокую сложность подбора для заданного сообщения с известным значением свертки другого сообщения с правильным значением свертки.
Заметим, что здесь и всюду ниже слова "высокая сложность" означают такую вычислительную сложность задачи, при которой ее решение с использованием вычислительной техники за реальное время невозможно.
Ключевые функции применяются в ситуациях, когда стороны доверяют друг другу и могут иметь общий секретный ключ. Обычно в этих условиях не требуется, чтобы система обеспечивала защиту в случае отказа получателя от факта получения сообщения или его подмены. Поэтому от ключевых хеш-функций не требуется устойчивости к коллизиям.
Обычные атаки на ключевые хеш-функции заключаются в имитации, то есть в передаче сфабрикованных сообщений в пустом канале, а также в подмене передаваемых сообщений с целью навязывания приемной стороне ложных сообщений.
Заметим, что из свойства вычислительной устойчивости вытекает невозможность определения ключа, используемого хеш-функцией, так как знание ключа дает возможность вычислять значение свертки для любого набора данных. В то же время обратное утверждение неверно, так как подбор значения функции хеширования возможен в некоторых случаях без предварительного определения ключа.
В качестве примера рассмотрим широко распространенную хеш-функцию, построенную на основе одношаговой сжимающей функции вида
где — алгоритм блочного шифрования.
Для вычисления значения сообщение представляется в виде последовательности n-битовых блоков . Если при этом длина сообщения не кратна длине блока, то последний блок неким специальным образом дополняется до полного блока. Алгоритм вычисления свертки имеет следующий вид:
Еще одной основой для построения ключевых хеш-функций могут служить бесключевые хеш-функции. При этом для вычисления значения свертки ключ приписывается к исходному сообщению.
Заметим, что если ключ просто дописывать в начало или в конец исходного сообщения, то это может приводить к потенциальным слабостям, позволяющим в некоторых случаях осуществлять модификацию сообщений.
Пусть, например, ключ k добавляется к началу сообщения согласно формуле . Если функция h построена на основе одношаговой сжимающей функции по формуле (1), то по известным значениям M и можно вычислять значения этой функции для любых сообщений вида с дописанным произвольным окончанием . Это объясняется итеративностью процедуры вычисления функции, в силу которой для нахождения значения не требуется знание ключа k, достаточно воспользоваться уже вычисленным "промежуточным" значением Н. Поэтому такая функция не устойчива к модификации.
В случае когда ключ добавляется в конец сообщения согласно формуле , знание коллизии для функции h, то есть пары , такой, что , позволяет вычислять значения для любого ключа k .
В связи с этим более предпочтительными являются способы введения ключа, при которых ключ вставляется в сообщение не один, а, по крайней мере, два раза. Указывается два таких способа:
где — дополнения ключа k до размера, кратного длине блока п. Для определенных бесключевых хеш-функций h такой подход позволяет строить эффективно вычислимые и устойчивые к атакам ключевые хеш-функции. Недостатком такого метода является слишком большая длина п свертки. Дело в том, что для целей проверки целостности обычно выбирают длину свертки п в пределах 32-64, а для аутентификации необходимо условие и n>128.
В заключение отметим, что существуют ключевые хеш-функции, не использующие какую-либо основу типа блочного шифрования или вычисления бесключевой хеш-функции, а разработанные независимо с учетом эффективной реализации на современных ЭВМ.