Inversione di un hash di blocco di SHA-1 con testo in chiaro noto?

1

È possibile invertire l'hashing di un blocco in un flusso di dati alimentato a un SHA1 se è noto il testo in chiaro per quel blocco? Se non è possibile (cosa che presumo) rende gli attacchi per recuperare lo stato più facile?

Un esempio di ciò che sto cercando di capire: Sono noti i seguenti dati:

  • suffix1
  • Il risultato di SHA1 (segreto + suffisso1)
  • La lunghezza del segreto, che è esattamente 512 bit (ovvero un blocco SHA completo)

Ora quello che mi piacerebbe capire è SHA1 (segreto + suffisso2) (un diverso suffisso noto)

(+ significa concatenazione di stringhe)

(il suffisso1 è noto ma non può essere manipolato un attacco con estensione di lunghezza è (probabilmente (?)) non possibile)

È possibile? C'è qualche ricerca su questo o è semplicemente impossibile? Se è possibile: questo vale anche per la famiglia SHA-2?

Grazie!

    
posta Patrick Huy 30.10.2013 - 00:03
fonte

1 risposta

4

Ricompilare segreto da SHA-1 (segreto || suffisso1) (per qualsiasi valore noto di suffisso ) costituirebbe un attacco preimage. Nessun attacco preimage più veloce di fortuna è attualmente noto per SHA-1 ("fortuna" funziona in media 2 160 per SHA-1, cioè totalmente irrealizzabile). Non otterrai il valore segreto .

Tuttavia, se il tuo obiettivo è calcolare SHA-1 (segreto || suffisso2) allora quello può essere possibile, a seconda del valore di suffix2 . Si chiama attacco estensione di lunghezza . Vale a dire, suffix2 deve iniziare con suffix1 , seguito da alcuni bit di riempimento che dipendono dalla lunghezza di secret || suffix1 ; dopo questi bit (che non si scelgono), è possibile inserire qualsiasi dato desiderato. In questo senso, suffix2 è parzialmente controllato dall'hacker.

Gli attacchi di estensione della lunghezza sono sufficienti per dimostrare che SHA-1 (segreto || dati) è un scarso MAC , e HMAC dovrebbe invece essere usato (tutto ciò si applica ugualmente bene con SHA-2 funzioni, tra l'altro).

Ora se non vuoi mettere alcun vincolo su suffix2 , allora sarà difficile. L'effetto di secret si riduce a uno stato sconosciuto a 160 bit all'inizio del secondo blocco. Stamattina non ho tempo per elaborarlo matematicamente, ma la mia intuizione è che trovare quel valore di stato dall'output di SHA-1 (segreto || suffisso1) sarebbe equivalente all'esplorazione di un ciclo nella permutazione incarnata dalla SHACAL cifra cifrata con suffisso1 come chiave (presupponendo suffisso1 + padding si inserisce in un blocco). Poiché SHACAL dovrebbe essere un "buon" codice a blocchi, questa permutazione dovrebbe comportarsi come se fosse scelta casualmente tra l'insieme di possibili permutazioni di uno spazio di dimensioni 2 160 , che significa che il ciclo dovrebbe avere, in media, una lunghezza vicina a 2 80 . Ciò implica di nuovo un costo troppo alto per farlo in pratica.

Si noti che essere in grado di fare ciò che si tenta di raggiungere non contraddice le proprietà di SHA-1 come una "buona funzione di hash" (resistenza a collisioni, pre-immagini e seconde pre-immagini). Ciò non significa che non ci interessa, ma evidenzia perché le funzioni di hash e gli oracoli casuali non sono esattamente la stessa cosa.

    
risposta data 30.10.2013 - 12:40
fonte

Leggi altre domande sui tag