Såvitt jag kommer ihåg krypterar du meddelandet med en offentlig nyckel och dekrypterar det med en privat nyckel. Min fråga är om det är möjligt att få en offentlig nyckel från en RSA privat nyckel. Till exempel om jag har en nyckel så här:
-----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-----
kan jag få en offentlig nyckel?
Kommentarer
- Den här nyckeln har nu läckt ut till internet och är inte längre säker för användning utanför exempel, bara så att du inser det.
- ” Här är nyckeln till mitt hus. Vem vill göra en kopia? ”
- Jag hoppas att OP genererade en exempelnyckel bara för användning i den här frågan och sedan omedelbart kasserade den.
- @ basic6 ” Här är nyckeln till mitt hus. Hur gör jag mig till ett lås för det? ”
- Du måste klargöra om du ’ frågar om bara den privata nyckeln (i vilket fall svaret är nej) eller den privata nyckelfilen , som enligt konvention (som här) innehåller båda nycklarna.
Svar
kan jag få en offentlig nyckel?
Det är enkelt att använda 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---
Om du vill få en uppfattning om vad som finns i en nyckelfil kan du skicka alternativet -text
för att se en människoläsbar (typ av) felsökningsdump. På så sätt kan du se att en nyckelfil innehåller både privat information men också allmän information. Speciellt innehåller den modul och publicExponent som fullständigt beskriver den offentliga nyckeln:
$ 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: (…)
Kommentarer
- @Pysis: det här svaret handlar inte om ” hitta ” allmänheten från den offentliga nyckeln. Det är enkelt att all information som behövs för både den privata och den offentliga delen lagras i den privata nyckelfilen. I den offentliga nyckelfilen i stället saknas all information om den privata delen.
- @Pysis Detta är asymmetrisk kryptering.
- @Pysis Ja, asymmetrisk kryptering är ” lite asymmetrisk ”.
- @SteffenUllrich Den meningen bör vara en del av ditt svar
- @Mehrdad: i samband med informationssäkerhet i den verkliga världen anses allt som är praktiskt genomförbart vara omöjligt. Informationsteoretisk säkerhet är irrelevant här eftersom den antar obegränsad datorkraft som helt enkelt inte finns. Således all information om den privata delen saknas bör läsas som all information som gör det möjligt i praktiken att härleda den privata nyckeln saknas .
Svar
I praktiken, ja, du kan hämta den offentliga nyckeln från den privata nyckeln. I princip skulle det vara möjligt att skapa en privat RSA-nyckel som motsvarande offentliga nyckel inte kan vara lätt från erhållits, men detta kräver både en icke-standard nyckelgenereringsmetod och ett icke-standardiserat lagringsformat för privat nyckel.
Låt oss snabbt granska grunderna. En RSA-nyckel består av två värden:
- modulen n (en produkt av två i hemlighet valda stora primtal p och q ), och
- den offentliga exponenten e (som kan vara densamma för många tangenter och väljs vanligtvis för att vara en liten udda prime, oftast antingen 3 eller 2 16 +1 = 6 5537).
En RSA-privatnyckel kräver emellertid minst följande två värden:
- modulen n (samma som i den offentliga nyckeln) och
- den privata exponenten d (beräknad från den offentliga exponenten e och faktorerna p och q för modulen).
De flesta format för lagring av privata RSA-nycklar, inklusive PKCS1 RSAPrivateKey-format som visas i din fråga, lagrar faktiskt en massa ytterligare värden, inklusive:
- den offentliga exponenten e ,
- faktorerna p och q för modulen,
- de reducerade privata exponenterna d p = d mod ( p − 1) och dq = d mod ( q − 1) och
- ” CRT-koefficient ” q inv = q − 1 mod p .
I synnerhet införandet av den offentliga exponenten e i det privata nyckelformatet betyder att den offentliga nyckeln kan trivialt extraheras från en PKCS1-kompatibel privat nyckelfil.Även om den offentliga exponenten e inte inkluderades i den privata nyckelfilen, är det möjligt att känna till faktorerna p och q för modulen, antingen exponenten för att lätt beräknas från den andra. Och slutligen, även om vi inte visste faktorerna för modulen, för RSA-nycklar som genererades på vanligt sätt kunde vi helt enkelt testa de mest använda värdena för e och se vilken av dem som genererar ciphertexts som kan dekrypteras korrekt med den givna privata nyckeln.
Allt sagt, om vi skulle använda en icke-standardiserad RSA-nyckelgenereringsalgoritm som valde e ( eller d ) slumpmässigt från det tillåtna värdena (dvs. heltal större än 1 och mindre än och coprime med λ ( n ) = lcm ( p − 1, q − 1)), och om vi använde ett icke-standardiserat RSA-privatnyckelformat som bara lagrade den minsta möjliga informationen för dekryptering (dvs. n och d ), då skulle det inte vara möjligt att beräkna den offentliga nyckeln från den privata nyckeln utan att effektivt knäcka nyckeln (dvs att ta med modulen).
Faktiskt, om den används i en sådan icke-standard man ner blir RSA-algoritmen ”symmetrisk” i den meningen att ingen av tangenterna ( n , e ) och ( n , d ) kan beräknas effektivt från den andra och endera kan godtyckligt betecknas som den privata nyckeln. I princip, om du inte lät den privata nyckelinnehavaren veta motsvarande ”offentliga” nyckel (vilket naturligtvis betyder att det inte skulle vara offentligt längre), kunde de bara dekryptera meddelanden men inte kryptera dem. Ack, den praktiska användbarheten av ett sådant schema är ganska begränsat av det enkla faktum att den som genererar nyckelparet oundvikligen kommer att sluta känna till båda halvorna av det ändå.
Kommentarer
- Jag rynkar pannan över den sista meningen. Eftersom e anses vara allmänt ändå, kan man inte glömma e (och p och q) knappast betraktas som en bakdörr som är tillgänglig för ägaren av den privata nyckeln. (Och om en motpart hämtar den privata nyckeln d har de också den offentliga nyckeln e och vunnit)
- @HagenvonEitzen: Det sista stycket talar om (icke-standard) användningsfall där e varken är offentligt eller litet .
- @ HagenvonEitzen: Jag nämnde faktiskt den frågan i det länkade krypto.SE-inlägget. Alla scheman som bygger på att ” public ” -nyckeln inte kan härledas från ” privat ” -tangenten måste nödvändigtvis hålla ” offentlig ” hemlig från åtminstone vissa parter ( och därigenom bryter mot ett av standardantagandena för krypto med offentlig nyckel) för att den funktionen ska vara till nytta. Men jag kan se hur det stycke kan ha varit vilseledande. förhoppningsvis är den omskrivna versionen åtminstone lite tydligare.
- RSA har en intressant matematisk egenskap att dekryptering använder samma formel som kryptering, bara med
d
istället före
. Tack vare detta kan du bytae
ochd
(dvs. använda den privata nyckeln för kryptering och den offentliga för dekryptering). Då får du det elektroniska signaturschemat.
Svar
Ja. Det är också ganska enkelt. Om du tittar på RSA-specifikationen behöver en offentlig nyckel n
och e
. En privat nyckel kan ha p
q
d
. Använd dessa för att beräkna.
n=p*q e=mod_inverse(d,euler_totient(n))
Om du vill packa dem till ett PEM-format se https://github.com/ius/rsatool
Kommentarer
- Inramat som ett matematiskt svar är detta fel. En privat nyckel kan bara ha n och d, och från det är det omöjligt i allmänhet att beräkna e. Det ’ är vanligtvis endast möjligt eftersom e nästan alltid väljs bland en handfull värden. Inramat som ett praktiskt svar är detta fel: e är, i praktiken alltid inkluderat med de andra parametrarna (åtminstone n och d, vanligtvis också de parametrar som behövs för CRT-baserad beräkning).
- Överenskommet, men praktiskt taget lagras RSA med privata CRT-nycklar vanligtvis som en tupel av (n, e, d, p, q, dP, dQ, qInv) vilket är fallet här. Jag försökte ställa in komponenterna matematiskt.
- Ja: praktiskt taget lagras privata nycklar vanligtvis som en tuple som innehåller e . Det finns inget behov av att beräkna e.
- @Gilles Från inlägget: ” en offentlig nyckel behöver
n
oche
.” och från sudhackar ’ s kommentar: ” men praktiskt taget RSA med CRT privata nycklar är lagras vanligtvis som en tuple av (n, e, d, p, q, dP, dQ, qlnv) ”, vilket leder mig till slutsatsen att praktiskt taget privata nycklar lagras vanligtvis som en tuple som innehåller den privata nyckeln . Det finns inget behov av att beräkna den privata nyckeln, vilket gör hela denna fråga och alla dess svar irrelevanta. Jag förstår inte ’ din senaste kommentar. sudhackar ’ s svar visar hur man hittar uppsättningen möjliga offentliga nycklar från minst möjlig användbar information. - @ wizzwizz4 Om du har p, q och d , har du mer än den minst användbara informationen som är möjlig för en privat nyckel. Jag ’ Jag har aldrig sett privata nycklar med p, q och d men inte n och e. Du behöver n för att göra någonting användbart med nyckeln och lagra p och q istället för n ’ får inte något lagringsutrymme.