6.3. Недостатки функций хэширования
111
Функция SHA-256 работает намного медленнее, чем SHA-1. Хэширова-
ние длинных сообщений с помощью SHA-256 занимает примерно столько же
времени, как шифрование сообщения с помощью AES или Twofish, а может,
и немного больше. Это не так уж плохо. Поскольку для криптографического
сообщества хэширование оказалось более сложной проблемой, чем шифро-
вание, не удивительно, что функция хэширования работает медленнее, чем
функция шифрования. Напротив, удивляет высокая скорость работы SHA-1
и MD5. С другой стороны, возможности осуществления атак на эти быстрые
функции хэширования исследованы очень мало — во всяком случае несопо-
ставимо меньше, чем возможности нападения на блочные шифры.
Функция SHA-384 довольно бесполезна. Для вычисления ее результата
необходимо проделать столько же работы, как и для функции SHA-512, а за-
тем отбросить некоторые биты. Непонятно, зачем для этого понадобилось вво-
дить отдельную функцию. Рекомендуем придерживаться функций SHA-256
и SHA-512.
6.3
Недостатки функций хэширования
К сожалению, все описанные
функции хэширования имеют ряд недостат-
ков, которые вынуждают забраковать эти функции в соответствии с нашим
определением безопасности.
6.3.1
Удлинение сообщения
Один из самых серьезных недостатков всех рассмотренных функций хэ-
ширования — удлинение сообщения. Этот недостаток приводит к реальным
проблемам, а между тем его было бы так легко избежать. Вот в чем состоит
проблема. Некоторое сообщение
m
разбивается на блоки
m
1
, . . . , m
k
и хэши-
руется, в результате чего получается значение
H
. Теперь возьмем сообще-
ние
m
0
, которое разбивается на блоки
m
1
, . . . , m
k
, m
k
+1
. Поскольку первые
k
блоков сообщения
m
0
идентичны первым
k
блокам сообщения
m
, значение
h
(
m
)
соответствует промежуточному результату, полученному при вычисле-
нии
h
(
m
0
)
после обработки первых
k
блоков сообщения
m
0
. Получается, что
h
(
m
0
) =
h
0
(
h
(
m
)
, m
k
+1
)
. Используя MD5 или любую
функцию семейства SHA,
необходимо конструировать сообщение
m
0
таким образом, чтобы в его состав
включались биты дополнения и поле длины сообщения. Впрочем, это не про-
блема, поскольку метод построения таких полей широко известен.
Проблема удлинения сообщения возникла из-за того, что в конце вычисле-
ния результата
функции хэширования не выполняется никакой специальной
обработки данных. Как следствие этого, значение
h
(
m
)
снабжает злоумыш-
ленника самой непосредственной информацией относительно промежуточно-
го состояния, полученного после сжатия первых
k
блоков сообщения
m
0
.