Il PRNG SHA-1 può ancora creare chiavi cifrate sicure?

1

Sono preoccupato che un PRNG SHA-1 non possa produrre una chiave di crittografia AES-256 con i previsti 256 bit di sicurezza, o addirittura una chiave cifrata sicura in cui sono previsti oltre 165 bit di sicurezza.

SHA-1 PRNG è l'unico generatore di numeri casuali sicuro puro Java fornito da Java senza librerie di terze parti. (Sono pienamente a conoscenza di librerie di terze parti che offrono altri algoritmi.) Un'implementazione può essere vista qui . L'algoritmo inizia con uno stato costituito da 160 bit estratti da una fonte esterna. Poiché l'algoritmo utilizza questi dati tiene traccia di quale byte è stato utilizzato per l'ultima volta, un numero compreso tra uno e venti e richiede altri 5 bit di informazioni da rappresentare.

Una volta esauriti i 160 bit, i successivi 160 bit vengono ricavati calcolando:

stato (n + 1) = stato (n) + SHA1 (stato (n)) + I (SHA1 (stato (n))

dove I (x) = 1 se x = 0 e I (x) = 0 se x! = 1

Questo è interamente determinato dai 160 bit di stato esistenti.

Ciò significa che se si forniscono a qualcuno 165 bit di informazioni, è possibile calcolare l'output dal PRNG SHA-1 in qualsiasi momento futuro. Quindi se ho un codice AES-256 e so che la chiave è stata generata usando SHA-1 PRNG, devo solo testare 2 ^ 165 combinazioni possibili, non 2 ^ 256. Ciò sembrerebbe indebolire significativamente il codice.

Siccome la legge sulla conservazione delle informazioni dice che le informazioni non possono mai essere create, non vedo alcun modo in cui un algoritmo il cui stato interno consista di soli 165 bit di informazione possa mai emettere 256 bit di informazione.

Se ciò è vero, e SHA-1 PRNG fornito con Java può generare solo chiavi deboli, che cosa si dovrebbe fare?

Esiste una risorsa che elenca il numero di bit di informazioni incorporati in una funzione PRNG sicura in modo da garantire che l'algoritmo abbia più bit della chiave di crittografia?

    
posta Simon G. 21.11.2013 - 18:15
fonte

1 risposta

3

Accetto questa affermazione come vera: Quindi se ho un codice AES-256 e so che la chiave è stata generata usando SHA-1 PRNG devo solo testare 2 ^ 165 combinazioni possibili, non 2 ^ 256.

Tuttavia, metto in discussione l'assunto che ne deriva: Ciò sembrerebbe indebolire significativamente il codice. Non è né possibile fisicamente possibile testare 2 ^ 165 possibili chiavi, o per scorrere SHA-1 2 ^ 165 volte.

Anche se in AES-256 viene fatto un significativo passo avanti che consente a un attaccante di ridurre le dimensioni del proprio attacco, a seconda dell'attacco potrebbe comunque continuare a scorrere tra le uscite 2 ^ 165 SHA-1.

Pertanto, non sono pienamente d'accordo con il qualificatore "significativo", o che le chiavi prodotte sono qualitativamente "deboli". (Sì, sono "più deboli" di un algoritmo di hash a 256 bit che produrrebbe, sto solo affrontando il significato di tale differenza.) Nel mondo reale e pratico in cui viviamo, gli attacchi molto più probabili saranno fatti sul protocolli che utilizzano questo sistema o sulla sicurezza degli endpoint. Invece di cercare di indovinare 2 ^ 165 possibili stati casuali, vorrei provare ad apprendere il tuo stato interno, o provare a iniettare il mio stato in modo che il tuo output non sia più casuale.

    
risposta data 21.11.2013 - 18:43
fonte

Leggi altre domande sui tag