# Autenticador de mensagem

Em criptografia, um autenticador de mensagem (em inglês message authentication code - MAC) é um pequeno pedaço de informação usado para autenticar a mensagem.
Um algoritmo MAC, algumas vezes chamado função de dispersão chaveada (criptografia), em inglês keyed hash function, recebe como entrada uma chave secreta e uma mensagem de tamanho arbitrário para ser autenticado, e dá como saída uma MAC (algumas vezes chamada de tag ou etiqueta). O valor do MAC protege tanto a integridade dos dados da mensagem, assim como a sua autenticidade, permitindo aos verificadores (que também possuem a chave secreta) detectar quaisquer mudanças no conteúdo na mensagem.

## Segurança

Enquanto funções MAC são similares às funções de dispersão em criptografia, elas possuem requisitos diferentes de segurança. Ser considerada segura, uma função MAC deve resistir à forjação existencial sobre ataque de puro texto escolhido. Isto significa que mesmo se um atacante tem acesso a um oráculo que possui a chave secreta e um gerador MACs para mensagens de sua escolha, ele não pode adivinhar o MAC das outras mensagens sem realizar quantidades inviáveis de cálculos de computação.
MACs diferem de assinaturas digitais, pois os valores da MAC são ambos gerados e verificados usando a mesma chave. Isso implica que o remetente e o receptor da mensagem devem combinar a mesma chave antes das comunicações iniciadas, como é o caso com encriptação simétrica. Pela mesma razão, MACs não proporcionam a propriedade de não repudiação oferecida pela assinatura, especificamente como no caso da chave secreta partilhada nas redes: qualquer usuário que pode verificar um MAC é também capaz de gerar MACs para outras mensagens. Em contraste, uma assinatura digital é gerada usando a chave privada de um par de chaves, o que é encriptação assimétrica. Desde que esta chave privada é somente acessada pelos seus titulares (donos), assinaturas digitais provam que o documento foi assinado por nenhum outro que não o titular. Assim, assinaturas digitais oferecem não repúdio.

## Código de integridade de mensagem

O termo código de integridade de mensagem, em inglês message integrity code (MIC), é frequentemente substituído pelo termo MAC, especialmente em comunicações, onde o acrônimo para MAC tradicionalmente representa Media Access Control (Media de controle de acesso). Entretanto, alguns autores usam MIC como um diferente termo de um MAC; em seu uso do termo o funcionamento MIC não usa chaves secretas.
Essa carência de segurança significa que qualquer MIC destinado a aferir integridade à mensagem deve ser encriptado ou não será protegida contra falsificação. Algoritmos MIC são criados de tal forma que uma dada mensagem não produzirá sempre o mesmo MIC assumindo que o mesmo algoritmo é usado para gerar ambos. Reciprocamente, algoritmos MAC são designados para produzir MACs correspondentes somente se a mesma mensagem, chave secreta e vetor de inicialização são dados como entrada no mesmo algoritmo. MICs não usam chaves secretas e, quando tomados por conta própria, são, portanto, um indicador menos confiáveis do que a integridade da mensagem MACs. Porque MACs usam chaves secretas, eles não necessariamente precisam ser encriptados para fornecer o mesmo nível de garantias.

## Implementação

Algoritmos MAC podem ser construídos de outros primitivos criptográficos, como funções criptográficas de dispersão (hash functions), como no caso da HMAC ou de algoritmos de cifra de bloco (OMAC, CBC-MAC e PMAC). No entanto muitos dos algoritmos mais rápidos MAC como UMAC e VMAC são construídos baseados em hash universal (universal hashing).

## Padrões

Existem vários padrões que definem algoritmos MAC. Estes incluem:
* FIPS PUB 113 Computer Data Authentication, reformada em 2002, define um algoritmo baseado na DES.
* ISO/IEC 9797-1 Mecanismo usando a cifra de bloco.
* ISO/IEC 9797-2 Mecanismo usando uma dedicada função de dispersão.
ISO/IEC 9797-1 e -2 definem modelos genéricos a algoritmos que podem ser usados com qualquer cifra de bloco ou função de dispersão, e uma variedade de parâmetros diferentes. Estes modelos e parâmetros seguem mais algoritmos específicos para serem definidos por nomear os parâmetros. Por exemplo, o algoritmo FIPS PUC 113 é funcionalmente equivalente ao algoritmo MAC ISO/IEC 9797-1 com método de preenchimento e um algoritmo de cifra de bloco da DES.

## Exemplo

Neste exemplo, o remetente da mensagem usa um algoritmo MAC para produzir uma etiqueta de dados MAC. A mensagem e a etiqueta MAC são então enviadas para o receptor. Ele por sua vez executa a parte da mensagem da transmissão através do mesmo algoritmo MAC e mesma chave, produzindo a segunda etiqueta de dados MAC. Se elas são idênticas, o receptor pode seguramente assumir que a integridade da mensagem não foi comprometida, e a mensagem não foi alterada ou adulterada durante a transmissão.