Am date criptate în AES-GCM
cu cripto
API. The vector de inițializare
este apoi adăugat la date, formând un șir criptat unic stocat în stocarea locală. În cele din urmă, cheia secretă este stocată în IndexedDB.
Deoarece cheia secretă nu poate fi extrasă, am crezut că era suficient de sigură pentru majoritatea cazurilor de utilizare. După înțelegerea mea, un atacator ar trebui să jefuiască atât stocarea locală, cât și DB-ul indexat, să găsească vectorul de inițializare în interiorul datelor, să-l convertească într-o matrice de buffer și apoi să efectueze direct decriptarea în browser înainte de a trimite datele înapoi la serverul său. . Într-adevăr, se pare că natura neextractabilă a cheii secrete înseamnă că el nu ar putea trimite cheia secretă brută către serverul său și astfel nu ar putea finaliza decriptarea.
Dar mi s-a spus că am greșit foarte mult și că strategia mea a fost de fapt abia mai sigură decât a lăsa toate datele să fie citite direct în stocarea locală.
Deci, cum aș putea îmbunătăți acest flux de lucru? Este chiar atât de nesigur? Ar fi posibilă criptarea și decriptarea cheii secrete datorită unei parole unice furnizate de utilizator? Parola ar fi în a .env
fișier și, prin urmare, niciodată expus unui atacator. Cum ai face-o?
Iată cum este generată cheia secretă până acum:
crypto.subtle.generateKey(
{ nume: „AES-GCM”, lungime: 256 },
fals,
[„criptare”, „decriptare”]
);
Multumesc pentru ajutor!