7.7. Какую
функцию вычисления MAC выбрать
129
7.7
Какую функцию вычисления MAC выбрать
Как вы, наверное, уже догадались, мы отдаем предпочтение комбинации
HMAC-SHA-256, т.е. алгоритму HMAC, в котором в качестве функции хэ-
ширования используется SHA-256. Мы бы действительно хотели, чтобы код
аутентичности сообщения был 256-битовым. В большинстве систем, однако,
используются лишь 64- или 96-битовые значения MAC, и даже тогда мно-
гие жалуются на большие расходы. Добавление к каждому сообщению по
32 байт (256 бит) ни в коей мере не принесет популярности вашему проекту.
Насколько мы знаем, для
функции вычисления MAC не существует атак на
основе коллизий, если использовать ее в классическом понимании, поэтому
надеемся, что усечение результата алгоритма HMAC-SHA-256 до 128 бит не
должно навредить безопасности системы.
Еще раз подчеркнем, что применять в качестве функции хэширования
HMAC
функцию SHA
d
-256 нет смысла, так как в алгоритме HMAC уже учте-
на проблема удлинения сообщения. Тем не менее для достижения 128-битово-
го уровня безопасности в HMAC следует использовать 256-битовую функцию
хэширования, поэтому SHA-1 нам не подходит.
Нельзя сказать, что алгоритм HMAC полностью нас устраивает. Мы ве-
рим в существование более быстрых
функций вычисления MAC, но подходя-
щих вариантов пока что не появилось.
7.8
Использование MAC
Правильно использовать MAC намного сложнее, чем кажется. Давайте
посмотрим, в чем же состоят основные проблемы.
Когда пользователь Б получает значение MAC
(
K, m
)
, он знает, что кто-
то, кому известен ключ
K
, подтвердил правильность сообщения
m
. Меж-
ду тем это отнюдь не обеспечивает действительной корректности сообщения.
Злоумышленник Е мог записать сообщение, отправленное пользователем А
пользователю Б, и затем послать копию этого сообщения пользователю Б ко-
гда-нибудь позднее. Если система последнего не имеет специальной защиты
от такого типа атак, пользователь Б примет эту копию как корректное сооб-
щение от пользователя А. Аналогичные проблемы возникают, если пользова-
тели А и Б применяют один и тот же ключ
K
для аутентификации трафика
сообщений в обоих направлениях. Злоумышленник Е может послать запи-
санное им сообщение обратно пользователю A, и тот поверит, что сообщение
было отправлено пользователем Б.
Довольно часто пользователям А и Б нужно аутентифицировать не толь-
ко сообщение
m
, но и некоторые дополнительные данные
d
. Это может быть