Puncte:2

Funcția Hash de conservare a formatului

drapel in

Avem un caz de utilizare de tokenizare a informațiilor cardului de credit și returnarea unei valori tokenizate după păstrarea formatului.

În mod ideal, aceasta ar trebui să fie într-un singur sens, iar urmarea unui FPE ar putea să nu fie cea mai bună soluție. Vă rugăm să sugerați care este cea mai bună soluție care poate fi oferită aici.

Puncte:9
drapel ng

Un număr standard de card de credit are entropie limitată. Pe ISO/IEC 7812 primele 6 cifre sunt fixate pentru un anumit emitent de card, iar cea mai simplă presupunere prudentă este că sunt cunoscute atacatorilor. Ultima cifră este o funcție publică a celorlalte. Pentru numerele de card de credit din 16 cifre, rămân 9 cifre (în cel mai bun caz <30 de biți de entropie). Aceasta poate fi crescută doar ușor (cum ar fi 5 biți) utilizând data de expirare.

Aceasta implică că nu putem folosi o funcție rapidă și publică (cum sunt hashurile, dacă nu se specifică altfel) și să obținem unilateralitatea dorită. Și că orice funcție publică lentă va avea o securitate limitată. În plus, dimensiunea este prea mică pentru criptografia cu cheie publică.

Concluzionam că putem folosi doar criptografia simetrică, cu cheie secretă. Format Păstrarea criptării e departe. Am putea folosi și un reformatat Cod de autentificare a mesajului, dar trebuie să ne temem de coliziuni și va oferi o asigurare de integritate ceva mai puțin robustă decât FPE.


La cerere în cometariu, voi detalia un MAC reformatat. Presupun că rezultatul trebuie să fie de 16 cifre zecimale, fără altă constrângere. Aceasta înseamnă că suntem dispuși să tolerăm o probabilitate scăzută de coliziune: pentru $n$ numere de carduri de care probabilitatea va fi delimitată de sus $n\,(n-1)/(2\cdot10^{16})$; vedea acest. De exemplu, trebuie să fim mulțumiți cu o încredere de 99% că nu există nicio coliziune între până la 14 milioane de numere de card (alese fără cunoașterea cheii).

  • Să presupunem o cheie secretă fixă ​​cu entropie de cel puțin 128 de biți
  • Calcula HMAC-SHA-256 din numărul cardului de credit și cheia, cu dimensiunea de iesire = 32 de octeți
  • Considerați rezultatul ca un număr întreg în $[0,2^{256})$ (după convenția big-endian), reduceți-o modulo $10^{16}$, și exprimă rezultatul ca 16 cifre zecimale (cu zerouri înainte, dacă este necesar), formând simbolul.

În esență, este imposibil să inversezi acea tokenizare fără acces la cheie sau la un dispozitiv cu cheie; dar acest lucru este posibil cu cheie și efort moderat, prin încercare și eroare asupra numerelor de card de credit.

Dacă vrem în plus să facem oarecum dificilă inversarea pentru unul cu cheia, putem înlocui HMAC-SHA-256 cu Argon2 (numărul cardului de credit este introdus ca parolă, cheia ca cheie, sare fixă, tagLength = 32 de octeți), parametrizați pentru a încetini lucrurile cât de mult este posibil. Acest lucru nu schimbă probabilitatea de coliziune, dar securitatea este îmbunătățită: presupunând că Argon2 este parametrizat pentru 0,1 secunde de timp de calcul al unui anumit PC; atacatorul are 100 de PC-uri similare; 9 cifre ale numărului cardului de credit sunt total aleatorii, 6 sunt cunoscute, iar ultima cifră este o sumă de control obișnuită; atunci va fi nevoie în medie de un milion de secunde (11,6 zile) pentru a inversa un anumit hash sau 1 secundă pentru a inversa un hash dintr-un milion de hashe-uri date.


Dacă nu putem trăi cu riscul de coliziune, trebuie să folosim criptarea cu păstrarea formatului, dar pierdem din dificultate să inversăm pentru unul care deține cheia. FPE care este semnificativ mai greu de calculat în direcția inversă nu este standard, dar de imaginat, vezi asta întrebare.

user3336696 avatar
drapel in
Care sunt cele mai bune moduri pe care le sugerați pentru un MAC reformatat. Orice sugestie despre cum folosiți cel mai bine FPE. De asemenea, am avut această idee ciudată, de a lua textul, de a face un HASH, de a converti în zecimală și de a alege cifre aleatorii după verificarea coliziunii, care este părerea ta despre asta. Apreciez sugestiile tale
drapel ar
@user3336696: Dacă puteți „verifica pentru coliziune”, înseamnă că trebuie să aveți undeva o bază de date cu toate numerele de card tokenizate. Dacă baza de date include și numerele originale de card (sau hashuri rezistente la coliziuni ale acestora), atunci puteți pur și simplu să atribuiți un simbol aleator unic fiecărui număr de card și problema devine banală (cu excepția păstrării securității bazei de date!).Dacă nu, cum veți verifica dacă o coliziune aparentă este o coliziune reală între două numere de card diferite sau doar același număr de card tokenizat de două ori?

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.