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.