Глава 6. Функции хэширования
SHA-1 — это 160-битовая функция хэширования, основанная на алгорит-
ме MD4. Наличие общего “предшественника” делает SHA-1 весьма схожей
с MD5; однако SHA-1 обладает более консервативной структурой и работа-
ет в два-три раза медленнее, чем MD5. Тем не менее никаких проблем без-
опасности, связанных с SHA-1, пока не возникло, а потому данная функция
получила самое широкое применение.
Функция SHA-1 использует 160-битовое промежуточное состояние, кото-
рое разбивается на пять 32-битовых слов. Как и MD5, она состоит из четырех
раундов, представляющих собой комбинацию элементарных операций над 32-
битовыми словами. Вместо того чтобы обрабатывать каждый блок сообще-
ния по четыре раза, SHA-1 использует линейную рекуррентную функцию,
чтобы “растянуть” 16 слов блока сообщения до нужных ей 80 слов. Это обоб-
щение метода, используемого в MD4. В MD5 каждый бит сообщения исполь-
зуется функцией перемешивания по четыре раза. В SHA-1 наличие линейной
рекуррентной функции гарантирует, что каждый бит сообщения использует-
ся функцией перемешивания по меньшей мере десяток раз. Что интересно,
единственным отличием SHA-1 от SHA-0 стало добавление к линейной ре-
куррентной функции циклического сдвига на один бит.
Основным недостатком SHA-1 является 160-битовый размер результата
функции хэширования. Для генерации коллизий достаточно выполнить лишь
2
80
шагов, что значительно ниже уровня безопасности современных блоч-
ных шифров с размерами ключей от 128 до 256 бит. Этого недостаточно
и для заявленного нами 128-битового уровня безопасности криптографиче-
ских систем.
6.2.3
SHA-256, SHA-384 и SHA-512
Несколько лет назад NIST опубликовал черновой стандарт, содержащий
три новых функции хэширования [74], которые выдают 256-, 384- и 512-бито-
вые результаты соответственно. Эти функции разработаны для применения
с 128-, 192- и 256-битовыми ключами алгоритма AES. Структура этих функ-
ций очень схожа со структурой SHA-1.
Эти функции хэширования слишком новы. Мы не хотели бы рекомендо-
вать их для практического применения, однако альтернативы все равно нет.
Чтобы достигнуть уровня безопасности, превышающего тот, который в состо-
янии обеспечить SHA-1, требуется функция хэширования с результатом боль-
шей длины. Ни один из опубликованных алгоритмов хэширования с результа-
тами большего размера еще не был достаточно проанализирован в публичных
источниках. Что же касается функций семейства SHA, они по крайней мере
были исследованы в NSA, а эта организация вроде бы знает, что делает.
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
.
112
Достарыңызбен бөлісу: |