MAC d'una clau
MAC d'una clau (OMAC) és una família de codis d'autenticació de missatges construïts a partir d'un xifrat de blocs semblant a l'algorisme CBC-MAC. Es pot utilitzar per garantir l'autenticitat i, per tant, la integritat de les dades. Es defineixen dues versions:
- L'OMAC original de febrer de 2003, que s'utilitza poques vegades. El nom preferit és ara "OMAC2".
- El refinament OMAC1, que es va convertir en una recomanació del NIST el maig de 2005 sota el nom de CMAC.
OMAC és gratuït per a tots els usos: no està cobert per cap patent.[1]
Història
El nucli de l'algoritme CMAC és una variació de CBC-MAC que Black i Rogaway van proposar i analitzar amb el nom de "XCBC" [2] i presentada al NIST.[3] L'algorisme XCBC aborda de manera eficient les deficiències de seguretat de CBC-MAC, però requereix tres claus.
Iwata i Kurosawa van proposar una millora de XCBC que requereix menys material clau (només una clau) i van anomenar l'algorisme resultant One-Key CBC-MAC (OMAC) als seus articles.[4] Més tard van presentar l'OMAC1 (=CMAC), [5] un perfeccionament de l'OMAC i una anàlisi de seguretat addicional.[6]
Algorisme
Per generar una etiqueta CMAC de ℓ-bit (t) d'un missatge (m) utilitzant un xifratge de bloc de bits b(E) i una clau secreta (k), primer genera dues subclaus de bits b (k1 i k2) utilitzant el següent algorisme (això és equivalent a la multiplicació per x i x2 en un camp finit GF(2b)). Sigui ≪ l'operador estàndard de desplaçament a l'esquerra i ⊕ l'exclusiu per bits o:
- Calcula un valor temporal k 0 = E k (0).
- Si msb( k 0 ) = 0, aleshores k 1 = k 0 ≪ 1, sinó k 1 = ( k 0 ≪ 1) ⊕ C ; on C és una certa constant que només depèn de b. (Concretament, C són els coeficients no líders del primer polinomi binari de grau b irreductible lexicogràficament amb el nombre mínim d'uns: 0x1B per a blocs de 64 bits, 0x87 per a blocs de 128 bits i 0x425 per a blocs de 256 bits.)
- Si msb(k1) = 0, aleshores k2 = k1 ≪ 1, sinó k2 = (k1 ≪ 1) ⊕ C.
- Retorna claus ( k 1, k 2 ) per al procés de generació MAC.
Com a petit exemple, suposem b = 4, C = 00112 i k0 = Ek(0) = 01012. Aleshores k1 = 10102 i k2 = 0100 ⊕ 0011 = 01112.
Implementacions
- Implementació de Python: vegeu l'ús de la funció
AES_CMAC()
a " impacket/blob/master/tests/misc/test_crypto.py " i la seva definició a " impacket/blob/master/impacket/crypto.py " - Implementació de Ruby
Referències
- ↑ Rogaway, Phillip. «CMAC: Non-licensing» (en anglès). [Consulta: May 27, 2020].
- ↑ Black, John. Advances in Cryptology – CRYPTO 2000 (en anglès). Springer, Berlin, Heidelberg, 2000-08-20, p. 197–215. DOI 10.1007/3-540-44598-6_12. ISBN 978-3540445982.
- ↑ Black, J; Rogaway, P "Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication".
- ↑ Iwata, Tetsu. «OMAC: One-Key CBC MAC». A: Fast Software Encryption (en anglès). 2887. Springer, Berlin, Heidelberg, 2003-02-24, p. 129–153 (Lecture Notes in Computer Science). DOI 10.1007/978-3-540-39887-5_11. ISBN 978-3-540-20449-7.
- ↑ Iwata, Tetsu; Kurosawa, Kaoru Advances in Cryptology, 2003. «In this note, we propose OMAC1, a new choice of the parameters of OMAC-family (see [4] for the details). Test vectors are also presented. Accordingly, we rename the previous OMAC as OMAC2. (That is to say, test vectors for OMAC2 were already shown in [3].) We use OMAC as a generic name for OMAC1 and OMAC2.»
- ↑ Iwata, Tetsu. «Stronger Security Bounds for OMAC, TMAC, and XCBC». A: Johansson. Progress in Cryptology - INDOCRYPT 2003 (en anglès). 2904. Springer Berlin Heidelberg, 2003-12-08, p. 402–415 (Lecture Notes in Computer Science). DOI 10.1007/978-3-540-24582-7_30. ISBN 9783540206095.