Puncte:1

Cum sunt generate cheile utilizate în criptografie?

drapel ng

Se pare că există chei peste tot în criptografie. De la lucruri precum HMAC la criptare (atât asimetrice, cât și simetrice).

Bitul pe care nu îl înțeleg acum este cum sunt generate cheile criptografice? Știu că trebuie să fie aleatorii, dar acestea sunt toate proprietățile necesare?

Diferă și metoda de generare în funcție de caz de utilizare? De exemplu, metoda de generare diferă pentru cheile utilizate în HMAC față de cheile utilizate ca parte a unei semnături?

Căutând pe Google, am întâlnit câțiva termeni care sunt legați de chei și numere aleatorii. De exemplu, PRNG, RNG, HKDF, VRF, PRP-uri, PRF-uri etc.

Problema este că este dificil să consolidez toate aceste informații pentru a răspunde succint la întrebările pe care le am despre cheile criptografice. Cum sunt generate? Ce mecanism intră în joc în generarea cheilor, sunt ele mai mult decât numere aleatorii? și anumite cazuri de utilizare necesită anumite modalități de generare a acestor chei?

kelalaka avatar
drapel in
Cuvântul cheie este că trebuie selectate în „Uniform aleatoriu”. Vai, prea larg și nu are un răspuns simplu; [Ce probleme există la utilizarea /dev/urandom Linux pentru generarea cheilor criptografice?](https://crypto.stackexchange.com/q/85533/18298). Vă sugerez să căutați pe site-ul nostru și să vă concentrați pe rând.
kelalaka avatar
drapel in
Am căutat [key generation](https://crypto.stackexchange.com/search?q=key+generation) și avem 1.551 de rezultate.
Puncte:4
drapel ng

Cheile criptografice ar trebui, în general, să fie generate în mod secret și uniform la întâmplare în domeniul cheilor criptosistemului; care se află în setul de chei valide pentru criptosistem. Ceea ce face ca o cheie să fie valabilă depinde de criptosistem și adesea de parametri (incluzând de obicei dimensiunea cheii).

În unele criptosisteme, inclusiv cele mai simetrice, setul de chei valide este pur și simplu setul de șiruri de biți de dimensiunea cheii, de ex. 192 de biți pentru AES-192.

Lucrurile sunt mai complexe în criptografia asimetrică. Un motiv este că este generată o pereche de chei, care cuprinde o cheie privată secretă și o cheie publică corespunzătoare. Un alt motiv este că există de obicei unele constrângeri matematice. De exemplu, în cazul relativ simplu al ECDSA, o cheie privată validă într-un număr întreg $d$ in raza de actiune $[1,n-1]$ Unde $n$ este ordinul generatorului $G$ a grupului de curbe eliptice, iar cheia publică potrivită este apoi obținută ca punct de curbă eliptică $Q:=d\,G$. Lucrurile sunt mai complexe pentru RSA.

Cu domeniul cheie definit, rămâne de explicat cum este generată o cheie uniform aleatorie. Cel mai simplu este aruncarea corectă a monedelor, repetată după cum este necesar (de exemplu, de 192 de ori pentru AES-192). Ar trebui să generăm un număr întreg într-un interval $[a,b]$, există diverse metode de a face acest lucru de la aruncarea corectă a monedelor. Cel mai simplu este să generezi $\left\lceil\log_2(b-a+1)\right\rceil$ biți prin aruncare corectă de monede, asamblați biții într-un număr întreg $x$ conform convenției binare big-endian, calculează $y=a+x$, folosește asta dacă $y\le b$, în caz contrar repetați procedura.

Această metodă poate fi automatizată folosind un generator de numere aleatorii puternic criptografic, cum ar fi /dev/urandom în majoritatea aromelor Unix.

Există înlocuitori în care, în schimb, este folosită o funcție de derivare a cheii, pentru a calcula cheia dintr-o altă cheie sau, uneori, dintr-o expresie de acces memorabilă.

Puncte:1
drapel cn

Știu că trebuie să fie aleatorii

Ceva de genul. Mai precis, trebuie să fie imposibil de distins de aleatoriu.

Scopul atunci când alegeți o cheie este ca adversarul („băiatul rău”) să nu poată găsi cheia. Deoarece adversarul poate ști cum funcționează sistemul nostru (Principiul lui Kerckhoffs), trebuie să găsim o modalitate de a genera chei care nu depind doar de un calcul determinist (pe care adversarul l-ar putea reproduce). Prin urmare, toate cheile trebuie să depindă de ceva ce adversarul nu știe. Așa ceva se numește o „adevărată” valoare aleatorie.

Valorile aleatorii pot fi generate folosind diferite procese fizice imprevizibile. Un dispozitiv care implementează un astfel de proces se numește a hardware sau generator de numere aleatorii „adevărat” (HRNG sau TRNG). Aproape toate smartphone-urile și PC-urile moderne, precum și un număr tot mai mare de dispozitive încorporate, includ un HRNG.

Odată ce un sistem a fost „însămânțat” cu o valoare aleatorie adevărată, poate folosi un calcul determinist numit generator pseudoaleatoriu securizat criptografic (CSPRNG) (generator pseudo-aleatoriu pe scurt) pentru a genera un flux practic infinit de valori aleatorii. Aceste valori sunt aleatorii în sensul că un adversar cu putere de calcul finită nu le poate distinge de valorile aleatoare „adevărate”. Într-un context criptografic, un generator aleatoriu (RNG) este un CSPRNG însămânțat de un HRNG.

acestea sunt toate proprietățile necesare?

Fiecare cheie trebuie să fie imposibil de distins de aleatoriu, din punctul de vedere al potențialilor adversari. Acest lucru poate însemna că cheia este generată aleatoriu (după cum s-a explicat mai sus). Dar nu toate cheile sunt generate aleatoriu: unele chei sunt calculate determinist dintr-un amestec de chei și alte intrări. Astfel de procese sunt numite derivarea cheii. HKDF este un exemplu de funcție de derivare a cheilor. O funcție pseudoaleatorie (PRF) poate fi un bloc de construcție pentru un KDF. De exemplu, atunci când două computere comunică printr-un canal criptat, de obicei obțin aceleași chei dintr-un secret partajat.

âRandomâ, pentru o cheie, înseamnă cât mai aproape posibil de uniform aleatoriu printre setul de chei posibile. Ce înseamnă asta depinde de tipul de cheie.

În general, criptarea simetrică utilizează chei care sunt doar o matrice de octeți, generând astfel un $n$cheia -bit înseamnă doar generare $n$ biți aleatori și numind asta o cheie. Acest lucru este valabil, de exemplu, în cazul cifrurilor bloc precum AES și Camellia, al cifrurilor flux precum Chacha20, al algoritmilor MAC precum HMAC și Poly1305 etc.

Criptarea asimetrică clasică utilizează chei care sunt numere cu anumite proprietăți, astfel încât generarea unor astfel de chei poate implica calcule suplimentare. O modalitate generică de a genera o cheie care poate fi reprezentată printr-un $n$-bit șirul este de generat $n$ biți aleatori, verificați dacă aceasta reprezintă o cheie validă și, dacă nu, încercați din nou. (Acest lucru presupune că reprezentarea este unică, adică nu există două chei identice cu aceeași reprezentare.) Această abordare funcționează bine pentru ECC chei, unde o cheie privată este un număr între $1$ și $2^n - a$ cu $a \ll 2^n$, așa că funcționează bine pentru a genera o aleatorie $n$-bit șir și interpretează-l ca un număr între $0$ și $2^n-1$ și încercați din nou dacă atingeți una dintre puținele valori nevalide. Unele alte criptosisteme, cum ar fi RSA, implică procese mult mai complexe de generare a cheilor, dar chiar și așa folosește „generați un șir de biți aleatoriu” și „încercați din nou dacă valoarea este nepotrivită” ca blocuri de construcție.

Puncte:-2
drapel cn

Se pare că există chei peste tot în criptografie.

Și așa se pare. Am atât de multe încât trebuie să le pun pe Post-it-uri lipite de monitoarele mele.

Dar dacă aveți nevoie de mai mult decât se poate obține aruncând monede, există mașini care pot face asta. Sunt lucruri de genul acest, acest și acest. Ei aruncă aleatoriu la infinit.

De ce ai avea nevoie de atâtea chei? Buna intrebare. Și există trei motive:

  1. În mod clar, dacă trebuie să accesați mai multe servicii, veți avea nevoie de mai multe parole/chei. Profesioniștii IT au de obicei 100 de parole/chei. În general, alegi parolele din experiențele tale de viață. Deci numele iguanei mele apare în majoritatea dintre ele (Trevor). Foile de calcul sunt utile pentru a gestiona acest lucru.

  2. Nu aveți încredere în guvern că criptografiile banale nu a fost spartă timp polinom. Poate doriți să vă rostogoliți cheile la fiecare 15 minute. În mod surprinzător, este doar ~ 0,1 biți/s de entropie, care este ușor de generat cu resurse minime.

  3. Nu aveți încredere în guvern că criptografiile banale nu a fost spartă timp polinom. Și așa (cum fac serviciile diplomatice [de ce?]) folosiți bloc de o singură datăs. Acest lucru necesită un simbol cheie cu adevărat aleatoriu pentru fiecare simbol text simplu pe care îl trimiteți. Acest lucru statistic nu este diferit de punctul 2.

sunt mai mult decât numere aleatorii?

Nu. Sunt doar numere aleatorii cu o distribuție uniformă. Dar, există conceptul de complexitatea lui Kolgomorov. Asta înseamnă că sursa numerelor nu este deterministă. Este universal unic. Din nou, ușor de realizat, dar necesită puțină gândire. \dev\urandom este determinist, deci nu poate fi folosit pentru punctul 3.


Vezi de asemenea distribuția cheii cuantice care facilitează schimbul securizat de chei între mai multe părți.

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.