Глава 7. Коды аутентичности сообщений
для которых
M
(
a
) =
M
(
b
)
, вы не сможете применить их, чтобы подде-
лать значение MAC для нового сообщения, как при использовании алгоритма
CBC-MAC.
Существует несколько теоретических результатов, которые показывают,
что при использовании конкретной модели доказательств алгоритм CBC-
MAC обеспечивает 64-битовый уровень безопасности, если размер блока ра-
вен 128 бит [4]. К сожалению, этого недостаточно для обеспечения уровня
безопасности, установленного для наших систем. Мы бы смогли использо-
вать CBC-MAC, если бы имели блочный шифр с 256-битовым блоком.
Использовать алгоритм CBC-MAC следует крайне осторожно. Функцию
CBC-MAC нельзя применять к самому сообщению — это позволяет злоумыш-
леннику осуществлять довольно простые атаки. Необходимо поступить не-
сколько иначе.
1. Создайте строку
s
путем конкатенации значений
l
и
m
, где
l
— это длина
сообщения
m
, представленного в формате фиксированной длины.
2. Дополните строку
s
, чтобы ее длина стала кратной длине блока. (Более
подробно это рассматривается в разделе 5.1.)
3. Примените функцию CBC-MAC к дополненной строке
s
.
4. Результатом применения функции CBC-MAC считайте последний блок
шифрованного текста или часть этого блока. Не используйте в качестве
MAC промежуточные значения.
Алгоритм CBC-MAC имеет одно существенное преимущество: он исполь-
зует тот же тип вычислений, что и режимы работы блочных шифров. К содер-
жимому сообщения применяются только две функции — шифрования и вы-
числения MAC, а значит, у нас есть только две критические точки в отноше-
нии скорости работы. Использование в этих точках одних и тех же элемен-
тарных функций позволит повысить эффективность реализаций, особенно
аппаратных.
Несмотря на это, мы не рекомендуем использовать CBC-MAC, поскольку
сделать это правильно крайне сложно.
7.5
HMAC
Если идеальная функция вычисления MAC — это случайное отображение,
а у нас уже есть функции хэширования, которые ведут себя как случайное
отображение, то почему бы не вычислять значение MAC с помощью функ-
ции хэширования? Именно эта идея легла в основу алгоритма HMAC [3, 58].
Разработчики данного алгоритма, конечно же, знали о проблемах функций
хэширования, которые обсуждаются в главе 6, “Функции хэширования”. В то
время как функции хэширования обеспечивают только
n/
2
-битовый уровень
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-
124
Достарыңызбен бөлісу: |