Freestart collision di SHA-1

SHA-1 è un algoritmo di hash, ovvero un algoritmo che trasforma una serie di dati di lunghezza arbitraria in una serie di dati di lunghezza fissa.

In crittografia una buona funzione di hash non deve permettere di dedurre i dati sorgente conoscendo solamente il risultato e non deve permettere facili collisioni, ovvero dato un risultato, trovare una sequenza di dati che fornisca quel preciso valore di hash.

Le funzioni di hash utilizzate in crittografia cambiano con l’evolversi della potenza computazionale a disposizione. MD5 è stato reso obsoleto da tempo, ora è il turno di SHA-1 perché la sua vulnerabilità è una cosa nota da qualche tempo.

Con un hardware attuale normalmente acquistabile si può calcolare una collisione SHA-1 in una settimana circa. Leggi tutto “Freestart collision di SHA-1”

PHP: come non confrontare gli hash

Provate ad eseguire questo codice:

<?php var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');
Leggi tutto “PHP: come non confrontare gli hash”

SHA-1

La crescita della potenza di calcolo crea problemi ai vecchi algoritmi di sicurezza o di hash.

L’algoritmo MD5 era stato reso obsoleto a fine 2008, ora è il turno di SHA-1.

Il protocollo https fa un ampio uso degli algoritmi di hash, ma se è relativamente facile calcolare delle collisioni che permettono di calcolare il dato originale partendo dall’hash, la sicurezza di https è compromessa. Leggi tutto “SHA-1”

Un pizzico di sale

Saline / SaltworksBruce Schneier ricorda per l’n-sima volta che, quando richiesto, è il caso di salare gli algoritmi di hash.

Di solito gli algoritmi di hash si usano per rappresentare con un valore gestibile (un numero) qualcosa che o non si vuole scrivere in chiaro (una password, un dato personale) oppure si vuole rappresentare in maniera compatta per una comparazione o ricerca più veloce. Ovviamente il secondo caso non deve essere salato e ci arrivano tutti a capire il motivo.

Spesso la funzione di hash è surgettiva, ma le collisioni sono un male accettabile e, per quanto riguarda le password, può anche andare bene che sia tale, in quanto il rischio che, mettendo una password casuale, si ottenga una collisione è tollerabile.

Il vero problema di una funzione di hash pura e semplice è che è, nei fatti, reversibile. Spesso, anche senza far ricorso alle rainbow table si può trovare una delle stringhe che genero un hash specifico. Un paio d’anni fa ho gestito a livello IT il passaggio di proprietà non proprio amichevole di una ditta. Si sapeva che uno dei vecchi addetti usava sempre la medesima password, ma bisognava sapere velocemente quale. Uno degli applicativi aziendali era scritto in PHP e usava un hash SHA1 per registrare le password. Non vi dico la faccia delle persone quando ho fatto copia e incolla dell’hash su Google ed è venuta fuori la password (non in dizionario). Leggi tutto “Un pizzico di sale”