Folosesc Fernetul python.cryptography cu hashing al frazei de acces PBKDF2 pentru a cripta o bucată de date (valoarea) care este stocată, criptată, într-o bază de date. Fraza de acces cu hash este nu stocate în baza de date și, din acest motiv, nici sarea nu este. În schimb, sarea provine dintr-un seif de parole din mediul de rulare al aplicației și apoi modificat pentru a-l face unic pe valoare.
O întrebare pe care o am despre aceasta este: dacă un atacator are o frază de acces și date criptate pentru o singură valoare, este posibil ca acesta să facă o inginerie inversă a sarii (ceea ce l-ar ajuta să forțeze brute datele rămase)? Ce se întâmplă dacă au și o copie a versiunii necriptate a datelor pentru acea valoare?
(Vectorul de atac luat în considerare aici este unul în care atacatorul are un cont de utilizator obișnuit în sistem și a obținut o copie a bazei de date cu valorile criptate. Astfel, ei pot crea o singură valoare (a lor) unde știu fraza de acces și valoarea criptată rezultată. De asemenea, au acces la o copie a codului aplicației, deoarece este open source.)
La cerere, iată cum este tratată sarea:
- Sarea este generată de un administrator (recomandăm o valoare aleatorie de 32 de octeți).
- Sarea este stocată în seiful de parole (serviciu de rețea)
- Când aplicația este implementată, sarea este injectată în timpul execuției
- Când sunt salvate valori noi, sarea secretă este combinată cu un ID de valoare unic pentru a forma sarea pe valoare
- Această sare este apoi utilizată cu fraza de acces furnizată de utilizator pentru a genera o cheie folosind PBKDF2 (cu iterații de 500K).
- Valorile utilizatorului sunt apoi criptate fiecare cu cheile lor individuale
Cred că cele de mai sus sunt cunoscute ca modelul „sare și piper”.