Calcolo MD5 di un Testo
Cos’è l’MD5
L’MD5 è un algoritmo che crea una stringa di 32 caratteri esadecimali, tutti minuscoli, a partire da una sequenza di byte di qualsiasi lunghezza, come ad esempio un testo.
Ad esempio, 00ebd6bd5bf8239b66bbf5d5fa0403f4
è l’Md5 del testo contenuto nel paragrafo precedente.
L’algoritmo fa parte delle cosiddette funzioni di hashing (letteralmente "tritare" o "pasticciare") utilizzate per mascherare dati o creare le cosiddette "impronte informatiche" di file e documenti, spesso indicate con il termine di impronte hash.
Caratteristiche
L’algoritmo Md5 una corrispondenza univoca tra testo di partenza e stringa md5 calcolata, nel senso che ad ogni testo corrisponderà sempre un’unico valore Md5, mentre non vale il contrario perché una stessa stringa md5 potrebbe essere originata due testi differenti.
L’algoritmo non è direttamente reversibile, nel senso che, al contrario delle normali funzioni di cifratura, non è possibile risalire in modo algoritmico al testo originario a partire dall’Md5 calcolato ma solo procedendo "per tentativi" con elaborazioni lunghe e complesse.
Inoltre, l’algoritmo Md5 è in generale molto efficiente e si presta ad essere implementato su tutte le piattaforme disponibili e in molteplici linguaggi di programmazione.
Applicazioni pratiche
Trasferimento File
L’Md5 può essere usato per verificare se un file è stato trasferito senza errori. Non basta infatti controllare le dimensioni del file in quanto un byte, per svariati motivi, può essere ricevuto con un valore diverso da quello di partenza.
Per fare questo si calcola l’Md5 del file originario e si confronta con l’Md5 del file una volta trasferito. Se il risultato è lo stesso allora significa che il file è integro, altrimenti è segno che si è verificato qualche problema durante il trasferimento.
Alterando anche un solo bit del contenuto del file si ottiene una sequenza Md5 completamente diversa ed è per questo che si parla di "impronta informatica" di un file, proprio come se fosse un’impronta digitale che, come è noto, è unica per ogni individuo.
Molti siti che consentono di scaricare file tramite browser, oltre alle informazioni sul contenuto del file, pubblicano anche la stringa Md5 in modo che l’utente, una volta terminato il download, possa ricalcolarla e verificare che corrisponda con quella pubblicata sul sito.
Password e Hashing
Per la sua nota efficienza, la funzione Md5 era utilizzata inizialmente anche per nascondere in modo semplice ed efficace le password da memorizzare in tabelle o software.
Purtroppo, poiché l’algoritmo su cui si basa l’Md5 è pubblico, oggi è possibile applicare ad una stringa Md5 le cosiddette tecniche di "brute-force" che, sfruttando la potenza di calcolo degli attuali computer, consentono di risalire al testo originario abbastanza velocemente, anche se, come detto, l’algoritmo non è direttamente reversibile.
Il tempo di elaborazione è tanto più grande quanto più lungo è il testo originario ed è per per questo motivo che la funzione Md5 non è più adatta, come poteva esserlo un tempo, per "mascherare" stringhe molto corte, quali ad esempio le password.
E’ ormai risaputo che bisogna evitare assolutamente di inserire le password "in chiaro" (cioè come testo leggibile) all’interno dei sorgenti dei linguaggi di scripting (Php, Javascript, Perl, Pyton ecc.) ma anche nei linguaggi "compilati" (C, C++ ecc.) perché le password in chiaro possono essere facilmente estratte dal codice anche dopo la compilazione (codice eseguibile).
Per questo bisogna sempre mascherare le password memorizzate, ma al tempo stesso dobbiamo evitare di utilizzare dei metodi di mascheramento facilmente "hackerabili" come l’Md5.
Lo stesso ragionamento vale per le password inserite in tabelle di database perché, in caso di violazione del server o dello stesso database, gli hacker possono facilmente acquisire tutte le password degli utenti in chiaro o ricostruire facilmente quelle mascherate con algoritmi troppo "semplici".
Un modo semplice potrebbe essere quello di combinare tra loro funzioni di hashing diverse (come ad esempio Md5 e Sha256) applicandole "in cascata" ma la tecnica migliore è sicuramente quella di utilizzare funzioni cifratura combinate applicate a funzioni di hashing o viceversa.
La possibilità di creare un proprio algoritmo di mascheramento delle password a partire dagli algoritmi esistenti è resa ancora più semplice dal fatto che non occorre dicifrare "al contrario" le password, ma solamente applicare l’algoritmo alle password inserite dagli utenti e confrontare il risultato con le password mascherate con lo stesso algoritmo salvate in precedenza.
L’algoritmo Md5
Per chi desidera approfondire l’argomento e conoscere nel dettaglio le specifiche dell’algoritmo consigliamo di leggere direttamente l’RFC 1321 (in inglese) sul sito www.rfc-editor.org.