Puncte:0

Hashing de pseudonimizare folosind cheia publică

drapel be

Am jurnalele care conțin date sensibile (adrese de e-mail, nume de utilizator etc.) care nu trebuie doar să fie conforme cu GDPR, dar, în general, să fie securizate cât mai bine posibil, astfel încât anonimizarea/hashingul ar fi o soluție ușoară. Totuși, în același timp, trebuie să pot corela informațiile în scopuri de monitorizare (de exemplu, identificarea atacurilor). Pentru asta, valorile de text clar nu sunt relevante, dar am nevoie ca hashurile pseudonimizate să fie egale pentru aceeași sursă de text simplu (determinism). Deoarece nu pot stoca datele în text simplu, ci doar în mod pseudonimizat, trebuie să pot decripta valorile dacă este necesar. Deoarece ar putea exista mai multe surse de date care trebuie decriptate individual (rareori ar fi necesare toate odată), ideea mea inițială ar fi să folosesc o abordare simplă a cheii publice/private, folosind RSA, pe care o știu din SSH de zi cu zi. -day: Criptați valorile folosind o cheie pub per sursă, stocați cheile private într-un seif. Cu toate acestea, RSA introduce aleatorie în hashe-uri, ceea ce are sens din punct de vedere al securității, dar îmi distruge cerința deterministă „trebuie să poată corela”.

Aveți idei despre o soluție bună? Există un algoritm similar pe care îl pot folosi, care nu este prea ușor de bruteforce, dar poate folosi abordarea cheii publice/private? Îmi lipsesc alte puncte slabe, de ex. încercați să utilizați RSA brut fără umplutură randomizată?

În ceea ce privește operațiunile: riscul este mult mai mare ca un atacator să poată accesa un număr mare de hashe-uri decât să obțină acces la cheia publică, care este deja foarte securizată. Cel mai mare risc identificat (încă foarte puțin asemănător) este acela că un atacator ar putea să-și injecteze propriile date la sursa conductei care urmează să fie procesată/criptată și apoi să vadă hashurile, permițându-i să compare textul simplu și hashurile ( = ghicirea hashurilor ). Viteza de criptare nu trebuie să fie foarte mare, iar viteza de decriptare este și mai puțin importantă.

Dacă este relevant, implementarea efectivă va trebui făcută folosind Python.

Maarten Bodewes avatar
drapel in
Prin hashing ne referim, în general, că vă rulați datele printr-un hash criptografic, cum ar fi SHA-256. Te referi la acel tip de hashing sau te referi la criptare care creează un text cifrat pentru a obține confidențialitate?
kelalaka avatar
drapel in
Hash pentru egalitate și, în același timp, utilizați AES-GCM cu IV=număr de jurnal.
Senshi avatar
drapel be
@MaartenBodewes Mă refer la criptare, pentru că în unele cazuri trebuie să pot restabili textul simplu. Înțeleg că hashing-ul este o metodă „oneway”, ceea ce înseamnă că nu pot obține textul simplu din hash-ul generat. Este corect?
Puncte:3
drapel ar

Ceea ce se pare că cereți este un tip de cheie publică criptare convergentă, pentru care există diverse scheme.

Cu toate acestea, toate astfel de scheme sunt inevitabil vulnerabile la atacurile de ghicire cu forță brută dacă numărul de texte clare plauzibile este scăzut – să zicem, mai puțin de aproximativ un septillion (10$^{24} â 2^{80}$).

Mai exact, un atacator care are un text cifrat convergent (sau doar un hash criptografic) al unui mesaj și cheia publică (dacă există) folosită pentru a-l genera poate ghici un text simplu plauzibil, îl criptează și îl compara cu textul cifrat/hash pentru a verifica dacă sau nu presupunerea lor a fost corectă.

Un CPU obișnuit de desktop poate face aproximativ un miliard (10$^9 â 2^{30}$) criptări o secundă, deci dacă există mai puține texte clare probabile decât atât, schema nu oferă deloc securitate reală. Și dacă atacatorul este dispus să petreacă puțin mai mult timp și/sau să cumpere (sau să fure) puțin mai multă putere de calcul decât atât, probabil că își poate trece cu forța brută de o mie, un milion sau un miliard de ori mai multe texte clare. De asemenea, atacarea simultană a mai multor texte cifrate în acest mod este la fel de rapidă ca și atacul unui singur text.

A întinderea cheii schema poate fi folosită pentru a încetini astfel de atacuri, dar numai cu prețul încetinirii operațiunilor legitime de criptare (și decriptare) cu aproximativ același factor. Deci, de exemplu, dacă puteți trăi cu o singură operațiune de criptare care durează aproximativ o secundă CPU, puteți forța atacatorul să ia și aproximativ o secundă CPU (dați sau luați un factor de 10 sau 100, în funcție de eficiența implementării) pentru a ghici și testați un singur text clar plauzibil. Dar asta înseamnă totuși că un atacator cu acces la 100 de procesoare (sau, eventual, ~un GPU rapid) poate testa încă un milion de texte clare posibile în aproximativ trei ore.

De obicei, datele precum adresele de e-mail, numele de utilizator, numerele de telefon etc. au o cardinalitate destul de scăzută – și mai rău, chiar dacă ar putea exista milioane sau miliarde de posibil adrese, the probabil combinațiile de adrese utilizate sunt mult mai puține și ușor de descoperit folosind hărți publice și baze de date de adrese. Deci, în practică, folosirea hashingului criptografic sau a criptării convergente pentru a pseudonimiza astfel de date este sortită eșecului.

Ceea ce puteți face, în schimb, este unul dintre următoarele (în ordinea aproximativ descrescătoare a preferințelor):

  1. Nu stocați și nu procesați astfel de date dacă le puteți evita.

  2. Dacă trebuie să stocați astfel de date, stocați-le criptate (folosind o metodă convențională atac cu text clar ales schemă de criptare rezistentă) și doar decriptați-o pentru procesare pe un sistem securizat. Păstrați cheia de decriptare în siguranță.

  3. Dacă trebuie să pseudonimizați astfel de date, de ex. pentru procesarea de către terți neîncrezători, faceți-o de preferință asociind fiecare dată (adresă, nume de utilizator etc.) cu un identificator complet aleatoriu și stocând asocierile într-o bază de date criptată. Asigurați-vă că păstrați în siguranță această bază de date de asociere așa cum este descris mai sus.

Alternativ, puteți genera identificatorii pseudonimi prin aplicarea a PRF (precum HMAC sau ceva întindere a tastelor KDF) la elementele de date sensibile cu o cheie secretă. Dacă da, tu trebuie sa protejați cheia PRF de compromisuri, deoarece poate fi folosită pentru a depseudonimiza toate datele.

Oricum ar fi, în general, nu este fezabil să se facă pseudonimizare „la sursă”. În schimb, ar trebui să criptați orice date sensibile folosind o schemă securizată de chei publice la punctul de colectare (care ar trebui să numai au acces la jumătatea publică a perechii de chei), colectează aceste date criptate într-un sistem securizat și le decriptează, procesează și (opțional) le pseudonimizează acolo.

drapel ar
Ps. Răspuns anterior asociat: https://crypto.stackexchange.com/questions/25808/one-way-deterministic-hash-for-low-entropy-input/25813#25813
Senshi avatar
drapel be
Mulțumesc foarte mult. Toate acestea au fost super informative și mi-au dat multe la care să mă gândesc. Am subestimat vulnerabilitatea bruteforce cu text simplu și combinații limitate. Recomandarea 2 sună ca o soluție atractivă pentru acest caz particular. Analiza automată are loc pe o stație de lucru izolată în care cheia de decriptare este stocată inaccesibilă pentru toți utilizatorii, iar rapoartele generate vor fi accesibile doar pentru câțiva analiști care folosesc IDM-ul nostru. Decriptarea ad-hoc nu ar trebui să aibă loc oricum, cu excepția cazurilor extraordinare de criminalistică.

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.