Come verificare la presenza di una chiave * e * memorizzare i dati crittografati?

1

Desidero creare un sistema in cui I memorizzi i dati crittografati .

Gli utenti possono accedere a questi dati se hanno la chiave. Se danno una chiave sbagliata, non ottengono affatto accesso. Se danno la chiave giusta, ottengono i dati e possono modificare tali dati.

Un'idea che mi è venuta in mente è quella di memorizzare bcrypt della chiave, un valore salt e AES -codice crittografato utilizzando PBKDF2 con il valore salt e un numero di iterazione elevato.

Ottenere i dati seguirà questo processo:

  1. Ottieni la chiave dall'utente.
  2. Ottieni il bcrypt di quella chiave.
  3. Se il bcrypt non corrisponde, nega l'accesso.
  4. Ottieni il PBKDF2 della chiave con il sale.
  5. Utilizza quel PBKDF2 per decrittografare i dati.
  6. Fornisci i dati all'utente attraverso un canale sicuro (oltre questo design).

Il sistema dovrebbe rendere difficile l'acquisizione dei dati, anche se si ha accesso ai dati grezzi e crittografati.

Il mio design sembra raggiungere questo obiettivo, ma ho delle preoccupazioni di crittanalisi differenziale sul fatto che la chiave sia crittografata con bcrypt e con una PBKDF2 che codifica AES . È possibile incrociare il riferimento di bcrypt e i dati raw, AES -criptati rendono più semplice l'interruzione della chiave? Ci sono problemi noti con questo tipo di design?

C'è un modo più semplice?

Ovviamente non posso sbarazzarmi della parte bcrypt , perché qualsiasi chiave decrittografa i dati di AES (anche se il risultato sarebbe senza senso). Non riesco a utilizzare bcrypt come chiave per AES , perché la chiave verrà archiviata insieme ai dati crittografati, il che vanifica lo scopo della crittografia.

    
posta Thaddee Tyl 18.04.2012 - 03:12
fonte

1 risposta

4

Perché non usi la crittografia autenticata? Se l'utente fornisce la chiave giusta, la crittografia ha esito positivo e puoi restituire i dati all'utente. Se la chiave è sbagliata, la crittografia fallisce e non fornirai i dati.

Guarda la soluzione utilizzata in TrueCrypt. La password dell'utente non viene memorizzata da nessuna parte nel contenitore crittografato. Viene verificato decodificando l'intestazione del volume TC e verificando alcuni dati dopo la decrittografia. Maggiori dettagli qui: Schema di crittografia

La soluzione utilizzata in TrueCrypt non è una crittografia di autenticazione, ma mostra bene che non è necessario memorizzare la chiave / password utente per sapere se la password inserita è corretta.

    
risposta data 18.04.2012 - 07:23
fonte

Leggi altre domande sui tag