
- •Свойства, назначение и основы построения хеш-функций.
- •Обобщенная схема хэш – функции
- •Пример хэширования
- •Гипотеза о существовании односторонних функций.
- •Свойства односторонних хэш-функций.
- •Длины однонаправленных хэш-функций
- •Коллизии и реверс
- •Методы построения криптографических хэш-функций
- •Назначение криптографических хэш-функций
- •Методы криптоанализа хэш-функций
- •Построение хеш-функций на основе блочных шифров.
- •Схемы, в которых длина хэш-значения равна длине блока
- •Обобщенная хэш-функция, у которой длина хэш-значения равна длине блока
- •Четыре безопасных хэш-функции, у которых длина хэш-значения равна длине блока
- •Модификация схемы Davies-Меуеr
- •Модификация схемы Davies-Meyer.
- •Тандемная (Таndеm) и одновременная (Abreast) схемы Davies-Meyer.
- •Тандемная схема Davies-Meyer.
- •Самостоятельные хэш – алгоритмы. Краткое описание наиболее распространенных алгоритмов
- •Алгоритм md2
- •Алгоритм мd3
- •Алгоритм md4
- •Алгоритм md5
- •Описание мd5
- •Отличия md5 от md4
- •Полный пример md5
- •Криптоанализ Snefru
- •Выбор хэш-функции
- •Эвристические принципы, сформулированные Ривестом
- •Основные требования к алгоритму с точки зрения пользователя
Гипотеза о существовании односторонних функций.
Под односторонней функцией подразумевают функцию, определенную на множестве натуральных чисел и не требующую больших вычислительных ресурсов для вычисления своего значения.
В то же время вычисление обратной функции оказывается невозможно теоретически. Существование односторонних функций пока не доказано, поэтому все используемые в настоящее время хэш-функции являются лишь "кандидатами" в односторонние функции.
Криптографические хэш-функции разделяются на два класса:
хэш-функции без ключа (MDC (Modification (Manipulation) Detect Code) - коды),
хэш-функции c ключом (MАC (Message Authentication Code) - коды).
ПЕРЕВОД:
Message Authentification Code – код аутентификации сообщений
Manipulation Detection Code – код обнаружения манипуляций
Хэш-функции без ключа разделяются на два подкласса:
слабые хэш-функции,
сильные хэш-функции.
Слабой хэш-функцией называется односторонняя функция H(x), удовлетворяющая следующим условиям:
аргумент х может быть строкой бит произвольной длины;
значение H(x) должно быть строкой бит фиксированной длины;
значение H(x) легко вычислить;
для любого фиксированного x вычислительно невозможно найти другой x' != x, такой что H(x')=H(x). Пара x' != x, когда H(x')=H(x) называется коллизией хэш-функции.
Сильной хэш-функцией называется односторонняя функция H(x), удовлетворяющая условиям 1-3 для слабой хэш-функции и свойству 4': 4') вычислительно невозможно найти любую пару x' != x, такой что H(x')=H(x). Поскольку из свойств 1-2 следует, что множество определения хэш-функции значительно шире множества значений, то коллизии должны существовать. Свойство 4 требует, чтобы найти их для заданного значения х было практически невозможно. Требование 4' говорит о том, что у сильной хэш-функции вычислительно невозможно вообще найти какую-либо коллизию.
Хэш-функцией с ключом (MAC) называется функция H(k,x), удовлетворяющая свойствам:
аргумент х функции H(k,x) может быть строкой бит произвольной длины;
значение H(k,x) должно быть строкой бит фиксированной длины;
при любых k и x легко вычислить H(k,x);
для любого х должно быть трудно вычислить H(k,x) не зная k;
должно быть трудно определить k даже при большом числе неизвестных пар {x, H(k,x)} при выбранном наборе х или вычислить по этой информации H(k,x') для x' != x.
Свойства односторонних хэш-функций.
1. Они должны быть односторонними. Это означает, что легко взять сообщение и рассчитать его хэш-значение, но невозможно из хэш-значения восстановить сообщение-прообраз ("невозможно" ="нельзя за любое разумное время"). Это свойство называют «стойкостью в сильном смысле»
2. Они должны быть устойчивы к коллизиям. Это значит, что невозможно найти два таких сообщения, которые бы производили одинаковое хэш-значение.
3.Чувствительность – изменение даже одного бита исходных данных,
должно приводить к существенному изменению хеш-свертки.
Длины однонаправленных хэш-функций
64-битовые хэш-функции слишком малы, чтобы противостоять вскрытию. Более практичны однонаправленные хэш-функции, выдающие 128-битовые хэш-значения. При этом, чтобы найти два документа с одинаковыми хэш-значениями, для вскрытия методом дня рождения придется хэшировать 264 случайных документов, что, впрочем, недостаточно, если нужна длительная безопасность. NIST в своем Стандарте безопасного хэширования (Secure Hash Standart, SНS), использует 160-битовое хэш-значение. Это еще сильнее усложняет вскрытие методом дня рождения, для которого понадобится 280 хэширований.
Для удлинения хэш-значений, выдаваемых конкретной хэш-функцией, был предложен следующий метод:
Для сообщения с помощью одной из однонаправленных хэш-функций генерируется хэш-значение.
Хэш значение добавляется к сообщению.
Генерируется хэш-значение объединения сообщения и хэш-значения этапа (1).
Создается большее хэш-значение, состоящее из объединения хэш-значения этапа (1) и хэш-значения этапа (3).
Этапы (1)-(4) повторяются нужное количество раз для обеспечения требуемой длины хэш-значения .
Хотя никогда не была доказана безопасность или небезопасность этого метода, у ряда людей этот метод вызывает определенные сомнения.