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