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:
- Ottieni la chiave dall'utente.
- Ottieni il bcrypt di quella chiave.
- Se il bcrypt non corrisponde, nega l'accesso.
- Ottieni il
PBKDF2della chiave con il sale. - Utilizza quel
PBKDF2per decrittografare i dati. - 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.