È sicuro ignorare la possibilità di collisioni SHA nella pratica?


209

Diciamo che abbiamo un miliardo di immagini uniche, un megabyte ciascuna. Calcoliamo l'hash SHA-256 per il contenuto di ciascun file. La possibilità di collisione dipende da:

  • il numero di file
  • la dimensione del singolo file

Fino a che punto possiamo andare ignorando questa possibilità, supponendo che sia zero?


1
Dipende da cosa stai usando le chiavi hash. Se si tratta di una sorta di identificazione dei file, una collisione può anche significare che i file sono identici e quindi è necessario confrontare anche i file in caso di collisione. Direi che sarebbe abbastanza sicuro solo confrontare le dimensioni del file.
Mojuba,

Sì, in questo caso, se si confrontano le dimensioni dei file, la possibilità diminuisce drasticamente. È inoltre possibile utilizzare due algoritmi di hashing e concatenare i risultati. Quindi, la possibilità di una collisione di entrambi allo stesso tempo diminuisce di più. Ma la domanda è: quanto è "abbastanza" sicuro? Forse abbiamo bisogno di una formula e di numeri.
Hristo Hristov,

2
@Hristo Hristov: se assumiamo che la chiave hash sia un numero pseudo casuale (che teoricamente è corretto), allora un miliardo di chiavi a 128 bit dà una probabilità di collisione di 2,9 * 10 ^ -30. Non puoi nemmeno chiamarlo "minuscolo", è meno di così;)
mojuba

3
@mojuba: ancora meglio, sta chiedendo un hash a 256 bit.
Michael Borgwardt,

FWIW: il sistema di controllo della versione GIT identifica i file in base al loro contenuto SHA.
snemarch,

Risposte:


385

La solita risposta è così: qual è la probabilità che un asteroide canaglia si schianti sulla Terra entro il secondo successivo, cancellando la civiltà come la conosciamo e uccidendo qualche miliardo di persone? Si può sostenere che qualsiasi evento sfortunato con una probabilità inferiore a quella non è in realtà molto importante.

Se abbiamo una funzione di hash "perfetta" con il formato di uscita n , e abbiamo p messaggi agli hash (lunghezza singolo messaggio non è importante), quindi probabilità di collisione è di circa p 2 /2 n + 1 (questa è un'approssimazione che è valido per "piccolo" p , cioè sostanzialmente inferiore a 2 n / 2 ). Ad esempio, con SHA-256 ( n = 256 ) e un miliardo di messaggi ( p = 10 9 ) la probabilità è di circa 4,3 * 10 -60 .

Una roccia spaziale assassina di massa accade in media una volta ogni 30 milioni di anni. Questo porta ad una probabilità di un tale evento si verifichi nel secondo prossimo a circa 10 -15 . Sono 45 ordini di grandezza più probabili della collisione SHA-256. In breve, se trovi delle collisioni SHA-256 spaventose, le tue priorità sono sbagliate.

In una configurazione di sicurezza, in cui un utente malintenzionato può scegliere i messaggi che verranno sottoposti a hash, l'utente malintenzionato può utilizzare sostanzialmente più di un miliardo di messaggi; tuttavia, scoprirai che le probabilità di successo dell'attaccante saranno ancora minime. Questo è il punto centrale dell'utilizzo di una funzione hash con output a 256 bit: in modo che i rischi di collisione possano essere trascurati.

Naturalmente, tutto quanto sopra presuppone che SHA-256 sia una funzione di hash "perfetta", che è lungi dall'essere provata. Tuttavia, SHA-256 sembra abbastanza robusto.


12
Questa è un'ottima risposta, grazie! Ma se in caso di collisione esploderà una centrale nucleare e dipenderà da te, correrai questo rischio? Se hai perfettamente ragione, allora possiamo correre il rischio, perché è 45 ordini di grandezza più probabile che la civiltà venga distrutta. Destra?
Hristo Hristov,

46
@Hristo Penso di si, uno correrebbe questo rischio. Una centrale nucleare ha già una probabilità molto maggiore di esplodere a causa di altre cose, come guasti meccanici, errori umani nella costruzione o errore dell'operatore durante il funzionamento, e stiamo già correndo queste possibilità. Se le collisioni SHA-256 fossero le uniche cose che causavano incidenti nucleari, quasi sicuramente ne avremmo avuto esattamente zero finora.
Roman Starkov,


37
Ora posso stare tranquillo sapendo che probabilmente sarò spazzato via da un asteroide molto prima di vivere per sperimentare una collisione SHA-256.
AaronLS,

10
Spiacente, ti manca il cosiddetto "paradosso del compleanno". Guarda meglio il "bel tavolo", non funziona come pensi. Per le cifre che do, in quella tabella, sarebbe un valore "10 ^ 9" in una colonna etichettata "4.3 * 10 ^ -60" e riga "128 bit" (ma la tabella non scende al di sotto di 10 ^ -18 ).
Thomas Pornin,

47

La possibilità di una collisione non dipende dalla dimensione dei file, ma solo dal loro numero.

Questo è un esempio del paradosso del compleanno . La pagina di Wikipedia fornisce una stima della probabilità di una collisione. Se esegui i numeri, vedrai che tutti i dischi rigidi mai prodotti sulla Terra non possono contenere abbastanza file da 1 MB per avere una probabilità di una collisione anche dello 0,01% per SHA-256.

Fondamentalmente, puoi semplicemente ignorare la possibilità.


5
Non posso essere d'accordo con la conclusione. Sì, nessun hard disk è in grado di memorizzare quel numero di file, ma IMO interpreta male la situazione. Bastano solo due file per produrre una collisione. Sebbene la possibilità sia molto bassa, può ancora succedere.
sharptooth,

11
@sharptooth: no, non sto travisando la situazione. La possibilità che tu e tutti quelli che conosci muoia per un incidente stradale nello stesso giorno è molto bassa, ma può ancora succedere (ed è molto più alta di quella di una collisione SHA-256). Eppure stai ignorando questa possibilità.
Michael Borgwardt,

11
@sharptooth: stavo parlando di incidenti stradali separati e simultanei di alcune centinaia di persone specifiche. Non puoi davvero fare alcun passo per renderlo più basso. Sarebbe inutile, poiché è già stranamente basso. Ma ancora molto più probabile di una collisione SHA-256 che non puoi nemmeno immaginare quanto. È lo stesso argomento di Thomas.
Michael Borgwardt,

12
@sharptooth: No, le possibilità non aumentano in modo significativo, poiché il numero è ancora assolutamente ridotto dalla dimensione dello spazio hash SHA-256. Questa è l'unica cosa che non stai prendendo in considerazione correttamente: tutti i fattori devono essere ponderati in base alla loro grandezza effettiva, non ugualmente. Se generassi un miliardo di hash al secondo per ogni singola persona sulla Terra e lo facessi per mille anni, avresti comunque meno dell'1% di probabilità di una collisione.
Michael Borgwardt,

3
Se non si verifica la possibilità di un errore non corretto su ogni recupero dalla memoria o letto dal disco (che ha una probabilità molto più elevata di una collisione SHA-256), è possibile che non si comprenda completamente le probabilità.
Christophe,

17

Prima di tutto, non è zero, ma molto vicino a zero .

La domanda chiave è cosa succede se si verifica effettivamente una collisione ? Se la risposta è "esploderà una centrale nucleare", probabilmente non dovresti ignorare la possibilità di collisione. Nella maggior parte dei casi le conseguenze non sono così gravi e quindi è possibile ignorare la possibilità di collisione.

Inoltre, non dimenticare che il tuo software (o una piccola parte di esso) potrebbe essere distribuito e utilizzato contemporaneamente in un gran numero di computer (alcuni minuscoli microcomputer incorporati che sono quasi ovunque al giorno d'oggi inclusi). In tal caso, è necessario moltiplicare la stima ottenuta per il maggior numero possibile di copie.


... non per il numero di copie, ma per il numero di set di dati tutte le copie vengono digerite.
Andreas Spindler,

1
Questo è sbagliato, il numero di copie del software in esecuzione è irrilevante. L'unica cosa che conta è il numero di file univoci che vengono elaborati e il paradosso del compleanno è la matematica per il calcolo.
Dirk Bester,

1
Ho sentito qualcun altro menzionare che la probabilità di un guasto hardware - ovvero un po 'capovolgendosi da qualche parte a causa di radiazioni, ecc. - è più probabile di una collisione di hash, e quindi preoccuparsi della collisione di hash è sciocco. Personalmente, proverei a coprire entrambi i casi, per essere sicuro (maggiore è la sicurezza in una centrale nucleare, meglio è), ma le collisioni di hash sarebbero probabilmente molto basse nell'elenco dei potenziali pericoli (supponendo che lo spazio di hash sia abbastanza grande) . Tuttavia, tutto ciò presuppone che non vi siano comportamenti nascosti nella funzione hash che causano collisioni più frequentemente.
Chris Middleton,


@GreenTree La cosa a cui ti sei collegato riguarda la creazione deliberata di collisioni.
sharptooth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.