Din câte îmi amintesc, criptați mesajul folosind cheia publică și decriptați-l folosind cheia privată. Întrebarea mea este dacă este posibil să obțineți o cheie publică de la o cheie privată RSA. De exemplu, dacă am o cheie ca aceasta:

-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQCtrKVnwse4anfX+JzM7imShXZUC+QBXQ11A5bOWwHFkXc4nTfE Or3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j3NgqX8zZJG7IwLJ/Pm2sRW5Q j32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdWtoeLfxDBL2AJ20qXzQIDAQAB AoGBAKNXi0GpmjnCOPDxLFg5bvQVfhLSFCGMKQny1DVEtsfgZmbixv5R2R41T4+d CHJMdEsUFFJ6I7CRLTcg1SDU8IhcAWCBRSNeVuomCHlQG16ti8HxwhiwIcjvDz/z NC2sL5ZJ2eJnhbtXLdf6pxxO1pA5vLp1AX06IaETO977XvupAkEA+ZgtGZybyUkf tEA3ekXc5eLoW+zgU0C1fATWcIZ8Iq5YV1BW+3oAzf8HgIbkQh4LM2qa6An3l+vW NXR4wICHkwJBALIhrcdJqKw36qiyenq+m78klp5SnurQifVt0Sy1GMWyOUqYz5jK t9sGo9Qn6GDuYe/XGXKWQW25PkEYXxxPPx8CQQCpICyvRidp5VrOURVGjUB5pZ+9 am02/In9V2nXJcnH1kuWHqJSFQGmlEEJHl5dTu5YEMyWnupezzd/UUThbDZxAkAz TNO5QxNalbf04YG4e9Bq2eSur+iog2pXzkqhb3404UDypNOUkz0jzOO9o8ieschu xCnGAFPTf7fYE2bAxmnNAkEA0/3bdsvJclquypqP9CQeQnxGwQtWz6+yn07gj3U1 V19mdeKCUZWklRarrcr67u9DdEx+JowyEY/ppzgeQtW01g== -----END RSA PRIVATE KEY----- 

pot obține o cheie publică?

Comentarii

  • Această cheie este acum scursă pe internet și nu mai este sigură pentru utilizare în afara exemplelor, doar pentru a vă da seama de acest lucru.
  • ” Iată cheia casei mele. Cine vrea să facă o copie? ”
  • Sper că OP a generat o cheie de exemplu doar pentru a fi utilizată în această întrebare și apoi a eliminat-o imediat.
  • @ basic6 ” Iată cheia casei mele. Cum îmi fac o încuietoare? ”
  • Trebuie să clarificați dacă ‘ sunteți interesat de doar cheia privată (caz în care răspunsul este nu) sau fișierul cheii private , care, prin convenție (ca aici), include ambele chei.

Răspuns

Pot obține o cheie publică?

Este ușor să folosiți openssl rsa:

$ openssl rsa -in the-private-key-from-your-question.pem -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtrKVnwse4anfX+JzM7imShXZU C+QBXQ11A5bOWwHFkXc4nTfEOr3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j 3NgqX8zZJG7IwLJ/Pm2sRW5Qj32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdW toeLfxDBL2AJ20qXzQIDAQAB -----END PUBLIC KEY--- 

Dacă doriți să vă faceți o idee despre ceea ce este conținut într-un fișier cheie, puteți trece opțiunea -text pentru a vedea o descărcare de depanare (de fel) citită de om. În acest fel puteți vezi că un fișier cheie conține atât informații private, cât și informații publice. Mai ales conține modulul și publicExponent care descriu pe deplin cheia publică:

$ openssl rsa -text -in the-private-key-from-your-question.pem Private-Key: (1024 bit) modulus: 00:ad:ac:a5:67:c2:c7:b8:6a:77:d7:f8:9c:cc:ee: 29:92:85:76:54:0b:e4:01:5d:0d:75:03:96:ce:5b: 01:c5:91:77:38:9d:37:c4:3a:bd:df:26:39:d1:49: 4e:40:dc:84:4e:15:4f:e9:55:53:62:5c:93:64:97: ba:90:64:ae:66:61:bf:23:dc:d8:2a:5f:cc:d9:24: 6e:c8:c0:b2:7f:3e:6d:ac:45:6e:50:8f:7d:82:fe: e2:6e:9b:ae:10:fe:21:08:b0:28:3f:98:98:c3:2e: 1d:65:ca:51:0c:12:ec:ca:81:37:56:b6:87:8b:7f: 10:c1:2f:60:09:db:4a:97:cd publicExponent: 65537 (0x10001) privateExponent: (…) 

Comentarii

  • @Pysis: acest răspuns nu este despre ” găsirea ” public din cheia publică. Este simplu că toate informațiile necesare atât pentru partea privată, cât și pentru cea publică sunt stocate în fișierul cu cheie privată. În fișierul cu cheie publică, în schimb, lipsesc toate informațiile referitoare la partea privată.
  • @Pysis Aceasta este criptarea asimetrică .
  • @Pysis Da, criptarea asimetrică este ” ușor asimetric „.
  • @SteffenUllrich Această propoziție ar trebui să facă parte din răspunsul dvs.
  • @Mehrdad: în contextul securității informațiilor din lumea reală, tot ceea ce este practic imposibil de considerat este considerat infesibil. Securitatea teoretică a informației este irelevantă aici, deoarece presupune o putere de calcul nelimitată, care pur și simplu nu există. Astfel lipsesc toate informațiile referitoare la partea privată ar trebui citite ca lipsesc toate informațiile care fac posibilă în practică derivarea cheii private .

Răspuns

În practică, da, puteți obțineți cheia publică din cheia privată. În principiu, ar putea fi creată o cheie privată RSA din care cheia publică corespunzătoare nu poate fi ușor obținut, dar aceasta ar necesita utilizarea atât a unei metode de generare a cheilor non-standard, cât și a unui format de stocare a cheilor private non-standard.


Să examinăm rapid elementele de bază. O cheie publică RSA constă din două valori:

  • modulul n (un produs din două numere mari alese în secret p și q ), și
  • exponentul public e (care poate fi același pentru multe taste și este de obicei ales ca fiind un prim prim mic, cel mai frecvent fie 3, fie 2 16 +1 = 6 5537).

Între timp, o cheie privată RSA necesită cel puțin următoarele două valori:

  • modulul n (la fel ca în cheia publică) și
  • exponentul privat d (calculat din exponentul public e și factorii p și q ai modulului).

Cu toate acestea, majoritatea formatelor pentru stocarea cheilor private RSA, inclusiv PKCS1 Formatul RSAPrivateKey afișat în întrebarea dvs., stocați de fapt și o grămadă de valori suplimentare, inclusiv:

  • exponentul public e ,
  • factorii p și q ai modulului,
  • exponenții privați reduși d p = d mod ( p − 1) și dq = d mod ( q − 1) și
  • ” coeficient CRT „ q inv = q − 1 mod p .

În special, includerea exponentului public e în formatul cheii private înseamnă că cheia publică poate fi extrasă în mod banal dintr-un fișier de chei private compatibil PKCS1.De asemenea, chiar dacă exponentul public e nu a fost inclus în fișierul cu cheie privată, cunoașterea factorilor p și q ai modulului permite fie exponentul să fie calculat cu ușurință de la celălalt. Și, în cele din urmă, chiar dacă nu am cunoaște factorii modulului, pentru cheile RSA generate în mod obișnuit am putea testa pur și simplu cele mai utilizate valori ale e și a vedea care dintre ele generează textele cifrate care pot fi decriptate corect folosind cheia privată dată.


Tot ce s-a spus, dacă ar fi să folosim un algoritm de generare de chei RSA non-standard care a ales e ( sau d ) aleatoriu din intervalul admisibil de valori (adică numerele întregi mai mari de 1 și mai mici decât și coprimă cu λ ( n ) = lcm ( p − 1, q − 1)), și dacă am folosit un format de cheie privată RSA non-standard care a stocat doar informațiile minime pentru decriptare (adică n și d ), atunci nu ar fi posibil să se calculeze cheia publică din cheia privată fără a sparge efectiv cheia (adică luând în considerare modulul).

Într-adevăr, dacă este utilizat într-un astfel de om non-standard ner, algoritmul RSA devine „simetric” în sensul că nici una dintre taste ( n , e ) și ( n , d ) poate fi calculat eficient din celălalt și oricare dintre acestea ar putea fi desemnată în mod arbitrar ca cheie privată. În principiu, dacă nu l-ați anunța pe titularul cheii private să știe cheia „publică” corespunzătoare (ceea ce, desigur, înseamnă că nu ar mai fi publică), atunci ar putea decripta mesajele, dar nu le cripta. Din păcate, utilitatea practică a oricărei astfel de scheme este destul de limitată de simplul fapt că oricine generează perechea de chei va ajunge inevitabil să cunoască oricum ambele jumătăți ale acesteia.

Comentarii

  • M-am încruntat cu privire la ultima propoziție. Întrucât e este considerat public oricum, fără a uita e (și p și q) cu greu poate fi considerată o ușă din spate disponibilă proprietarului cheii private. (Și dacă un adversar obține cheia privată d, are și cheia publică e și a câștigat)
  • @HagenvonEitzen: Ultimul paragraf vorbește despre cazul de utilizare (non-standard) în care e nu este nici publică, nici mică .
  • @HagenvonEitzen: Într-adevăr, am menționat această problemă în postarea crypto.SE conectată. Orice schemă care se bazează pe cheia ” publică ” care nu poate fi derivată din ” privat ” cheia trebuie să păstreze în mod necesar cheia ” publică ” secretă pentru cel puțin unele părți ( și astfel încalcă una dintre ipotezele standard ale criptelor cu cheie publică) pentru ca această caracteristică să fie de orice folos. Dar pot vedea cum acest paragraf poate fi înșelător; sperăm că versiunea rescrisă este cel puțin puțin mai clară.
  • RSA are o proprietate matematică interesantă că decriptarea folosește aceeași formulă ca și criptarea, doar cu d în loc de e. Datorită acestui fapt, puteți schimba e și d (adică utilizați cheia privată pentru criptare și cea publică pentru decriptare). Apoi, veți obține schema de semnătură electronică.

Răspuns

Da. Este destul de ușor. Dacă te uiți la specificațiile RSA, o cheie publică are nevoie de n și de e. O cheie privată ar putea avea p q d. Folosiți-le pentru a calcula.

n=p*q e=mod_inverse(d,euler_totient(n)) 

Dacă doriți să le împachetați într-un format PEM, consultați https://github.com/ius/rsatool

Comentarii

  • Încadrat ca răspuns matematic, acest lucru este greșit. O cheie privată ar putea avea doar n și d și, din aceasta, este imposibil în general pentru a calcula e. Este ‘ de obicei posibil în practică numai pentru că e este aproape întotdeauna selectat dintre o mână de valori. Încadrat ca răspuns practic, acest lucru este greșit: e este, în practică, întotdeauna inclus cu ceilalți parametri (cel puțin n și d, de obicei și parametrii necesari pentru calculul bazat pe CRT).
  • De acord, dar practic RSA cu chei private CRT sunt de obicei stocate ca un tuplu de (n, e, d, p, q, dP, dQ, qInv) care este cazul aici. Încercam să setez componentele matematic.
  • Da: practic, cheile private sunt de obicei stocate ca un tuplu care conține e . Nu este nevoie să calculați e.
  • @Gilles Din postare: ” o cheie publică are nevoie de n și e.” și din sudhackar ‘ s comentariu: ” dar practic RSA cu chei private CRT sunt stocat de obicei ca un tuplu de (n, e, d, p, q, dP, dQ, qlnv) „, ceea ce mă conduce la concluzia că practic, cheile private sunt de obicei stocate ca un tuplu care conține cheia privată . Nu este nevoie să calculați cheia privată, făcând astfel întreaga întrebare și toate răspunsurile sale irelevante. Nu ‘ nu vă înțeleg cel mai recent comentariu. Răspunsul sudhackar ‘ arată cum să găsiți setul de chei publice posibile din cele mai puțin utile informații posibile.
  • @ wizzwizz4 Dacă aveți p, q și d , aveți mai mult decât cele mai puțin utile informații posibile pentru o cheie privată. ‘ nu am văzut niciodată chei private cu p, q și d, dar nu n și e. Aveți nevoie de n pentru a face orice lucru util cu cheia și stocarea p și q în loc de n ‘ nu câștigă niciun spațiu de stocare.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *