Puncte:0

Criptografia cu cheie publică pentru autentificare

drapel ky

Aceasta este o întrebare stârnită pur de curiozitate, dorind să înțeleagă puțin mai multe despre criptografie și autentificare. Mulțumesc anticipat oricui își face timpul să răspundă.

În loc să sărați și să indexați o parolă, să o trimiteți la server pentru a vă autentifica, ar putea funcționa așa ceva? Un client generează o pereche de chei private/publice dintr-o parolă și sare aleatorie. Cheia publică și sarea sunt stocate de server. Pentru fiecare autentificare, serverul trimite sarea și o valoare generată aleatoriu pe care clientul să o semneze. Clientul regenerează cheia privată din parolă și sare, apoi semnează valoarea generată aleatoriu și o trimite serverului. Serverul verifică semnătura cu cheia publică corespunzătoare.

Pentru a încetini un atac de forță brută, o cheie trebuie să fie derivată din parolă și sare folosind un KDF lent, înainte de a genera cheile private/publice.

În mod alternativ, serverul poate solicita clientului să derive o cheie din valoarea generată aleatoriu, folosind niște KDF lent, înainte de a fi semnat – deși acest lucru, pentru mine, mi se pare mai puțin ideal decât doar încetinirea derivării cheii. Pentru a economisi resursele de pe server la verificarea semnăturii, se poate folosi un mecanism de stil Proof of Work în loc de un KDF lent în care clientul trebuie să găsească un nonce astfel încât hash(randomly_generated_value + nonce) > some_set_difficulty, apoi nonce este semnat și trimis la serverul de verificat. Serverul poate chiar să varieze dificultatea, să zicem crescând dificultatea pentru fiecare încercare de conectare nereușită.

Care ar fi unele avantaje și dezavantaje ale unei astfel de scheme? Bănuiesc că expunerea sării la fiecare încercare de conectare ar fi o problemă.

drapel in
Deși ar funcționa, nu văd beneficiile utilizării acestui lucru față de utilizarea unui algoritm de hashing lent, cum ar fi bcrypt?
Manish Adhikari avatar
drapel us
Folosind parola + PBKDF bun pentru a cripta cheia privată și stocarea acesteia într-un loc sigur, ca în SSH, face în esență același lucru, fără a vă expune sarea la o rețea potențial nesigură. Ar fi mai bine să îl stocați într-un loc de încredere, pe care îl puteți accesa printr-o rețea sigură și să îl folosiți pentru a vă autentifica pe acest server pe un canal nesigur.
Maarten Bodewes avatar
drapel in
O problemă cu aceasta este că generarea unei chei private din orice semințe aleatoare este remarcabil de netrivială. Dacă nu schimbați niciodată algoritmul determinist, atunci ești OK, dar asta înseamnă că 1. RNG-ul nu se schimbă, că 2. extragerea biților nu se schimbă niciodată și 4. că generarea cheii nu se schimbă și 4. că biții sunt recuperați din RNG întotdeauna în același mod. Unele dintre acestea ar putea părea banale, dar amintiți-vă că, de ex. Generarea perechilor de chei RSA necesită 2 numere prime aleatorii și există multe modalități de a le genera.

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.