3. MAC-Algorithmen
- Message Authentication Code (MAC) Algorithmen
Abschnitt 8.2 von [RFC9052] enthält eine allgemeine Beschreibung von MAC-Algorithmen. Dieser Abschnitt definiert die Konventionen für zwei MAC-Algorithmen.
3.1. Hash-basierte Message Authentication Codes (HMACs)
HMAC [RFC2104] [RFC4231] wurde entwickelt, um Length-Extension-Angriffe zu bewältigen. Der HMAC-Algorithmus wurde auch so konzipiert, dass neue Hash-Funktionen direkt eingebunden werden können, ohne die Hash-Funktion selbst zu ändern. Der HMAC-Designprozess hat sich als solide erwiesen; obwohl die Sicherheit von Hash-Funktionen wie MD5 im Laufe der Zeit abgenommen hat, hat sich die Sicherheit von HMAC in Kombination mit MD5 noch nicht als beeinträchtigt erwiesen [RFC6151].
Der HMAC-Algorithmus wird durch ein inneres und äußeres Padding, eine Hash-Funktion (h) und eine Länge des Authentifizierungs-Tag-Werts parametrisiert. Für diese Spezifikation sind das innere und äußere Padding auf die in [RFC2104] festgelegten Werte fixiert. Die Länge des Authentifizierungs-Tags entspricht der Schwierigkeit, eine Fälschung zu erstellen. Für den Einsatz in eingeschränkten Umgebungen definieren wir einen HMAC-Algorithmus, der abgeschnitten (truncated) ist. Es gibt derzeit keine bekannten Probleme mit dem Abschneiden; die Sicherheitsstärke des Nachrichten-Tags ist jedoch entsprechend reduziert. Beim Abschneiden werden die linkesten Tag-Längen-Bits beibehalten und übertragen.
Die in diesem Dokument definierten Algorithmen finden sich in Tabelle 3.
+=============+=======+=========+============+======================+ | Name | Wert | Hash | Tag-Länge | Beschreibung | +=============+=======+=========+============+======================+ | HMAC | 4 | SHA-256 | 64 | HMAC mit SHA-256 | | 256/64 | | | | auf 64 Bit | | | | | | abgeschnitten | +-------------+-------+---------+------------+----------------------+ | HMAC | 5 | SHA-256 | 256 | HMAC mit SHA-256 | | 256/256 | | | | | +-------------+-------+---------+------------+----------------------+ | HMAC | 6 | SHA-384 | 384 | HMAC mit SHA-384 | | 384/384 | | | | | +-------------+-------+---------+------------+----------------------+ | HMAC | 7 | SHA-512 | 512 | HMAC mit SHA-512 | | 512/512 | | | | | +-------------+-------+---------+------------+----------------------+
Tabelle 3: HMAC-Algorithmuswerte
Einige Empfängeralgorithmen übertragen den Schlüssel, während andere einen Schlüssel aus geheimen Daten ableiten. Für solche Algorithmen, die den Schlüssel übertragen (wie AES Key Wrap), SOLLTE die Größe des HMAC-Schlüssels dieselbe Größe wie die Ausgabe der zugrunde liegenden Hash-Funktion haben. Für solche Algorithmen, die den Schlüssel ableiten (wie ECDH), MUSS der abgeleitete Schlüssel dieselbe Größe wie die Ausgabe der zugrunde liegenden Hash-Funktion haben.
Bei der Verwendung eines COSE-Schlüssels für diesen Algorithmus werden folgende Überprüfungen durchgeführt:
-
Das Feld "kty" MUSS vorhanden sein und es MUSS "Symmetric" sein.
-
Wenn das Feld "alg" vorhanden ist, MUSS es mit dem verwendeten HMAC-Algorithmus übereinstimmen.
-
Wenn das Feld "key_ops" vorhanden ist, MUSS es beim Erstellen eines HMAC-Authentifizierungs-Tags "MAC create" enthalten.
-
Wenn das Feld "key_ops" vorhanden ist, MUSS es beim Überprüfen eines HMAC-Authentifizierungs-Tags "MAC verify" enthalten.
Implementierungen, die MAC-Werte erstellen und validieren, MÜSSEN validieren, dass der Schlüsseltyp, die Schlüssellänge und der Algorithmus für die beteiligten Entitäten korrekt und angemessen sind.
3.1.1. Sicherheitsüberlegungen für HMAC
HMAC hat sich als widerstandsfähig gegen Angriffe erwiesen, selbst wenn es mit geschwächten Hash-Algorithmen verwendet wird. Der derzeit bekannteste Angriff besteht darin, den Schlüssel per Brute-Force zu erraten. Dies bedeutet, dass die Schlüsselgröße direkt mit der Sicherheit einer HMAC-Operation zusammenhängt.
3.2. AES Message Authentication Code (AES-CBC-MAC)
AES-CBC-MAC ist die Instanziierung der CBC-MAC-Konstruktion (definiert in [MAC]) unter Verwendung von AES als Blockchiffre. Der Kürze halber verwenden wir auch "AES-MAC", um auf AES-CBC-MAC zu verweisen. (Beachten Sie, dass dies nicht derselbe Algorithmus ist wie AES Cipher-Based Message Authentication Code (AES-CMAC) [RFC4493].)
AES-CBC-MAC wird durch die Schlüssellänge, die Länge des Authentifizierungs-Tags und den verwendeten Initialisierungsvektor (IV) parametrisiert. Für alle diese Algorithmen ist der IV auf nur Nullen fixiert. Wir stellen eine Reihe von Algorithmen für verschiedene Schlüssel- und Tag-Längen bereit. Die in diesem Dokument definierten Algorithmen finden sich in Tabelle 4.
+=========+=======+============+============+==================+
| Name | Wert | Schlüssel- | Tag-Länge | Beschreibung |
| | | länge | | |
+=========+=======+============+============+==================+
| AES-MAC | 14 | 128 | 64 | AES-MAC 128-Bit- |
| 128/64 | | | | Schlüssel, |
| | | | | 64-Bit-Tag |
+---------+-------+------------+------------+------------------+
| AES-MAC | 15 | 256 | 64 | AES-MAC 256-Bit- |
| 256/64 | | | | Schlüssel, |
| | | | | 64-Bit-Tag |
+---------+-------+------------+------------+------------------+
| AES-MAC | 25 | 128 | 128 | AES-MAC 128-Bit- |
| 128/128 | | | | Schlüssel, |
| | | | | 128-Bit-Tag |
+---------+-------+------------+------------+------------------+
| AES-MAC | 26 | 256 | 128 | AES-MAC 256-Bit- |
| 256/128 | | | | Schlüssel, |
| | | | | 128-Bit-Tag |
+---------+-------+------------+------------+------------------+
Tabelle 4: AES-MAC-Algorithmuswerte
Schlüssel können entweder aus einer Schlüsselstruktur oder einer Empfängerstruktur erhalten werden. Implementierungen, die MAC-Werte erstellen und validieren, MÜSSEN validieren, dass der Schlüsseltyp, die Schlüssellänge und der Algorithmus für die beteiligten Entitäten korrekt und angemessen sind.
Bei der Verwendung eines COSE-Schlüssels für diesen Algorithmus werden folgende Überprüfungen durchgeführt:
-
Das Feld "kty" MUSS vorhanden sein und es MUSS "Symmetric" sein.
-
Wenn das Feld "alg" vorhanden ist, MUSS es mit dem verwendeten AES-MAC-Algorithmus übereinstimmen.
-
Wenn das Feld "key_ops" vorhanden ist, MUSS es beim Erstellen eines AES-MAC-Authentifizierungs-Tags "MAC create" enthalten.
-
Wenn das Feld "key_ops" vorhanden ist, MUSS es beim Überprüfen eines AES-MAC-Authentifizierungs-Tags "MAC verify" enthalten.
3.2.1. Sicherheitsüberlegungen für AES-CBC-MAC
Es gibt eine Reihe von Angriffen gegen Cipher Block Chaining Message Authentication Code (CBC-MAC), die berücksichtigt werden müssen.
-
Ein einzelner Schlüssel darf nur für Nachrichten mit fester oder bekannter Länge verwendet werden. Wenn dies nicht der Fall ist, kann ein Angreifer angesichts von zwei Nachrichten- und Tag-Paaren eine Nachricht mit einem gültigen Tag generieren. Dies kann durch die Verwendung unterschiedlicher Schlüssel für Nachrichten unterschiedlicher Länge behoben werden. Die aktuelle Struktur mildert dieses Problem, da eine spezifische Codierungsstruktur, die Längen enthält, erstellt und signiert wird. (CMAC behebt dieses Problem ebenfalls.)
-
Wenn im Cipher Block Chaining (CBC)-Modus derselbe Schlüssel sowohl für Verschlüsselungs- als auch für Authentifizierungsoperationen verwendet wird, kann ein Angreifer Nachrichten mit einem gültigen Authentifizierungscode erzeugen.
-
Wenn der IV geändert werden kann, können Nachrichten gefälscht werden. Dies wird behoben, indem der IV auf nur Nullen fixiert wird.