MAC de uma chave - One-key MAC

O MAC de uma chave ( OMAC ) é um código de autenticação de mensagem construído a partir de uma cifra de bloco muito semelhante ao algoritmo CBC-MAC .

Oficialmente, existem dois algoritmos OMAC (OMAC1 e OMAC2) que são essencialmente os mesmos, exceto por um pequeno ajuste. OMAC1 é equivalente ao CMAC , que se tornou uma recomendação do NIST em maio de 2005.

É gratuito para todos os usos: não é coberto por nenhuma patente. Na criptografia , o CMAC é um algoritmo de código de autenticação de mensagem baseado em cifra de bloco . Pode ser usado para garantir a autenticidade e, portanto, a integridade dos dados. Este modo de operação corrige deficiências de segurança do CBC-MAC (o CBC-MAC é seguro apenas para mensagens de comprimento fixo).

O núcleo do algoritmo CMAC é uma variação do CBC-MAC que Black e Rogaway propuseram e analisaram sob o nome de XCBC e submetidos ao NIST . O algoritmo XCBC aborda com eficiência as deficiências de segurança do CBC-MAC, mas requer três chaves. Iwata e Kurosawa propuseram uma melhoria do XCBC e nomearam o algoritmo resultante One-Key CBC-MAC ( OMAC ) em seus trabalhos. Posteriormente, eles enviaram o OMAC1, um refinamento do OMAC, e uma análise de segurança adicional. O algoritmo OMAC reduz a quantidade de material chave necessário para XCBC. CMAC é equivalente a OMAC1.

CMAC - Código de autenticação de mensagem baseado em criptografia.pdf

Para gerar uma etiqueta CMAC de ℓ bits ( t ) de uma mensagem ( m ) usando uma cifra de bloco de b- bits ( E ) e uma chave secreta ( k ), primeiro gera-se duas subchaves de b- bits ( k 1 e k 2 ) utilizando o seguinte algoritmo (isto é equivalente a multiplicação por x e x 2 num campo finito GF (2 b )). Deixe ≪ denotar o operador padrão de deslocamento à esquerda e ⊕ denotar bit a bit exclusivo ou :

  1. Calcule um valor temporário k 0 = E k (0).
  2. Se msb ( k 0 ) = 0, então k 1 = k 0 ≪ 1, caso contrário k 1 = ( k 0 ≪ 1) ⊕ C ; onde C é uma certa constante que depende apenas de b . (Especificamente, C representa os coeficientes não levando do degree- lexicograficamente primeiro irredutível b polinomial binário com o número mínimo de ones:. 0x1B para 64 bits, 0x87 para 128 bits, e 0x425 para os blocos de 256-bit)
  3. Se MSB ( k 1 ) = 0 , então k 2 = k 1 «1 , mais k 2 = ( k 1 « 1) ⊕ C .
  4. Chaves de retorno ( k 1 , k 2 ) para o processo de geração de MAC.

Como um pequeno exemplo, suponhamos que b = 4 , C = 0011 2 , e k 0 = E K (0) = 0101 2 . Então k 1 = 1010 2 e k 2 = 0100 ⊕ 0011 = 0111 2 .

O processo de geração de tags CMAC é o seguinte:

  1. Divida a mensagem em blocos de b- bits m = m 1 ∥ ... ∥ m n −1m n , onde m 1 , ..., m n −1 são blocos completos. (A mensagem vazia é tratada como um bloco incompleto.)
  2. Se m n for um bloco completo, então m n ′ = k 1m n senão m n ′ = k 2 ⊕ ( m n ∥ 10 ... 0 2 ) .
  3. Seja c 0 = 00 ... 0 2 .
  4. Para i = 1, ..., n - 1 , calcule c i = E k ( c i −1m i ) .
  5. c n = E k ( c n −1m n ′)
  6. Saída t = msb ( c n ) .

O processo de verificação é o seguinte:

  1. Use o algoritmo acima para gerar a tag.
  2. Verifique se o tag gerado é igual ao tag recebido.

Implementações

Referências

links externos

  • RFC  4493 O Algoritmo AES-CMAC
  • RFC  4494 O Algoritmo AES-CMAC-96 e seu uso com IPsec
  • RFC  4615 The Advanced Encryption Standard-Cipher-based Message Authentication Code-Pseudo-Random Function-128 (AES-CMAC-PRF-128)
  • Teste OMAC Online
  • Mais informações sobre OMAC