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)mm′H(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)d′H(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 perbb′H(b)=H(b′)b′b′b. 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.