7.5. HMAC
123
безопасности по отношению к некоторым типам атак, функция вычисле-
ния MAC должна обеспечивать
n
-битовый уровень безопасности. Определять
функцию MAC(
K, m
)
как
h
(
K
k
m
)
,
h
(
m
k
K
)
или даже как
h
(
K
k
m
k
K
)
при использовании одной из стандартных итеративных
функций хэширова-
ния небезопасно [76]. Если присоединить ключ к началу сообщения, он станет
уязвимым по отношению к атакам с удлинением сообщения. Если же присо-
единить ключ к концу сообщения, сообразительный злоумышленник сможет
восстановить ключ примерно за
2
n/
2
шагов.
Разработчики алгоритма HMAC не только учли все эти моменты, но и от-
неслись к этому весьма серьезно. Структура функции HMAC позволяет из-
бежать атак с восстановлением ключа и атак, которые могут быть проведе-
ны злоумышленником в автономном режиме, без взаимодействия с системой.
Несмотря на это, HMAC все еще ограничен
n/
2
-битовым уровнем безопас-
ности. Это объясняется наличием атак, построенных на парадоксе задачи
о днях рождения, которые используют внутренние коллизии итеративных
функций хэширования. Алгоритм HMAC гарантирует, что выполнение та-
ких атак потребует
2
n/
2
взаимодействий с атакуемой системой. Это гораздо
сложнее, нежели выполнить
2
n/
2
вычислений на собственном компьютере.
Для простоты мы не будем проводить различий между оперативными
и автономными атаками. Будем лишь оценивать объем работы, который при-
дется проделать злоумышленнику. Итак, даже несмотря на тщательно про-
работанную структуру, уровень безопасности HMAC ограничен
n/
2
битами
для
n
-битовой функции хэширования.
В статье [3], посвященной алгоритму HMAC, приведено несколько удач-
ных примеров проблем, возникающих в том случае, когда у криптографи-
ческих функций (в данном случае функций хэширования) обнаруживаются
неожиданные свойства. Вот почему мы так настойчиво призываем обеспечи-
вать простые спецификации поведения криптографических функций.
Значение HMAC подсчитывается по формуле
h
(
K
⊕
a
k
h
(
K
⊕
b
k
m
))
,
где
a
и
b
— некоторые константы. Как видите, сам текст сообщения хэширу-
ется только единожды, а полученный результат еще раз хэшируется вместе
с ключом аутентификации. Более подробно об алгоритме HMAC можно про-
читать в его спецификациях [3, 58]. Алгоритм HMAC работает с любыми ите-
ративными
функциями хэширования, которые описаны в главе 6, “Функции
хэширования”. Это единственное исключение, когда можно непосредственно
применять функции SHA, а не SHA
d
— в HMAC уже учтены проблемы, на
решение которых направлены функции SHA
d
.
Нам нравится HMAC. Он красив, эффективен и прост в реализации. В ка-
честве
функций хэширования HMAC обычно применяют MD5 или SHA-1.
Сегодня подобные реализации данного алгоритма содержатся во многих про-
граммных библиотеках. Несмотря на это, для достижения заявленного 128-