3. Algoritmi MAC
- Algoritmi di Codice di Autenticazione del Messaggio (MAC)
La Sezione 8.2 di [RFC9052] contiene una descrizione generica degli algoritmi MAC. Questa sezione definisce le convenzioni per due algoritmi MAC.
3.1. Codici di Autenticazione del Messaggio Basati su Hash (HMACs)
HMAC [RFC2104] [RFC4231] è stato progettato per affrontare gli attacchi di estensione della lunghezza. L'algoritmo HMAC è stato anche progettato per consentire di inserire direttamente nuove funzioni di hash senza modifiche alla funzione di hash stessa. Il processo di progettazione di HMAC si è dimostrato solido; sebbene la sicurezza delle funzioni di hash come MD5 sia diminuita nel tempo, la sicurezza di HMAC combinata con MD5 non è ancora stata dimostrata compromessa [RFC6151].
L'algoritmo HMAC è parametrizzato da un padding interno ed esterno, una funzione di hash (h) e una lunghezza del valore del tag di autenticazione. Per questa specifica, il padding interno ed esterno è fissato ai valori impostati in [RFC2104]. La lunghezza del tag di autenticazione corrisponde alla difficoltà di produrre una falsificazione. Per l'uso in ambienti vincolati, definiamo un algoritmo HMAC troncato. Al momento non ci sono problemi noti con il troncamento; tuttavia, la forza di sicurezza del tag del messaggio è corrispondentemente ridotta. Durante il troncamento, i bit di lunghezza del tag più a sinistra vengono mantenuti e trasmessi.
Gli algoritmi definiti in questo documento si trovano nella Tabella 3.
+=============+=======+=========+============+======================+ | Nome | Valore| Hash | Lunghezza | Descrizione | | | | | Tag | | +=============+=======+=========+============+======================+ | HMAC | 4 | SHA-256 | 64 | HMAC con SHA-256 | | 256/64 | | | | troncato a 64 bit | +-------------+-------+---------+------------+----------------------+ | HMAC | 5 | SHA-256 | 256 | HMAC con SHA-256 | | 256/256 | | | | | +-------------+-------+---------+------------+----------------------+ | HMAC | 6 | SHA-384 | 384 | HMAC con SHA-384 | | 384/384 | | | | | +-------------+-------+---------+------------+----------------------+ | HMAC | 7 | SHA-512 | 512 | HMAC con SHA-512 | | 512/512 | | | | | +-------------+-------+---------+------------+----------------------+
Tabella 3: Valori dell'Algoritmo HMAC
Alcuni algoritmi del destinatario trasportano la chiave, mentre altri derivano una chiave da dati segreti. Per quegli algoritmi che trasportano la chiave (come AES Key Wrap), la dimensione della chiave HMAC DOVREBBE essere la stessa dimensione dell'output della funzione di hash sottostante. Per quegli algoritmi che derivano la chiave (come ECDH), la chiave derivata DEVE essere della stessa dimensione dell'output della funzione di hash sottostante.
Quando si utilizza una chiave COSE per questo algoritmo, vengono effettuati i seguenti controlli:
-
Il campo "kty" DEVE essere presente, e DEVE essere "Symmetric".
-
Se il campo "alg" è presente, DEVE corrispondere all'algoritmo HMAC utilizzato.
-
Se il campo "key_ops" è presente, DEVE includere "MAC create" quando si crea un tag di autenticazione HMAC.
-
Se il campo "key_ops" è presente, DEVE includere "MAC verify" quando si verifica un tag di autenticazione HMAC.
Le implementazioni che creano e convalidano valori MAC DEVONO convalidare che il tipo di chiave, la lunghezza della chiave e l'algoritmo siano corretti e appropriati per le entità coinvolte.
3.1.1. Considerazioni sulla Sicurezza per HMAC
HMAC si è dimostrato resistente agli attacchi anche quando utilizzato con algoritmi di hash indeboliti. Il miglior attacco conosciuto attualmente è forzare la chiave. Ciò significa che la dimensione della chiave sarà direttamente correlata alla sicurezza di un'operazione HMAC.
3.2. Codice di Autenticazione del Messaggio AES (AES-CBC-MAC)
AES-CBC-MAC è l'istanziazione della costruzione CBC-MAC (definita in [MAC]) utilizzando AES come cifrario a blocchi. Per brevità, usiamo anche "AES-MAC" per riferirci a AES-CBC-MAC. (Si noti che questo non è lo stesso algoritmo di AES Cipher-Based Message Authentication Code (AES-CMAC) [RFC4493].)
AES-CBC-MAC è parametrizzato dalla lunghezza della chiave, dalla lunghezza del tag di autenticazione e dal Vettore di Inizializzazione (IV) utilizzato. Per tutti questi algoritmi, l'IV è fissato a tutti zeri. Forniamo una serie di algoritmi per varie lunghezze di chiave e tag. Gli algoritmi definiti in questo documento si trovano nella Tabella 4.
+=========+=======+============+============+==================+
| Nome | Valore| Lunghezza | Lunghezza | Descrizione |
| | | Chiave | Tag | |
+=========+=======+============+============+==================+
| AES-MAC | 14 | 128 | 64 | Chiave AES-MAC |
| 128/64 | | | | 128-bit, tag |
| | | | | 64-bit |
+---------+-------+------------+------------+------------------+
| AES-MAC | 15 | 256 | 64 | Chiave AES-MAC |
| 256/64 | | | | 256-bit, tag |
| | | | | 64-bit |
+---------+-------+------------+------------+------------------+
| AES-MAC | 25 | 128 | 128 | Chiave AES-MAC |
| 128/128 | | | | 128-bit, tag |
| | | | | 128-bit |
+---------+-------+------------+------------+------------------+
| AES-MAC | 26 | 256 | 128 | Chiave AES-MAC |
| 256/128 | | | | 256-bit, tag |
| | | | | 128-bit |
+---------+-------+------------+------------+------------------+
Tabella 4: Valori dell'Algoritmo AES-MAC
Le chiavi possono essere ottenute da una struttura di chiave o da una struttura del destinatario. Le implementazioni che creano e convalidano valori MAC DEVONO convalidare che il tipo di chiave, la lunghezza della chiave e l'algoritmo siano corretti e appropriati per le entità coinvolte.
Quando si utilizza una chiave COSE per questo algoritmo, vengono effettuati i seguenti controlli:
-
Il campo "kty" DEVE essere presente, e DEVE essere "Symmetric".
-
Se il campo "alg" è presente, DEVE corrispondere all'algoritmo AES-MAC utilizzato.
-
Se il campo "key_ops" è presente, DEVE includere "MAC create" quando si crea un tag di autenticazione AES-MAC.
-
Se il campo "key_ops" è presente, DEVE includere "MAC verify" quando si verifica un tag di autenticazione AES-MAC.
3.2.1. Considerazioni sulla Sicurezza per AES-CBC-MAC
Esistono numerosi attacchi contro Cipher Block Chaining Message Authentication Code (CBC-MAC) che devono essere considerati.
-
Una singola chiave deve essere utilizzata solo per messaggi di lunghezza fissa o nota. Se questo non è il caso, un attaccante sarà in grado di generare un messaggio con un tag valido date due coppie di messaggio e tag. Questo può essere affrontato utilizzando chiavi diverse per messaggi di lunghezze diverse. La struttura attuale mitiga questo problema, poiché viene costruita e firmata una struttura di codifica specifica che include le lunghezze. (CMAC affronta anche questo problema.)
-
Nella modalità Cipher Block Chaining (CBC), se la stessa chiave viene utilizzata sia per le operazioni di crittografia che per quelle di autenticazione, un attaccante può produrre messaggi con un codice di autenticazione valido.
-
Se l'IV può essere modificato, allora i messaggi possono essere falsificati. Questo viene affrontato fissando l'IV a tutti zeri.