Article de reference

MAC à une seule touche

One-key MAC ( OMAC ) est une famille de codes d'authentification de messages construits à partir d'un chiffrement par bloc très similaire à l' algorithme CBC-MAC . Il peut être ...

One-key MAC ( OMAC ) est une famille de codes d'authentification de messages construits à partir d'un chiffrement par bloc très similaire à l' algorithme CBC-MAC . Il peut être utilisé pour garantir l'authenticité et, par conséquent, l'intégrité des données. Deux versions sont définies :

  • L'OMAC original de février 2003, qui est rarement utilisé. Le nom préféré est désormais « OMAC2 ».
  • Le raffinement OMAC1, qui est devenu une recommandation NIST en mai 2005 sous le nom CMAC .

L'OMAC est libre pour toutes les utilisations : il n'est couvert par aucun brevet.

Histoire

Le cœur de l'algorithme CMAC est une variante de CBC-MAC que Black et Rogaway ont proposé et analysé sous le nom de « XCBC » et soumis au NIST . L'algorithme XCBC répond efficacement aux déficiences de sécurité de CBC-MAC, mais nécessite trois clés.

Iwata et Kurosawa ont proposé une amélioration de XCBC qui nécessite moins de matériel de clé (une seule clé) et ont nommé l'algorithme résultant One-Key CBC-MAC (OMAC) dans leurs articles. Ils ont ensuite soumis l'OMAC1 (= CMAC), un raffinement de l'OMAC et une analyse de sécurité supplémentaire.

Algorithme

Pour générer une balise CMAC de ℓ bits ( t ) d'un message ( m ) en utilisant un chiffrement par bloc de b bits ( E ) et une clé secrète ( k ), on génère d'abord deux sous-clés de b bits ( k 1 et k 2 ) en utilisant l'algorithme suivant (ce qui équivaut à une multiplication par x et x 2 dans un corps fini GF(2 b )). Soit ≪ l'opérateur standard de décalage à gauche et ⊕ l'opérateur ou exclusif bit à bit :

  1. Calculer une valeur temporaire k 0 = E k (0).
  2. Si msb( k 0 ) = 0, alors k 1 = k 0 ≪ 1, sinon k 1 = ( k 0 ≪ 1) ⊕ C ; où C est une certaine constante qui ne dépend que de b . (Plus précisément, C est le nombre de coefficients non dominants du polynôme binaire de degré b irréductible lexicographiquement premier avec le nombre minimal de uns : 0x1B pour les blocs de 64 bits, 0x87 pour les blocs de 128 bits et 0x425 pour les blocs de 256 bits.)
  3. Si msb( k 1 ) = 0 , alors k 2 = k 1 ≪ 1 , sinon k 2 = ( k 1 ≪ 1) ⊕ C .
  4. Touches de retour ( k 1 , k 2 ) pour le processus de génération MAC.

À titre d’exemple, supposons que b = 4 , C = 0011 2 et k 0 = E k (0) = 0101 2 . Alors k 1 = 1010 2 et k 2 = 0100 ⊕ 0011 = 0111 2 .

Le processus de génération de balises CMAC est le suivant :

  1. Diviser le message en blocs de b bits m = m 1 ∥ ... ∥ m n −1m n , où m 1 , ..., m n −1 sont des blocs complets. (Le message vide est traité comme un bloc incomplet.)
  2. Si m n est un bloc complet alors m n ′ = k 1m n sinon m n ′ = k 2 ⊕ ( m n ∥ 10...0 2 ) .
  3. Soit c 0 = 00...0 2 .
  4. Pour i = 1, ..., n − 1 , calculer c i = E k ( c i −1m i ) .
  5. c n = E k ( c n −1m n ′)
  6. Sortie t = msb ( c n ) .

Le processus de vérification est le suivant :

  1. Utilisez l'algorithme ci-dessus pour générer la balise.
  2. Vérifiez que la balise générée est égale à la balise reçue.

Variantes

CMAC-C1 est une variante de CMAC qui fournit des garanties de sécurité supplémentaires en matière d'engagement et de découverte de contexte .

Implémentations

  • Implémentation Python : voir l'utilisation de la AES_CMAC()fonction dans « impacket/blob/master/tests/misc/test_crypto.py », et sa définition dans « impacket/blob/master/impacket/crypto.py »
  • Implémentation de Ruby

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index