Message integrity code
# Message integrity code

Nell'ambito della sicurezza di rete, un message integrity code (MIC) è un piccolo blocco di dati utilizzato per garantire l'integrità di un messaggio digitale, generalmente ottenuto tramite una funzione crittografica di hash. In ricezione, il destinatario opererà in maniera identica sul messaggio pervenuto in chiaro, ricalcolando il MIC e verificandone l'uguaglianza con il codice di integrità ricevuto.

Può essere considerato un sinonimo di "modification detection code" (MDC), espressione che tuttavia è solitamente riferita allo specifico algoritmo di Meyer-Schilling. Nella RFC 4949 della IETF si sconsiglia l'utilizzo dell'espressione "message integrity code" e si raccomanda invece di usare termini più specifici come "checksum", "error detection code", "hash", "keyed hash", "message authentication code" or "protected checksum".

## Differenze con il MAC

L'espressione "message integrity code" è usata frequentemente come sinonimo di message authentication code (MAC), soprattutto nell'ambito delle telecomunicazioni, dove l'acronimo MAC tradizionalmente si riferisce all'indirizzo MAC del dispositivo.

Tuttavia, alcuni autori usano "MIC" per indicare un message digest, che è differente da un MAC, poiché non usa chiavi segrete ed è ottenuto tramite funzione crittografica di hash. Questo tipo di codifica non fornisce autenticazione e, in linea di principio, neppure l'integrità dei dati (poiché chiunque può generare un digest di un messaggio differente tramite la stessa funzione di hash). L'integrità è garantita solo se l'algoritmo MIC viene usato assieme a una funzione crittografica (come AES), che però a sua volta richiede l'utilizzo di una chiave. D'altro canto, un MAC, che di per sé già utilizza una chiave segreta, non necessita di essere cifrato per offrire lo stesso livello di sicurezza del MIC.

## Michael

Michael è un particolare protocollo MIC usato nello standard 802.11i per la trasmissione di dati in una rete wireless. L'algoritmo prende in ingresso 64 bit composti da:

* indirizzo fisico della scheda di rete;
* indirizzo fisico del destinatario;
* il messaggio stesso.

Ciò che restituisce in uscita è invece il messaggio concatenato ad una stringa generata a partire dagli input di ingresso, inoltre (se necessario) frammenta il pacchetto prima di trasmetterlo.

