Код аутентификации сообщения (MAC)
Что такое Код аутентификации сообщения (MAC)?
Код аутентификации сообщения (MAC)Короткий тег на симметричном ключе, аутентифицирующий сообщение и обнаруживающий искажения; вычисляется и проверяется одним и тем же общим секретом.
Код аутентификации сообщения (Message Authentication Code, MAC) — это тег фиксированной длины, вычисляемый по сообщению с использованием симметричного секретного ключа так, что для проверки требуется тот же ключ. Он обеспечивает целостность и подлинность, но не невозможность отказа, поскольку ключ имеется у обеих сторон. Распространённые конструкции — HMAC (на основе хеша, RFC 2104), CMAC (CBC-MAC, NIST SP 800-38B), GMAC (используется в GCM), Poly1305 (в паре с ChaCha20 в ChaCha20-Poly1305, RFC 8439) и KMAC (построен на Keccak/SHA-3, NIST SP 800-185).
Причина, по которой существует HMAC, а не наивный MAC = H(key ‖ message), в том, что хеши на основе конструкции Меркла–Дамгора, такие как MD5, SHA-1 и SHA-256, уязвимы к атакам расширения длины (length-extension): атакующий, знающий корректный тег, может дописать данные и вычислить корректный тег для удлинённого сообщения без ключа. Вложенная структура HMAC H(key ⊕ opad ‖ H(key ⊕ ipad ‖ msg)) устраняет это и имеет формальное доказательство стойкости.
MAC должны проверяться за постоянное время — побайтовое сравнение тегов с ранним возвратом раскрывает их длину через тайминг, что сделало возможной атаку подделки против Keyczar в 2009 году. MAC лежат в основе аутентификации записей TLS, IPsec AH, JWT HS256, подписания API-запросов и каждого AEAD-режима. MAC поверх шифртекста (encrypt-then-MAC) предпочтительнее MAC-then-encrypt, который способствовал атакам padding-oracle, таким как Lucky Thirteen.
flowchart LR
subgraph Отправитель
M1[Сообщение] --> T1["MAC(key, message)"]
K1[Общий секретный ключ] --> T1
T1 --> S[Отправить сообщение + тег]
end
subgraph Получатель
S --> R["Пересчитать MAC(key, message)"]
K2[Общий секретный ключ] --> R
R --> C{"Сравнение с присланным тегом<br/>за постоянное время"}
C -->|Совпадает| OK[Принять: подлинно и не искажено]
C -->|Различается| NO[Отклонить: подделано или изменено]
end● Примеры
- 01
HMAC-SHA-256 используется для аутентификации запросов AWS Signature Version 4.
- 02
В TLS 1.3 в AEAD-режиме ChaCha20-Poly1305 целостность шифртекста обеспечивается Poly1305.
● Частые вопросы
Что такое Код аутентификации сообщения (MAC)?
Короткий тег на симметричном ключе, аутентифицирующий сообщение и обнаруживающий искажения; вычисляется и проверяется одним и тем же общим секретом. Относится к категории Криптография в кибербезопасности.
Что означает Код аутентификации сообщения (MAC)?
Короткий тег на симметричном ключе, аутентифицирующий сообщение и обнаруживающий искажения; вычисляется и проверяется одним и тем же общим секретом.
Как защититься от Код аутентификации сообщения (MAC)?
Защита от Код аутентификации сообщения (MAC) обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Код аутентификации сообщения (MAC)?
Распространённые альтернативные названия: MAC, Криптографическая контрольная сумма.