MD2
# MD2

Il Message Digest Algorithm 2 (MD2) è un algoritmo crittografico di hashing sviluppato da Ronald Rivest nel 1989. L'algoritmo è ottimizzato per computer ad 8 bit. Le sue specifiche sono descritte nell'RFC 1319.

Anche se dopo di esso sono stati presentati altri algoritmi, come l'MD4, l'MD5 e l'SHA, nel 2004 l'MD2 era ancora in uso in infrastrutture a chiave pubblica come parte dell'algoritmo di generazione dei certificati digitali RSA-MD2.

## Descrizione

L'hash dell'MD2 è lungo 128 bit (o 16 byte) ed è generato partendo da un messaggio di lunghezza arbitraria. A questo messaggio si aggiungono inizialmente "i" byte di valore "i" in modo tale che la sua lunghezza sia un multiplo di 128 (deve cioè essere congrua a 0 modulo 16). Successivamente si aggiunge una somma di controllo di 128 bit ottenuta da una tabella di permutazione di 256 byte ricavata dalle cifre decimali del valore del pi greco. A questo punto inizia il calcolo vero e proprio dell'hash, che viene effettuato utilizzando un buffer di 48 byte, che viene inizializzato partendo dalla precedente tabella di permutazione, e blocchi di 16 byte del messaggio. Quando terminano tutti i blocchi del messaggio, il primo blocco parziale del blocco ausiliario utilizzato per il calcolo diventa l'hash del messaggio.

## Hash dell'MD2

Hash a 128 bit generati dall'MD2:

Questo è il risultato modificando una d con una c:

Questo è l'hash di una stringa di lunghezza zero:

## Sicurezza

Rogier e Chauvaud (1997) hanno descritto le collisioni presenti nella funzione di compressione unidirezionale dell'MD2, anche se non sono stati capaci di utilizzare tali debolezze per estendere l'attacco alla versione integrale dell'algoritmo.

Nel 2004 è stato dimostrato che l'MD2 è vulnerabile al preimage attack (un tipo di attacco in cui si cerca di trovare un messaggio che ha un determinato hash) con una complessità di calcolo di $2^{104}$ applicazioni della funzione di compressione (Muller, 2004). L'autore conclude dichiarando che l'"MD2 non può essere più considerato una funzione di hash a senso unico".

