Qual è la differenza tra un secondo attacco preimage e un attacco di collisione?


24

Wikipedia definisce un secondo attacco preimage come:

dato un messaggio fisso m1, trova un messaggio diverso m2 tale che hash (m2) = hash (m1).

Wikipedia definisce un attacco di collisione come:

trova due diversi messaggi arbitrari m1 e m2 tale che hash (m1) = hash (m2).

L'unica differenza che posso vedere è che in un secondo attacco preimage, m1 esiste già ed è noto all'attaccante. Tuttavia, ciò non mi sembra significativo: l'obiettivo finale è ancora trovare due messaggi che producano lo stesso hash.

Quali sono le differenze essenziali nel modo in cui vengono eseguiti un secondo attacco preimage e un attacco di collisione? Quali sono le differenze nei risultati?

(A parte questo, non posso etichettare correttamente questa domanda. Sto cercando di applicare i tag "collisione pre-immagine di sicurezza crittografica" ma non ho abbastanza reputazione. Qualcuno può applicare i tag appropriati?)


1
La tua impressione è corretta, questa è la differenza. La parte in cui non sei corretto è che questa è una differenza ENORME nella pratica. Una cosa è riuscire a trovare due cose che hanno una collisione, e un'altra è riuscire a trovare una collisione per un testo in chiaro specifico. Ad esempio, se vuoi falsificare un determinato messaggio, è inutile poter commettere falsità esistenziali: hai bisogno di un altro messaggio che abbia hash sulla stessa cosa del messaggio che hai intercettato.
Adrian Petrescu,

@Adrian Petrescu: Potresti dare una risposta e magari approfondirla ancora? Aggiungere elementi come quando ciascuno (si fornisce una situazione per l'attacco pre-immagine, ma non per l'attacco di collisione) è più adatto?
Thomas Owens,

Risposte:


27

Posso motivare la differenza per te con scenari di attacco.

In un primo attacco preimage , chiediamo ad un avversario, dato solo , di trovare o qualche tale che = . Supponiamo che un sito Web memorizzi nei suoi database anziché . Il sito Web può comunque verificare l'autenticità dell'utente accettando la password e confrontando (con probabilità di per alcuni grandi per falsi positivi). Supponiamo ora che questo database sia trapelato o sia altrimenti compreso. Un primo attacco preimagem m H ( m ) H ( m ) { u s e r n a m e , H ( p a s s w o r d ) } { u s e r n a m e , p a s s w o r d } H ( i nH(m)mmH(m)H(m){username,H(password)}{username,password}1 / 2 n nH(input)=?H(password)1/2nnè la situazione in cui un avversario ha accesso solo a un digest di messaggi e sta cercando di generare un messaggio che ha un hash su questo valore.

In un secondo attacco preimage , consentiamo all'avversario ulteriori informazioni. In particolare, non solo gli diamo ma gli diamo anche . Considera la funzione hash dove e sono numeri primi grandi e è una costante pubblica. Ovviamente per un primo attacco preimage questo diventa il problema di RSA e si ritiene che sia difficile. Tuttavia, nel caso del secondo attacco preimage trovare una collisione diventa facile. Se si imposta ,mH(m)mH(m)=mdmodpqpqdm=mpq+mH(mpq+m)=(mpq+m)dmodpq=mdmodpq. E così l'avversario ha trovato una collisione con poco o nessun calcolo.

Vorremmo che le funzioni di hash in un modo fossero resistenti agli attacchi di seconda immagine a causa di schemi di firma digitale, nel qual caso è considerato informazione pubblica e viene trasmesso (attraverso un livello di riferimento indiretto) ad ogni copia del documento. Qui un utente malintenzionato ha accesso a entrambi i e . Se l'attaccante può presentare una variazione del documento originale (o un messaggio completamente nuovo) tale che potrebbe pubblicare il suo documento come se fosse il firmatario originale.H(document)documentH(document)dH(d)=H(document)

Un attacco di collisione consente all'avversario ancora più opportunità. In questo schema, chiediamo all'avversario (posso chiamarlo Bob?) Di trovare due messaggi e tali che . A causa del principio del buco del piccione e del paradosso del compleanno, anche le funzioni di hash "perfette" sono quadraticamente più deboli rispetto agli attacchi preimage. In altre parole, dato un imprevedibile e irreversibile messaggio digest funzione che impiega tempo per la forza bruta, una collisione può si trova sempre nel tempo previsto .m1m2H(m1)=H(m2)f({0,1})={0,1}nO(2n)O(sqrt(2n))=O(2n/2)

Bob può usare un attacco di collisione a suo vantaggio in molti modi. Ecco uno dei più semplici: Bob trova una collisione tra due binari e ( ) tale che b sia una valida patch di sicurezza di Microsoft Windows e sia malware. (Bob funziona per Windows). Bob invia la sua patch di sicurezza nella catena di comando, dove dietro un caveau firmano il codice e spediscono il file binario agli utenti Windows in tutto il mondo per correggere un difetto. Bob ora può contattare e infettare tutti i computer Windows in tutto il mondo con e la firma che Microsoft ha calcolato perbbH(b)=H(b)bbb. Al di là di questo tipo di scenari di attacco, se si ritiene che una funzione hash sia resistente alle collisioni, anche quella funzione hash è più probabile che sia preimage.


Questo è ben spiegato. Molto più matematica di quello che stavo cercando, ma apprezzo molto lo sforzo - ti ho seguito fino in fondo. Grazie.
Thomas Owens,

E wow. Un collega studente RIT.
Thomas Owens,

1
Come va Thomas? Penso che tu abbia avuto Fisica con il mio amico Alan Meekins. Bello vedere gente RIT qui! Inoltre, grazie per aver accettato la risposta.
Ross Snider,

Piuttosto buono. Se stai andando in giro per il campus in autunno e sei interessato alla sicurezza, forse possiamo raggiungerci di persona. Quest'estate ho svolto alcuni lavori di sicurezza applicata (applicazione di stenografia, steganalisi, crittografia a chiave pubblica, firme digitali) e mi piacerebbe conoscere il lato teorico (per quanto mi interessi - non ho tempo o background matematico per superare molti articoli sull'argomento).
Thomas Owens,

rws1236@cs.rit.edu
Ross Snider

2

Gli attacchi di collisione possono essere molto più semplici, ma in caso di successo, molto meno utili.


1

Il problema che Ross menziona come il problema di registro discreto è in realtà un problema completamente diverso, il problema RSA, che è molto più legato alle radici di calcolo che al registro discreto.


2
Questo è certamente vero! Ops. Inizialmente ho usato il problema di registro discreto e successivamente ho modificato i dettagli dello schema. Buona pesca. Non sono sicuro che questo costituisca una nuova risposta - probabilmente era più appropriato lasciare un commento sotto la mia risposta.
Ross Snider,
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.