6.2. Современные
функции хэширования
109
из которых выполняется перемешивание блока сообщения и промежуточного
состояния. Перемешивание представляет собой комбинацию операции сложе-
ния, операций XOR, AND, OR и операций циклического сдвига битов над 32-
битовыми словами. (Более подробно это рассматривается в [81].) В каждом
раунде целый блок сообщения перемешивается с промежуточным состояни-
ем, поэтому каждое слово сообщения фактически используется четыре раза.
После четырех раундов функции
h
0
входное промежуточное состояние и ре-
зультат складываются для получения выходного значения функции
h
0
.
Описанный алгоритм оперирования 32-битовыми словами весьма эффек-
тивен в системах с 32-разрядной архитектурой. Данный подход был впервые
применен в алгоритме MD4 и сейчас широко используется во многих крип-
тографических функциях.
В основе итеративного подхода к построению функций хэширования ле-
жит следующая идея: если функция
h
0
обладает сопротивляемостью колли-
зиям, тогда
функция хэширования
h
, построенная на основе
h
0
, тоже будет
обладать сопротивляемостью коллизиям. В конце концов, любая коллизия в
h
может произойти только при возникновении коллизии в
h
0
. Недостатком
алгоритма MD5 является то, что у его функции сжатия
h
0
были выявлены
коллизии [20]. На данный момент известных атак на саму функцию MD5 еще
нет, однако наличие коллизий в
функции сжатия делает использование MD5
потенциально небезопасным.
Для большинства областей применения 128-битового размера хэш-кода
MD5 явно недостаточно. Используя парадокс задачи о днях рождения, можно
найти реальную коллизию для функции MD5 примерно за
2
64
оцениваний
функции хэширования, что совершенно не подходит для современных систем.
Поэтому мы не советуем использовать MD5.
6.2.2
SHA-1
Защищенный алгоритм хэширования (Secure Hash Algorithm — SHA) раз-
работан Управлением национальной безопасности США (National Security
Agency — NSA) и стандартизирован институтом NIST [70]. Первая версия
этого алгоритма называлась просто SHA (теперь ее часто называют SHA-0)
и имела весьма существенный недостаток. В NSA обнаружили этот недо-
статок и разработали
метод его исправления. Это было опубликовано NIST
в качестве улучшенной версии алгоритма SHA под названием SHA-1. Тем не
менее NIST не привел никаких сведений о найденном недостатке. Через три
года Шабо (Chabaud) и Жу (Joux) опубликовали статью о слабом месте алго-
ритма SHA-0 [16]. Эта ошибка была исправлена в алгоритме SHA-1, поэтому
можно предположить, что речь идет именно о том загадочном недостатке,
который был обнаружен NSA.