Come è utile conoscere una specifica collisione dell'algoritmo di hashing? [duplicare]

2

Non molto tempo fa è stata trovata la prima collisione dello SHA-1 . Se ho capito bene, questo significa che qualcuno ha trovato due input diversi che danno lo stesso risultato. Due messaggi diversi danno lo stesso risultato. Che ciò sia persino possibile è banale in quanto l'output ha sempre una lunghezza fissa. Da quanto ho capito e sentito, trovare una collisione è un grosso problema per un algoritmo di hash e segnala che è più o meno morto .

Mentre penso che posso vedere che potrebbero esserci diversi tipi di collisioni, le mie domande generali sono: In che modo trovare una collisione è un problema? Come può essere sfruttato?

Non mi è chiaro come solo trovare due messaggi casuali con lo stesso hash consentirà a qualcuno "facilmente" di ad esempio firmare messaggi o interrompere file di password con hash (ok quindi forse memorizzare le password con hash non è comunque una buona idea ). Se io, ad esempio (forse semplificato eccessivamente?), Firmo un messaggio e vuoi firmare un altro messaggio con lo stesso hash, come ti aiuterebbe la conoscenza di una collisione specifica?

EDIT: Vedo la domanda / risposta qui: Quali sono le implicazioni di una collisione SHA-1 trovata? ma non penso che risponda alla mia domanda. Capisco che "Sarebbe possibile, in teoria, che un utente malintenzionato generi due file eseguibili che hanno lo stesso hash SHA-1, ma eseguono cose diverse quando vengono eseguiti." per esempio. Ma quanto è probabile? In che modo è possibile rendere noto un hash specifico? (Ho aggiornato il titolo della domanda).

    
posta Thomas 11.04.2017 - 17:37
fonte

4 risposte

1

Il modo in cui gli attacchi di collisione vengono generalmente sfruttati è questo:

  1. Mallory (l'attaccante) genera due documenti, che etichettiamo good e bad , i cui hash collidono.
  2. Mallory dà good ad Alice perché lei firmi.
  3. Alice firma good , ottenendo la firma che etichettiamo good_signature e lo diamo a Mallory.
  4. Mallory ora presenta il documento bad e good_signature in Bob.
  5. Bob verifica che il good_signature di Alice sia valido per il documento bad .
  6. Ora Bob crede erroneamente che Alice abbia firmato il documento bad e agisca su di esso.

Un esempio concreto di questo è PKI (ad esempio, certificati SSL). Se riesco a creare due richieste di firma del certificato che si scontrano e inviare quella "buona" a una CA per ottenere la loro firma su di essa, potrei essere in grado di estrarre quella firma per falsificare un certificato "cattivo". Questo è esattamente il modo in cui il ha dimostrato l'attacco di falsificazione di certificati MD5 da alcuni anni ha funzionato; i ricercatori sono stati in grado di trasferire la firma di una CA su un certificato legittimo che hanno richiesto a un certificato dannoso che consentiva loro di rilasciare anche il proprio.

    
risposta data 11.04.2017 - 19:44
fonte
1

La domanda a cui @PwdRsch si è collegato riguarda la tua domanda, ma darò una risposta più mirata:

Immagina che tu e io stiamo negoziando un contratto. Diciamo che trovo due documenti con lo stesso valore di hash, diciamo

I agree to pay Mike Ounsworth $1,000 for these services.

E

I agree to pay Mike Ounsworth $1,000,000 for these services.

Poi ti faccio firmare il primo, ma dal momento che gli hash sono uguali, hai anche firmato il secondo.

Creerei questi due documenti giocando con parole, segni di punteggiatura, caratteri non stampabili, ecc., finché non avrò una collisione. Per una funzione di hash ininterrotta con un output a 256 bit, dovrei provare in media 2 permutazioni 255 prima di trovare una collisione. Questo mi costerebbe molto di più nell'elettricità di quanto valga il crimine. Qualsiasi scorciatoia che consenta al mio di fare ciò in meno tempo sarebbe considerato una vulnerabilità nella funzione di hash, e sarebbe ritirato.

Con un argomento simile, la memorizzazione delle password con hash è soddisfacente finché la funzione di hash non è interrotta .

    
risposta data 11.04.2017 - 18:03
fonte
0

Ad un livello elevato, viene utilizzato l'hashing per determinare l'unicità - l'output sarà unico per un input specifico. Le collisioni sono scenari in cui tale ipotesi è violata - più di un input porterà lo stesso risultato.

Un potenziale attacco con il nostro esempio sarebbe che Alice vuole inviare un messaggio a Bob, e Bob deve assicurarsi che il messaggio che ha ricevuto sia veramente di Alice. Se l'hash del messaggio inviato da Alice corrisponde all'hash del messaggio ricevuto da Bob, Bob può confermare di aver ricevuto il messaggio inviato da Alice. Ora, se Mallory può manipolare il messaggio di Alice, e farlo in modo tale che abbia lo stesso hash del messaggio originale di Alice (una collisione), Bob si fiderà del messaggio di Mallory, che crede sia il messaggio originale di Alice.

    
risposta data 11.04.2017 - 17:56
fonte
-1

In questo post Linus Torlvalds parla di questo. link

    
risposta data 11.04.2017 - 19:51
fonte

Leggi altre domande sui tag