Quando si utilizza Javascript online con il server, il server può fornire un vettore di chiave e inizializzazione univoco da utilizzare in AES-CBC disponibile in API Webcrypto. Ogni utente ha una chiave assegnata a loro. Il client può crittografare i dati e inviarli al server e decrittografarli. A causa di potenziali problemi di rete, i dati vengono memorizzati nella cache. Credo che sia ragionevolmente sicuro in quanto le chiavi sono accessibili tramite l'autenticazione e vengono utilizzati i sali non.
Ora arriva il nuovo requisito : per consentire all'utente di eseguire in modalità offline / cache. Il che significa che quando l'utente deve crittografare i dati sensibili sull'inserimento dei dati o quando accede a dati sensibili per visualizzarli, è necessaria la chiave. Tuttavia il server non può essere raggiunto. Abbiamo bisogno di quella chiave e abbiamo solo una password.
Vedo diversi esempi sul web
che spesso si legge come questo post SO
oppure questo post di crittografia Javascript AES
Just how bad is that to use AES to encrypt a 16 byte secret using the users password to derive a key and a salt that is unique but presumably PREDICTABLE?
Supponendo che uno imposterà le iterazioni PBDK2 tanto grandi quanto tollerabili dagli utenti forse 500 msec per ricavare la chiave dalla password.
Non riesco ancora a vedere come hanno usato AES senza un sale prevedibile quando un dispositivo deve funzionare offline.
Esiste un algoritmo accessibile da script Java che gestisce bene un breve valore per crittografare e solo una chiave derivata dalla password e un ID univoco ma noto come salt.
EDIT con l'obiettivo in testa Con solo la password degli utenti e la modalità offline in JAVAScript cosa si può fare? Vedo che il browser non è ideale per la crittografia: Cosa c'è di sbagliato nella crittografia nel browser? Sto cercando di trovare il migliore attualmente approccio conosciuto e capire quanto male / bene sia.