OMAC/CMAC

Da testwiki.
Versione del 11 apr 2020 alle 14:14 di imported>Pil56 (smistamento lavoro sporco e fix vari using AWB)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

OMAC è un codice di autenticazione per messaggi basato su cifratura a blocchi, progettato da Tetsu Iwata e Kaoru Kurosawa della Nagoya University; si tratta di una semplice variante del CBC-MAC (Cipher Block Chaining Message Authentication Code). L'acronimo OMAC sta per One-Key CBC-MAC.

È sicuro per messaggi di qualsiasi lunghezza, a differenza di CBC-MAC, che lo è soltanto per messaggi di lunghezza fissa.

OMAC è il nome generico per OMAC1 e OMAC2. Secondo le specifiche del NIST, OMAC1 è equivalente a CMAC.

OMAC1

Le operazioni preliminari sono la scelta di un algoritmo di crittografia a blocchi E (indicheremo con n la lunghezza in bit del blocco) e della lunghezza del codice CMAC t. Non ci sono restrizioni sull'algoritmo crittografico da utilizzare.

Occorre, inoltre, che i due interlocutori condividano una chiave segreta di k bit che servirà come chiave per l'algoritmo E precedentemente selezionato.

Pre-processing

A questo punto il processo di generazione si articola nei seguenti passi:

  1. Per prima cosa si cripta un blocco di n bit tutti pari a 0 (chiamiamolo 0n) ottenendo un certo valore L=E (K, 0n).
  2. Si controlla se il bit più significativo di L è 0: se ciò accade si effettua uno shift di un bit nella direzione del bit più significativo. Il bit più significativo viene, quindi, scartato ed uno 0 viene posto nel bit meno significativo. Chiameremo il risultato L.u. Quindi L.u =L<<1, che equivale a quanto detto prima. In caso contrario L.u=L<<1Costante, dove Costante is the n-bit constant.
  3. Si controlla il bit più significativo di L.u. Se è pari a 0 allora L.u2= (L.u)<<1, diversamente L.u2= ((L.u)<<1)Costante.
  4. A questo punto si memorizzano sia L.u che L.u2.

Generazione del codice MAC

Sia M il messaggio. Si suddivide il messaggio M in blocchi di n bit.

  1. Y[0]=0n, che significa riempire Y[0] con un numero n di 0.
  2. Per ogni i da 1 a m-1: Y[i]=E(K,M[i]Y[i1]).
  3. Se la lunghezza dell'ultimo blocco del messaggio è di n bit allora X[m]=M[m]Y[m1]L.u, altrimenti effettua il padding sull'ultimo blocco aggiungendo 1 seguito da tanti 0 quanti sono necessari a ricondurre il blocco ad una lunghezza di n bit e poi calcola X[m]=M[m]Y[m1]L.u2.
  4. T =E(K,X[m]).
  5. Il codice MAC sarà il troncamento di T a t bit.

Bibliografia

Voci correlate

Collegamenti esterni

Template:Hash e MAC Template:Portale