È sicuro esporre un hash SHA1 di una chiave di crittografia?

4

Supponiamo che la parte 1 e la parte 2 posseggano ciascuna una chiave utilizzata per la crittografia dei dati AES. Supponiamo che la chiave sia stata generata in modo casuale e passata in modo sicuro tra di loro.

Ora ho bisogno di un modo per party 1 per dire a party 2 quale chiave memorizzata da usare. Stavo pensando di creare semplicemente un hash SHA1 della chiave e inviarlo con il messaggio. Il mio ragionamento è che la parte 2 può facilmente confrontare quell'hash con gli hash di tutte le chiavi memorizzate, ma non c'è modo per un attaccante di recuperare la chiave solo dal suo hash.

Le mie esigenze sono la protezione dallo spionaggio casuale, non dalla protezione delle persone con supercomputer che cercano di violare questo singolo messaggio. Idealmente, voglio che le uniche informazioni condivise tra Party 1 e Party 2 siano il valore della chiave di crittografia segreta.

Questo piano è in qualche modo imperfetto, e in tal caso c'è un modo migliore?

    
posta JohnB 18.09.2013 - 11:57
fonte

2 risposte

6

Rivelare l'hash della chiave può essere o meno sicuro, a seconda di cosa lo fai con esso. Nel tuo caso, hai un tasto K , mostri h (K) per qualche funzione di hash (ad esempio SHA-1), e mostri anche e ( K, M) per qualche algoritmo di crittografia e (es. AES) e messaggio M . Questo è sicuro solo in quanto e è "diverso" da h , che è una proprietà mal definita.

Ad esempio, immagina un algoritmo di crittografia definito nel seguente modo: per il messaggio M e la chiave K , hash K con SHA-1, quindi utilizzare i primi 128 bit dell'uscita SHA-1 con AES per elaborare il messaggio M . Per quanto riguarda i sistemi di crittografia, questo è piuttosto buono; è buono come "raw AES" ma accetta anche chiavi di lunghezza arbitraria. Tuttavia , se rivelate SHA-1 ( K ), diventa banale interromperlo, anche se non avete rivelato K stesso.

Per quello che vuoi fare, hai bisogno di un livello di isolamento tra ciò che mostri per l'indicizzazione delle chiavi e il sistema di crittografia. Una funzione di hash non fornisce un tale livello di isolamento "genericamente" tra il suo input e il suo output perché l'output può essere calcolato in modo efficiente dall'input (questo è il significato della funzione hash). D'altra parte, per una "buona" funzione di hash, non esiste un modo noto per calcolare metà dell'output conoscendo solo l'altra metà; altrimenti, gli attacchi veloci contro la resistenza di preimage funzionerebbero. Questo produce lo schema seguente : dalla tua chiave K , calcola SHA-256 ( K ). Suddividi l'output a 256 bit in due metà a 128 bit. Utilizza la prima metà per l'indicizzazione (lo mostri) e la seconda metà per la crittografia effettiva.

    
risposta data 18.09.2013 - 13:29
fonte
3

Perché non influisci sull'identificazione di una chiave casuale dei tasti quando sono condivisi, quindi identifica le chiavi in base a ciò, mettendo tutti i problemi lontani ...

Se si scopre che il processo di generazione delle chiavi non è stato così casuale, una vera preoccupazione in questi giorni con tutte le chiacchiere di hardware e software backdoor, il tuo schema sarebbe stato ancora più facilmente infranto. Gli ID casuali aggiungono uno strato di sicurezza a basso costo. A meno che tu non sia ridicolmente limitato nello spazio di archiviazione, seguire lo schema suona come un rischio inutile.

    
risposta data 18.09.2013 - 15:30
fonte

Leggi altre domande sui tag