Puncte:1

Unde să depozitați sare pentru PBKDF2 și vector de inițializare pentru AES prin WebCrypto

drapel in

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?

Puncte:1
drapel in

Sigur, sarea și IV pot fi stocate ca text simplu.

Rețineți că IV este uneori static sau calculat din PBKDF2 (dacă cheia + IV nu depășește dimensiunea de ieșire hash). Cheia este unică pentru fiecare combinație de sare + parolă până la urmă. Cu toate acestea, se pare că doriți să stocați mai multe note folosind o singură parolă/cheie, așa că în acest caz un IV separat are sens.

Aș adăuga un număr de versiune la protocolul dvs. și aș asigura că numărul de iterații poate fi ajustat.Personal, aș calcula și o valoare de verificare a cheii pentru a valida parola, altfel va trebui să decriptați o notă doar pentru a verifica dacă parola este corectă.

Atenție că mesajele pot fi șterse sau rearanjate chiar și din mai multe blocuri de date (presupunând aceeași parolă) în schema dvs. curentă; criptarea protejează doar mesajele individuale.


Personal, aș dori un fel de cripto asimetric pentru protocoale ca acestea, dar nu știu dacă acest lucru este fezabil în contextul dvs. Criptarea bazată pe parolă nu este cea mai puternică formă de protecție.

knaccc avatar
drapel es
Vă rog, puteți descrie avantajele criptografiei asimetrice pentru acest caz de utilizare?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.