După generarea unei perechi de chei, putem alege ce cheie va fi privată sau publică?
Nu, în general nu putem. Pentru cele mai multe criptosisteme asimetrice cheile private și publice sunt tipuri complet diferite de obiecte (de exemplu, unul poate fi un număr, iar celălalt un punct pe o curbă eliptică) și nu există nicio modalitate de a folosi unul în locul celuilalt.
Există, totuși, o cvasi-excepție notabilă: the Criptosistem RSA are chei publice și private care poate fi reprezentat ca același tip de obiect (un modul și un exponent) și utilizat în aceeași operație matematică (exponentiație modulară) pentru a cripta și decripta mesajele. Asa de, teoretic, s-ar putea genera o pereche de taste RSA „simetrică” (așa cum este descris în această întrebare) și apoi alegeți ce jumătate să publicați și ce jumătate să păstrați privată.
În practică, totuși, chiar și generarea de chei RSA nu funcționează în acest fel, din câteva motive:
Este mai eficient să alegeți exponentul public să fie un număr mic fix cu o formă simplă în binar. (Alegerile comune sunt 3 și 65537 = 216 + 1.) Acest lucru este sigur de făcut pentru cheia publică, dar ar fi, evident, dezastruos de nesigur pentru cheia privată (deoarece exponentul este singura parte secretă a cheii private – modulul este același pentru ambele jumătăți ale cheii private). pereche de chei).
Există modalități de a accelera operațiunile cu cheia privată RSA (adică decriptarea sau semnarea) utilizând trucuri matematice suplimentare, cum ar fi Teorema chineză a restului, dar acestea necesită informații suplimentare despre modul în care au fost generate cheile (cum ar fi factorii primi secreti ai modulului). Stocarea acestor informații suplimentare alături de cheia privată nu este nicio problemă, iar formatele de chei private RSA cele mai frecvent utilizate chiar o fac. Dar publicarea acestuia ar permite oricui să spargă perechea de chei și să decripteze și/sau să falsifice mesaje.
Rezultatul tuturor acestor lucruri este că, în practică, este posibil să se calculeze o cheie publică RSA din cheia privată, dar nu invers. După cum spune răspunsul legat (pe care l-am scris) pe security.SE, teoretic ar fi posibil să se genereze o cheie RSA privată securizată din care cheia publică nu poate fi calculată, dar acest lucru ar necesita utilizarea atât a unui algoritm de generare a cheilor nestandard, cât și a unui algoritm nestandard. format de stocare a cheii private. Și chiar dacă problemele de format ar fi rezolvate, nu toate implementările RSA ar funcționa cu astfel de chei private (din cauza lipsei informațiilor suplimentare menționate mai sus).
Criptăm sau decriptăm un Cipher Text cu o anumită cheie? Este corect din punct de vedere tehnic să spui așa?
Un fel, da. Dar ce noi de obicei do este generarea unei chei aleatorii pentru a cifru simetric precum AES, criptați textul simplu cu asta și apoi criptați cheia AES utilizând algoritmul de criptare asimetrică și cheia publică a destinatarului vizat. Și apoi trimitem atât textul cifrat AES, cât și cheia AES criptată asimetric către destinatar, care poate decripta mai întâi cheia AES și apoi textul cifrat.
Motivul principal pentru a folosi astfel criptare hibridă este că cifrurile simetrice precum AES sunt proiectate pentru a cripta rapid multe date, în timp ce sistemele asimetrice nu sunt:
Criptarea asimetrică tinde să fie relativ lentă – adesea de zeci sau sute sau mii de ori mai lentă decât criptarea aceleiași cantități de date cu un cifru simetric rapid precum AES. Decriptarea asimetrică este adesea și mai lentă (în timp ce decriptarea AES este de obicei la fel de rapidă ca și criptarea).
Toate schemele sigure de criptare asimetrică produc text cifrat mai lung decât textul simplu, din cauza necesității de a injecta o anumită aleatorie în procesul de criptare pentru a preveni atacurile de ghicire. Unele (cum ar fi ElGamal-like schemes) va dubla lungimea textului simplu (după ce îl completează până la dimensiunea blocului de mesaje). Altele, cum ar fi RSA, necesită completarea textului simplu de până la zeci de ori lungimea inițială. Evident, acest lucru nu este de dorit atunci când se criptează cantități mari de date. Între timp, cifrurile simetrice, cum ar fi AES, adaugă în general doar câteva zeci de octeți de date suplimentare textului cifrat, indiferent de lungimea acestuia (în funcție de modul de operare).
În general, schemele de criptare asimetrică pur și simplu nu sunt concepute pentru a cripta mesaje mai lungi de câteva zeci de octeți sau cam asa ceva (în funcție de dimensiunea cheii și de alți parametri ai schemei). O cheie AES se va potrivi bine, dar chiar și un singur mesaj de chat nu va â și o întreagă pagină web sau o imagine sau un flux video categoric nu va.
(Tehnic, la fel este cam adevărat pentru simetric cifruri bloc ca și AES: de asemenea, criptează datele în bucăți de câteva zeci de octeți, iar pentru a cripta mesajele lungi, acestea trebuie să fie utilizate cu un dispozitiv adecvat. mod de operare care aplică cifrul blocului cu bloc de date. Dar există o mulțime de moduri de operare de criptare bloc rapide și sigure pe care majoritatea software-ului și hardware-ului cripto le acceptă imediat, în timp ce pentru schemele de criptare asimetrică nu există practic niciuna. Și dacă ați încerca să proiectați și să implementați unul singur, șansele sunt că nu ar fi nici eficient, nici sigur.)
Este corect să spunem că:
Având această pereche de chei, pot cripta un mesaj cu cheia mea privată și apoi îl pot publica.Faptul că oricine poate decripta mesajul cu cheia mea publică înseamnă că l-am criptat cu cheia mea privată, ceea ce înseamnă că trebuie să fi fost eu cel care am făcut mesajul, deoarece doar eu am cheia mea privată. Criptarea datelor cu cheia privată a expeditorului numim un format de mesaj deschis, deoarece oricine are o copie a cheii publice corespunzătoare poate decripta mesajul.
Nu, nu chiar. Cheia privată într-o schemă de criptare asimetrică este pentru decriptare, în timp ce cheia publică este pentru criptare. În general, nu puteți cripta nimic cu cheia privată, la fel cum nu puteți decripta cu cheia publică.
Cu toate acestea, există și asimetrice scheme de semnătură digitală care vă permit semn date cu o cheie privată și pentru verifica semnătura cu o cheie publică, dovedind că datele au fost de fapt semnate cu jumătatea privată a aceleiași perechi de chei.
Unele scheme de semnătură digitală se bazează într-adevăr pe scheme de criptare asimetrică. De fapt, o semnătură digitală poate fi considerată, într-un anumit sens general, ca a dovada de cunoștințe zero a faptului că semnatarul ar putea decripta un anumit text cifrat (de obicei derivat din a hash a mesajului care este semnat) cu cheia lor privată folosind o schemă de criptare asimetrică, demonstrând astfel că au avut acces atât la mesaj (sau cel puțin hash-ul acestuia), cât și la cheia privată.
În special, criptosistemul RSA poate fi folosit și ca parte a unei scheme de semnătură (cum ar fi RSA-PSS), folosind același tip de chei publice și private și aceleași operații matematice (exponentiare modulară) ca și pentru criptarea RSA. Aceasta (și primele explicații populare ale criptografiei cu cheie publică) este de unde provine descrierea comună, dar înșelătoare a semnării (RSA) ca „criptare cu cheie privată”. Tehnic nu este în întregime greșit, cel puțin dacă ignori toate alte părți ale schemei (hashing, padding, etc.), cu excepția exponențiației modulare din nucleul algoritmului RSA.
Dar dacă sunteți dispus să simplificați lucrurile atât de departe, ați putea la fel de bine să rețineți că ambii Criptarea și decriptarea RSA (și semnarea și verificarea semnăturii) sunt în principiu doar exponențiații modulare, așa că ați putea spune la fel de bine că sunt toate același lucru, iar semnarea RSA este de fapt doar decriptare RSA aplicată unui text cifru special. Ceea ce ar fi, de asemenea, adevărat din punct de vedere tehnic, într-un fel și, probabil, nu mai mult (sau mai puțin) înșelător decât descrierea acesteia ca „criptare cu cheie privată”.