Prestazioni della generazione della chiave di crittografia

0

Una domanda per esperti di crittografia. Immagina di avere un Notes.app concettuale

  • Ci sono note (titolo | contenuto) memorizzate come stringhe crittografate AES-256
  • L'applicazione deve presentare un elenco di tutte le note (titoli) in un elenco nella sua finestra principale
  • Ogni titolo | contenuto è crittografato con una chiave, generata da una password e una salata
  • Immaginiamo che l'algoritmo di generazione della chiave impieghi circa 80ms su un dispositivo mobile per generare una chiave

Con le seguenti condizioni, ci vorrebbe quasi 1 secondo per decrittografare titoli di 10 note. Ma cosa succede se ci sono molte note?

I miei 2 centesimi sul problema: crittografa tutte le note con diversi vettori di inizializzazione, ma anche con sale identico. Questo mi permetterebbe di generare una chiave di decifrazione solo una volta e decriptare molte note velocemente.

La domanda: così facendo ci ritroveremmo con un sacco di note diverse, cifrate con una chiave identica. In qualche modo compromette la sicurezza della crittografia AES? E 'possibile che sapere che ci sia un sacco di file con password non identiche, ma anche sale identico in qualche modo rende possibile crackare la crittografia?

Grazie per i tuoi pensieri

    
posta Marius 09.02.2014 - 15:04
fonte

1 risposta

2

La hashing della password riguarda la trasformazione di un < em> password (che è debole, per definizione) in una sequenza di bit adatta per la memorizzazione (token di verifica password) o utilizzata come chiave di crittografia (nel qual caso stiamo eseguendo derivazione della chiave basata su password ). Per tollerare l'uso delle password, dobbiamo seguire alcune regole rigide:

  • Usa hashing lento con molte iterazioni (più facile a dirsi che a farsi, quindi non diventare creativo e utilizzare uno standard ben studiato come bcrypt o PBKDF2).
  • Mai mai riutilizzare un valore di sale per un'altra istanza di password . Infatti, se due password sono state sottoposte a hash con lo stesso valore di sale, allora l'attacco di uno consentirà di attaccare l'altro "gratuitamente".

Tuttavia, una volta che hai trasformato la password in una chiave, puoi usarla come qualsiasi chiave. Se il tuo sistema di crittografia non è ridicolo, non ci dovrebbero essere problemi nell'usare la stessa chiave per crittografare molti file. Nel caso di qualcosa basato su AES, ciò implica, in effetti, una nuova IV per ogni file. Le proprietà di tale IV dipendono dal meccanismo di crittografia effettivo; AES-CBC richiede un IV casuale, uniforme, imprevedibile, mentre alcune modalità più recenti come GCM richiedono solo un ripetersi non ripetitivo IV e quindi funziona bene con un semplice contatore.

Si noti che molti schemi di crittografia basati su password utilizzano un sistema salt-and-iterations per hash la password in una sequenza di bit contenenti entrambi la chiave e la IV. Tali sistemi non possono essere utilizzati per più di un file; altrimenti, riutilizzerai la IV, e questo è un peccato mortale (di solito è peggio che riutilizzare un sale, che è già piuttosto brutto). Se si desidera riutilizzare la chiave risultante dall'hash della password, è necessario generare una nuova IV per ogni esecuzione di crittografia.

Inoltre, tieni presente che se due file sono crittografati con la stessa chiave derivata da password, è probabile che le loro intestazioni includano il sale (devi metterlo da qualche parte, in modo che sia disponibile per la decrittografia), in questo modo perderai l'informazione che entrambi i file sono protetti con la stessa password e quindi hanno la stessa fonte. A seconda del contesto, questo potrebbe o non potrebbe essere un problema per te.

Altre persone hanno trovato conveniente usare il semplice espediente di memorizzare i loro dieci file in un unico archivio Zip e crittografarlo come un unico file. A seconda del contesto, questo può essere applicabile (o meno) ed è molto più semplice da implementare senza effettuare il "botching" del livello crittografico. In generale, progettare il proprio formato di crittografia e assemblare algoritmi è un percorso pieno di pericoli, e non puoi sapere se l'hai fatto correttamente o no (la sicurezza non è funzionalità: non può essere testata).

    
risposta data 09.02.2014 - 15:38
fonte

Leggi altre domande sui tag