MD5, SHA1 (hash) e CRC32:
Nell'url, nel titolo, nella descrizione e nelle keywords di questa pagina sono riportati i
termini crittografia e cifratura perchè si tende ad associare gli algoritmi di sicurezza
con questi termini, solo perchè data una stringa ne troviamo risultante un'altra con significato
nullo,
ma niente di questo è esatto.
In realtà le funzioni citate non cifrano nessun testo, ma ne forniscono un'impronta, solitamente
di 16, 20, 32 o 40 caratteri (dipende dall'impostazione dei
parametri
delle funzioni) e dagli algoritmi che le formano.
Il risultato ottenuto non potrà
MAI essere decifrato, in pratica dato un risultato md5 o sha1
(sha1 è della famiglia hash)
non potremo
MAI risalire alla parola iniziale; ad eccezione di CRC32 ogni parola lettera
od altro che passiamo al loro interno rende un risultato
SEMPRE DIVERSO fra loro.
Questa loro caratteristica dota queste funzioni di una sicurezza
al momento senza
confronti (
Apriamo una parentesi per CRC32 a fine pagina).
IMPORTANTE:
MD5 rende un risultato di 32 caratteri (esadecimale) o 16 (binario), mentre SHA1 rende un
risultato di 40 caratteri (esadecimale) o 40 (binario).
SHA1 è più sicuro di MD5!!!
Loro applicazione:
L'applicazione di questi algoritmi nel ramo della sicurezza password è fondamentale.
Se un nostro utente inserisce una password elaborata con una di queste funzioni
nessuno
saprà MAI la vera password, escluso chi la inserisce.
In pratica se l'utente la dimentica o la perde non potremo mai recuperla, dovremo necessariamente
sostituirla con una nuova. Questo perchè come abbiamo detto in precedenza nel server del sito
sarà memorizzata un "
immagine" della password e non la parola della password.
Utilizzando questi algoritmi neppure il webmaster
dovrebbe conoscere la password,
sempre che non la memorizzi in chiaro appena inserita dall'utente.
E' comunque buona norma utilizzare
SEMPRE password diverse fra loro, per scongiurare che
il comportamento scorretto di alcuni professionisti web ci possa danneggiare.
Esempio pratico:
Creamo un form per inserire una parola ed elaboriamola con i tre metodi per vedere
il codice generato.
FUNZIONI:
MD5:
md5($parola);
md5_file($file); Verisone per file di MD5.
|
SHA1:
sha1($parola);
sha1_file($file); Versione per file di SHA1.
|
CRC32:
crc32($parola); Il risultato sarà sempre di 32 bit (anche nagativo).
|
La funzione CRC32 è una
storia a parte, la sua sicurezza non è provata al 100%,
e solitamente non si utilizza per le password ma per il trasferimento di informazioni.
Non è certo che le parole generate siano sempre diverse fra loro.
La semplicità del suo algoritmo ed il piccolo risultato (32bit e SEMPRE NUMERICO) di questa
funzione potrebbe far nascere delle uguaglianze (collisioni o conflitti) fra
i risultati di parole diverse.
Qualità (o difetti) che ne scongiurano l'utilizzo ai fini puri di sicurezza (es. password).
In pratica
per questioni legate alla sicurezza la funzione CRC32 è da tralasciare a vantaggio
degli altri due (MD5 e sopratutto SHA1).
Ad oggi CRC32 è consigliato per verificare il corretto transito di pacchetti di informazioni,
in pratica dato un file che vogliamo trasmettere, ne ricaviamo il CRC32 e dopo la trasmissione
verifichiamo che il CRC32 ottenuto dal pacchetto trasmesso sia sempre uguale, se si la
trasmissione è andata a buon fine.
Per le funzioni MD5 e SHA1 a partire da PHP 5.0.0 esiste un parametro opzionale (in default FALSE)
che permette di decidere se il risultato è in formato esadecimale(FALSE) oppure binario(TRUE).
I risultati binari sono meno sicuri perchè più piccoli rispetto ad un formato esadecimale.