|
Sommario | Attacco | Crittologia | GnuPG/PGP | Programmazione | Sicurezza | Modifiche |
| Sommario / Crittologia / Crittografia / Algoritmi crittografici / Algoritmo MD5 / | |||
Analisi dell'algoritmo |
L’algoritmo, appartenente alla RSA Data Security, Inc. è stato sviluppato da R. Rivest nel 1991.
L'algoritmo è suddiviso in cinque fasi principali:
Aggiunta bits di riempimento: il messaggio viene sempre esteso (padding) così che la sua lunghezza in bits sia congruente a 448 mod 512. Il primo bit di estensione è sempre un ‘1’ seguito da una serie di ‘0’ mentre il numero di bits di estensione va da un minimo di 1 ad un massimo di 512. Aggiunta della lunghezza: viene aggiunta una rappresentazione a 64-bit della lunghezza del messaggio (b) prima del riempimento. Se la lunghezza era maggiore a 2^64 vengono utilizzati solo i 64 bits inferiori di b e le due word a 32-bit risultanti vengono accodate, seguendo la rappresentazione vista in precedenza, con la word più bassa per prima. Il messaggio ottenuto ha una lunghezza multipla di 512 bits (in pratica 16 words da 32-bit). Inizializzazione del buffer MD (initial variable/chaining variable): si tratta di un buffer di quattro word (A, B, C, D) a 32-bit aventi questi valori esadecimali di inizializzazione (la prima word per prima):
Elaborazione del messaggio (compression function): vengono definite quattro funzioni ausiliare che ricevono in ingresso tre words da 32-bit e producono in uscita una sola word a 32-bit:
Per ogni bit le funzioni applicano la condizione che, se è vero X passano ad Y, altrimenti a Z, senza introdurre una propria logica ma, seguendo quella dei singoli bits. La funzione H produce, mediante un operazione di XOR binario, la ‘parità’ dei bit ingresso. In questo passaggio viene anche utilizza una tabella T di 64 elementi T[1… 64 ] così da avere per ogni T[i] un valore equivalente alla parte intera di 4294967296 volte abs(sin(i)), con i espresso in radianti.
Ogni blocco da 16-word viene elaborato
seguendo questo algoritmo:
Output: Il message digest è ottenuto partendo dal byte meno significativo di A seguito da quelli di B, C, e terminato con il byte più significativo di D.
Riferimenti
|
|
Copyright © 1998 - 2009 Antonio Magrì - Tutti i diritti riservati. Contatto. |