TL: DR; Nelle funzioni hash crittografiche; gli hash di due messaggi distinti dovrebbero apparire statisticamente indipendenti. $
Mi rendo conto che l'hash è una funzione unidirezionale e che il si suppone che le modifiche all'hash ci dicano che i dati originali sono cambiati (che l'intero hash cambia anche con le più piccole modifiche ai dati).
Criteri valanghe , oltre ad essere unidirezionale, è anche ciò che vogliamo da buone funzioni hash crittografiche;
-
un singolo bit di cambiamento in l'input si traduce in modifiche in ciascuno dei bit di output con una probabilità del 50%.
-
modifiche di più bit : questo è un po 'complicato, se noi considera gli archivi delle funzioni hash per modellare una funzione pseudocasuale secondo il modello di oracolo casuale, quindi possiamo considerare ogni cambio di bit di input, in media, con il 50%, e non importa quanto bit viene cambiato .
Si può vedere questo considerando un bit e lanciando una moneta se Head viene capovolto e se arriva coda non capovolgere il 50% del capovolgimento. Ora lancia un'altra moneta e fai lo stesso. Il risultato è lo stesso (matematica semplice).
Ovviamente non possiamo ottenere il modello dell'oracolo casuale. Pertanto, i bit di uscita non sono indipendenti l'uno dall'altro. Sembrano essere lunghi quanto si riesce a trovare un elemento di distinzione e questo costituirebbe un attacco crittoanalitico contro la funzione hash. Una volta trovata una buona funzione hash crittografica, la vedrai nelle notizie.
Dimostrare che una funzione hash ha i criteri di valanga è un processo statistico che devi testare molti valori di input casuali. Non tutti gli ingressi e i complementi di bit comportano la metà del bit modificato e questo non è il comportamento previsto . Devi anche dimostrare che i bit di output vengono modificati in modo casuale.
Se non è soddisfatta, questa funzione hash può non riuscire a soddisfare la resistenza pre-immagine, la seconda resistenza prima dell'immagine e la resistenza alle collisioni * .
- preimage-resistance - essenzialmente per tutti gli output pre-specificati, è computazionalmente impossibile trovare qualsiasi input che abbia hash su quell'output, cioè trovare qualsiasi preimage
x '
in modo tale che h (x') = y
quando viene fornito un valore y per il quale non è noto un input corrispondente. - 2nd-preimage resistenza, collisione debole : dal punto di vista computazionale non è possibile trovare un secondo input che abbia lo stesso output di qualsiasi input specificato, ad esempio, dato
x
, per trovare una seconda immagine precedente x '! = x
tale che h (x) = h (x')
. - resistenza alle collisioni, forte collisione - è computazionalmente impossibile trovare due input distinti
x
, x '
che hanno lo stesso output, cioè tali che h (x) = h (x ')
.
Il fallimento di ciascuno può causare attacchi e, se ha successo, può essere devastante. Un esempio; considera che qualcuno trova un secondo messaggio al tuo messaggio originale che ha lo stesso valore (o l'hash dell'ISO del CD di Linux);
Questo è un messaggio firmato che rappresenta il pagamento è $ 1,00, avere un buona giornata Ti pagherò $ 1.000.000,00 buona giornata
Si spera che anche SHA-1 e MD5 stiano resistendo a questo attacco. Pertanto si può presumere che vi sia una modifica nei dati se il valore hash cambia. La probabilità che un testo casuale abbia lo stesso hash con il tuo valore sarà trascurabile.
Ma c'è un modo per scoprire in che misura sono cambiati i dati originali quando due hash sono diversi?
Si spera di no . Se esiste un unico pregiudizio che fornisce informazioni sulle modifiche che possono essere utilizzate da aggressori intelligenti.
* Queste sono definizioni formali e tratte dal seminal paper di Rogaway e Shrimpton Cryptographic Hash-Function Basics: ...
$ Grazie a FutureSecurity per la semplificazione