Provocare: cum protejezi datele, fara sa le stii (problema de logica)

Cum pot trimite unei persoane un cod PIN din baza de date, fara ca eu sa il vad?
Trebuie sa printez codul PIN fara ca eu sa stiu cu cine este asociat, dar in baza de date sa fie asociat cu persoana corespunzatoare.

poti sa dezvolti putin? ca n-are nici o logica

1 Like

Si cine te poate opri sa te uiti direct in baza de date? :slight_smile:

Când primești un card nou de la bancă, ei nu stiu ce PIN ai.
PIN-ul e in plic fără a putea fi văzut.
Cum reușesc ei sa facă astea?

Dar bancomatele iti recunosc PIN-ul.

Eu vreau sa fac ceva asemănător, doar ca nu folosesc card. In aplicația web, codul PIN ar asociat cu adresa de email.

faptul ca aia care-ti dau plicul n-au idee ce-i acolo nu inseamna ca in momentul in care se printeaza pinul ala nu-i asociat cu un nr de card. si cardul ala la randul lui cu un nume si prenume.

1 Like

Cred ca bancile fac cu PIN-ul ceea ce face (sau ar trebui sa faca) orice sistem care gestioneaza conturi cu parole:

  • se genereaza o parola/PIN random sau utilizatorul o introduce atunci cand creeaza un cont
  • aceasta parola nu se tine nicaieri in sistem in clar, ci se trimite pe e-mail o singura data (daca a fost creata random de sistem) sau o stie doar utilizatorul care a introdus-o; sau se printeaza intr-un plic, in cazul bancilor
  • la momentul crearii, parola se encripteaza cu diversi algoritmi (MD5, SHA1 - depasiti in prezent, SHA-256, etc.)
  • in sistem se stocheaza doar parola criptata, astfel ca nimeni din interiorul sistemului nu stie parola
  • cand se face autentificarea, parola (PIN-ul) introdusa de utilizator se cripteaza cu acelasi algoritm si se compara cu ceea ce exista in sistem (la nivel de “hash”-uri, nu la nivel de parola introdusa de utilizator)
  • astfel, teoretic, sistemul “stie” parola in clar doar la momentul generarii ei si atunci cand utilizatorul o introduce pentru autentificare; de regula, astea sunt momentele vulnerabile cand se poate fura o parola
  • algoritmii de criptare functioneaza intr-un singur sens (asta e definitia criptarii), adica daca stii “hash”-ul (parola criptata) nu poti deduce din el parola initiala (aplicand algoritmul invers, de exemplu); poti doar sa ii spargi daca esti un hacker priceput si daca sunt folositi algoritmi de criptare slabi/depasiti (MD5, SHA1)
4 Likes

Se folosește un hash generat cu cardul sau la activare, când introduci pinul corect se verifică hash-ul la pin în baza de date, nu pinul în sine.

Desigur la un pin de 4 cifre e trivial să spargi orice hash, o excepție ar fi dacă ar folosi un one time pad digital, adică criptarea să fie unică la fiecare card. (nu știu exact cum funcționează un card, nu cred că fac ceva special înafară de hash-uri și obfuscare cât mai multă, românii noștri sunt ași la cardare deci securitatea cardurilor oricum nu e prea bună)

Dacă tu generezi codul nu ai cum sa nu-l vezi la modul teoretic. Chiar daca îl treci printr-un hash sau îl criptezi cu o cheie de la utilizator, tot există câteva momente când este vizibil, in memoria procesului, intre secure_rand(9999) și transformările respective. Chiar daca ai face asta pe partea de “client”, tot il vede o componenta a sistemului tau care poate fi compromisa.

Dar ce ceri tu este un threshold extrem de înalt. Că referință, sistemele de autentificare ce umblă cu parole, tot le proceseaza în plain-text pe canalul user-browser --> https --> auth server process memory. Cum PIN-ul este un fel de parola, n-ai gresii tratandul că atare și urmând unele din sugestiile de pe thread. Atata timp cat este transmis pe canale securizate si exista ca plain-text numai in memoria calculatoarelor de incredere ar trebui sa fie OK.

Dar dacă chair vrei sa te legi la cap, caută despre proofs of knowledge, zero knowledge password proof si subiecte conexe. Poate iti ofera o cale sa verifici ca cineva stie un PIN, fara sa ai acces la pinul respectiv.

1 Like

Macar titlul e bine ales :stuck_out_tongue:

PIN-ul e in baza de date a bancii si un numar limitat de persoane au acces la toate datele :smiley:, plicul e o simpla masura de a limita accesul altor pesoane (angajati ai bancii, etc).

Iar pentru problema ta punctuala, la inregistrarea unui client ai putea folosi acelasi mecanism ca la resetarea parolei: ii trimiti un link pe adresa de mail specificata si il lasi sa isi seteze singur parola.

2 Likes

Cred ca am inteles cum fac bancile.

In primul rand, bancile trebuie sa justifice toate modificarile din cont. Adica trebuie sa poata demonstra tranzactiile .
Ei vad si PIN-ul si cardul pana sa ti-l dea. Daca fac modificari in cont in acest timp, sunt responsabili.
Cand se inmaneaza cardul, ambele parti contrasemneaza schimbarea posesiei cardului.
Din acest moment, de fiecare data cand retragi bani, banca consemneaza tranzactia de la ATM si au dovada ca tu ai retras bani.

In cazul meu, povestea e mai lunga si nu stiu cine o sa o citeasca :slight_smile: