Trebuie să stochez datele sensibile (cum ar fi fotografiile clienților) într-o bază de date SQL în cel mai sigur mod în cazul unor încălcări de securitate. Datele nu vor fi accesate de către clienți, ci doar proceselor interne care efectuează unele validări. Clienții nu au nicio introducere, cum ar fi parole, doar se înregistrează la noi și ținem evidența datelor lor. Criptarea pe partea clientului nu este posibilă în configurația actuală, de aceea trebuie să criptăm pe partea serverului și avem, de asemenea, un HSM în rețeaua noastră privată cu chei private.
O idee a fost să folosiți criptarea cheii simetrice și să stocați acea cheie la nivel local.Problema cu această soluție este că, dacă un atacator obține acces la server și la baza de date, el poate obține cu ușurință acea cheie și poate decripta datele.
O altă idee a fost să folosești modulul HSM pe care îl are compania și să criptezi cheia simetrică cu cheia publică HSM. Când serverul trebuie să gestioneze datele, trimite cheia criptată la HSM și gestionează cheia simetrică numai în memorie. Problema cu acea soluție este că trebuie să stochez acreditările de conexiune HSM și dacă un atacator o pune mâna pe aceasta și decriptează cheia simetrică, întreaga bază de date este compromisă.
Ar fi suficient de sigur pentru a genera chei simetrice aleatorii pentru fiecare fișier pe care îl criptăm, apoi să criptăm cheia simetrică cu cheia publică HSM și să stocăm atât datele criptate, cât și cheia simetrică criptată?
Și dacă da, care ar fi cel mai bun mod de a-l păstra? Un șir pkcs7 base64?