SHA e "Bit di sicurezza"

9

Ho studiato diverse forme di crittografia / hashing e ho spesso trovato il termine "bit di sicurezza". Ad esempio, almeno una fonte ha richiesto SHA-256 = AES128 = ECC256 = 128 bit di sicurezza.

La mia domanda è, se questo è vero, posso prendere un digest SHA-256 a 256 bit e comprimerlo a 128 bit senza perdita di sicurezza? (Ad esempio, prendendo semplicemente lo XOR dei 128 bit superiori e i 128 bit inferiori del digest)

Nel mio caso particolare, è importante che il digest sia piccolo. Grazie in anticipo per qualsiasi risposta.

    
posta tomKPZ 27.07.2014 - 05:53
fonte

3 risposte

16

Le funzioni hash crittografiche devono avere diverse proprietà:

  • Resistenza alle preimmagini : dato x , dovrebbe essere impossibile trovare m tale che h (m) = x .
  • Resistenza a second-preimages : dato m , dovrebbe essere impossibile trovare m tale che h (m) = h (m ') .
  • Resistenza a collisioni : dovrebbe essere impossibile trovare m e m ' tale che m ≠ m' e h (m) = h (m ') .

Queste proprietà non sono equivalenti l'una all'altra e non è necessario che siano necessariamente tutte. Dipende dal protocollo in cui si utilizza la funzione di hash. Ad esempio, le funzioni di hash vengono utilizzate nel passaggio iniziale di firme digitali , per le quali le collisioni non sono un problema - a meno che l'autore dell'attacco sia in grado di scegliere un messaggio esatto da firmare. I dettagli possono essere sottili.

Se la funzione hash ha un output di n bit, allora esistono attacchi generici che trovano pre-immagini, seconde pre-impressioni e collisioni con costo, in modo repsettivo, 2 n , 2 n e 2 n / 2 . Un attacco "generico" significa che funziona per tutte le funzioni hash, indipendentemente da quanto perfette possano essere. Questo imposta il massimo livello di sicurezza raggiungibile.

Se "comprimi" l'output SHA-256 a 128 bit (qualunque sia la procedura di compressione che potresti voler usare, anche un semplice troncamento), allora stai definendo una nuova funzione di hash con un output a 128 bit. In quanto tale, la resistenza alle pre-immagini e alle seconde pre-immagini di quella funzione sarà al massimo 2 128 , e la resistenza alle collisioni sarà al massimo 2 64 . Pertanto, il tuo SHA-256 troncato offrirà "sicurezza a 128 bit" solo in contesti di utilizzo in cui le collisioni non rappresentano un problema. Ma dal momento che può essere abbastanza difficile accertare che le collisioni non siano effettivamente un problema, "comprimere" l'output della funzione hash non è raccomandato.

In generale , preferiamo essere sicuri che dispiaciuti; quindi, quando vogliamo "sicurezza a 128 bit" usiamo una funzione hash a 256 bit. In questo modo, non dobbiamo preoccuparci se le collisioni potrebbero essere sfruttate in un attacco reale o meno. Le collisioni SHA-256 non sono fattibili con la tecnologia esistente.

    
risposta data 28.07.2014 - 19:16
fonte
7

La valutazione di qualsiasi hash crittografico a 256 bit con un livello di sicurezza di 128 o 256 bit dipende interamente da come viene utilizzata. In un'applicazione in cui un utente malintenzionato può riuscire semplicemente trovando una collisione di hash qualsiasi , il livello di sicurezza non può superare i 128 bit poiché un semplice attacco di compleanno riuscirà (probabilisticamente) dopo 2 ^ 128 tentativi casuali. Se abbrevia l'hash con un hash a 128 bit, riduci il suo livello di sicurezza in questo contesto a 64 bit.

Tuttavia, le applicazioni sono concepibili dove un attacco riuscito dovrebbe trovare una collisione con uno (o pochissimi) hash dati, come per forgiare un messaggio firmato digitalmente non forgiando la firma stessa, ma trovando un messaggio diverso che produce lo stesso hash (che è quello che gli schemi di firma tendono a firmare effettivamente). Nel caso estremo in cui esiste una sola firma reale, SHA256 consentirebbe verosimilmente un livello di sicurezza di 256 bit se usato solo come in questo esempio.

    
risposta data 27.07.2014 - 21:52
fonte
6

No. Nel contesto di un hash, "bit di sicurezza" è una misura di quanti possibili output ha una funzione hash, e quindi, quanto è difficile trovare un input con un determinato output. È su una scala logaritmica, quindi ogni bit aggiuntivo raddoppia la sicurezza.

Non è possibile confrontare la sicurezza di SHA-256, AES-128 ed ECC-256. Sono cose completamente diverse: SHA-256 è una funzione di hash crittografica , AES-128 è un cifrario di blocco simmetrico , e ECC-256 è un cypher a chiave pubblica .

La tua proposta di modifica a SHA-256 ridurrà notevolmente la sicurezza, trasformandola essenzialmente in una funzione hash a 128 bit. Ciò è tuttavia più sicuro rispetto a qualsiasi funzione di hash standard a 128 bit, poiché tutti hanno attacchi di collisione noti e alcuni di essi hanno pre-attacchi o secondi attacchi di pre-immagine. 128 bit potrebbero essere sufficienti per i tuoi scopi.

    
risposta data 27.07.2014 - 07:22
fonte

Leggi altre domande sui tag