Aș dori să construiesc note securizate prin javascript și webcrypto.
Am găsit posibilități de a genera chei puternice prin PBKDF2
și criptați datele prin AES
.
Iată un exemplu de generare a cheii prin PBKDF2 în webcrypto, unde este necesară sare:
funcția getKey(keyMaterial, sare) {
return window.crypto.subtle.deriveKey(
{
"nume": "PBKDF2",
sare: sare,
„iterații”: 100000,
„hash”: „SHA-256”
},
material cheie,
{ „nume”: „AES-GCM”, „lungime”: 256},
Adevărat,
[ „criptare”, „decriptare”]
);
}
https://github.com/mdn/dom-examples/blob/master/web-crypto/derive-key/pbkdf2.js#L37-L50
Această cheie este utilizată pentru criptarea datelor:
let keyMaterial = await getKeyMaterial();
salt = window.crypto.getRandomValues(new Uint8Array(16));
let key = await getKey(keyMaterial, sare);
iv = window.crypto.getRandomValues(new Uint8Array(12));
let encoded = getMessageEncoding();
ciphertext = așteaptă window.crypto.subtle.encrypt(
{
nume: "AES-GCM",
iv: iv
},
cheie,
codificat
);
Voi avea nevoie de aceste informații pentru decriptarea viitoare. Aș dori să export aceste date din browser și să decriptez aceste date mai târziu cu parola furnizată.
Vreau să am următorul format JSON:
date: {
note:[
{
criptatNotă: „..”,
iv: '..',
}
]
sare: '..'
}
Acum nu sunt sigur cum să stocez în siguranță sarea și vectorul de inițializare? Este posibil să stocați date ca mai sus?