Så vidt jeg husker krypterer du beskeden ved hjælp af offentlig nøgle og dekrypterer den ved hjælp af privat nøgle. Mit spørgsmål er, om det er muligt at få en offentlig nøgle fra en RSA privat nøgle. For eksempel hvis jeg har en nøgle som denne:

-----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 jeg få en offentlig nøgle?

Kommentarer

  • Denne nøgle lækkes nu til internettet og er ikke længere sikker til brug uden for eksempler, bare så du indser det.
  • ” Her er nøglen til mit hus. Hvem ønsker at lave en kopi? ”
  • Jeg håber, at OP genererede en eksempelnøgle kun til brug i dette spørgsmål og derefter straks bortskaffes.
  • @ basic6 ” Her er nøglen til mit hus. Hvordan gør jeg mig til en lås for det? ”
  • Du skal præcisere, om du ‘ spørger om bare den private nøgle (i hvilket tilfælde svaret er nej) eller den private nøglefil , som ved konvention (som her) inkluderer begge nøgler.

Svar

kan jeg få en offentlig nøgle?

Det er nemt at bruge 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--- 

Hvis du ønsker at få en idé om, hvad der er indeholdt i en nøglefil, kan du videregive indstillingen -text for at se en menneskelig læsbar (slags) debug dump. På denne måde kan du se at en nøglefil indeholder både private oplysninger, men også de offentlige oplysninger. Især indeholder den modulus og publicExponent, der fuldt ud beskriver den offentlige nøgle:

$ 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: dette svar handler ikke om ” at finde ” offentligheden fra den offentlige nøgle. Det er simpelt, at alle nødvendige oplysninger til både den private og den offentlige del er gemt i den private nøglefil. I den offentlige nøglefil mangler i stedet al information om den private del.
  • @Pysis Dette er asymmetrisk kryptering.
  • @Pysis Ja, asymmetrisk kryptering er ” let asymmetrisk “.
  • @SteffenUllrich Denne sætning skal være en del af dit svar
  • @Mehrdad: i forbindelse med informationssikkerhed i den virkelige verden betragtes alt, hvad der praktisk talt er umuligt, umuligt. Informationsteoretisk sikkerhed er irrelevant her, da den antager ubegrænset computerkraft, som simpelthen ikke eksisterer. Således mangler alle oplysninger vedrørende den private del , da alle oplysninger, der gør det muligt i praksis at udlede den private nøgle, mangler .

Svar

I praksis kan du hent den offentlige nøgle fra den private nøgle. I princippet ville det være muligt at oprette en RSA privat nøgle, hvorfra den tilsvarende offentlige nøgle ikke kan være let opnået, men dette ville kræve brug af både en ikke-standard nøglegenereringsmetode og et ikke-standardt format for privat nøgleopbevaring.


Lad os hurtigt gennemgå de grundlæggende. En offentlig RSA-nøgle består af to værdier:

  • modulet n (et produkt af to hemmeligt valgte store primtal p og q ), og
  • den offentlige eksponent e (som kan være den samme for mange nøgler og er typisk valgt til at være en lille ulige prime, oftest enten 3 eller 2 16 +1 = 6 5537).

En RSA privat nøgle kræver i mellemtiden mindst følgende to værdier:

  • modulet n (samme som i den offentlige nøgle) og
  • den private eksponent d (beregnet ud fra den offentlige eksponent e og faktorerne p og q af modulet).

De fleste formater til lagring af RSA private nøgler, inklusive PKCS1 RSAPrivateKey-format, der vises i dit spørgsmål, gem også en række yderligere værdier, herunder:

  • den offentlige eksponent e ,
  • faktorerne p og q for modulet,
  • de reducerede private eksponenter d p = d mod ( p − 1) og dq = d mod ( q − 1) og
  • ” CRT-koefficient “ q inv = q − 1 mod p .

Især inddragelsen af den offentlige eksponent e i formatet privat nøgle betyder, at den offentlige nøgle trivielt kan udvindes fra en PKCS1-kompatibel privat nøglefil.Også selvom den offentlige eksponent e ikke var inkluderet i den private nøglefil, ved at kende faktorerne p og q for modulet tillader begge eksponenter let beregnes ud fra den anden. Og endelig, selvom vi ikke vidste faktorerne for modulet, kunne vi for RSA-nøgler genereret på den sædvanlige måde simpelthen teste de mest anvendte værdier af e og se hvilken af dem der genererer ciphertexts, der kan dekrypteres korrekt ved hjælp af den givne private nøgle.


Alt, hvad der er sagt, hvis vi skulle bruge en ikke-standard RSA-nøglegenereringsalgoritme, der valgte e ( eller d ) tilfældigt fra det tilladte værdiområde (dvs. heltal større end 1 og mindre end og coprime med λ ( n ) = lcm ( p − 1, q − 1)), og hvis vi brugte et ikke-standard RSA privat nøgleformat, der kun lagrede de absolutte minimumsoplysninger til dekryptering (dvs. n og d ), så ville det ikke være muligt at beregne den offentlige nøgle ud fra den private nøgle uden effektivt at knække nøglen (dvs. faktorisering af modulet).

Faktisk hvis det bruges i en sådan ikke-standard mand ner bliver RSA-algoritmen “symmetrisk” i den forstand, at ingen af nøglerne ( n , e ) og ( n , d ) kan beregnes effektivt fra den anden, og den ene kan vilkårligt udpeges som den private nøgle. I princippet, hvis du ikke lod den private nøgleindehaver kende den tilsvarende “offentlige” nøgle (hvilket naturligvis betyder, at den ikke virkelig ville være offentlig mere), så kunne de kun dekryptere beskeder, men ikke kryptere dem. Ak den praktiske anvendelighed af et sådant skema er ret begrænset af den enkle kendsgerning, at den, der genererer nøgleparet, uundgåeligt ender med at kende begge halvdele af det alligevel.

Kommentarer

  • Jeg rynker panden over den sidste sætning. Da e alligevel betragtes som offentlig, kan ikke glemme e (og p og q) næppe betragtes som en bagdør, der er tilgængelig for ejeren af den private nøgle. (Og hvis en modstander får den private nøgle d, har de også den offentlige nøgle e og vundet)
  • @HagenvonEitzen: Det sidste afsnit taler om (ikke-standard) brugssagen, hvor e hverken er offentlig eller lille .
  • @ HagenvonEitzen: Faktisk nævnte jeg dette spørgsmål i det linkede crypto.SE-indlæg. Enhver ordning, der er afhængig af, at ” offentlig ” -tasten ikke kan afledes fra ” privat ” -tasten skal nødvendigvis holde ” offentlig ” nøglen hemmelig fra i det mindste nogle parter ( og derved overtræder en af standardantagelserne for offentlig nøgle-krypto) for, at denne funktion kan bruges. Men jeg kan se, hvordan dette afsnit kan have været vildledende; forhåbentlig er den omskrevne version i det mindste en smule klarere.
  • RSA har en interessant matematisk egenskab, at dekryptering bruger den samme formel som kryptering, bare med d i stedet for e. Takket være dette kan du bytte e og d (dvs. bruge den private nøgle til kryptering og den offentlige til dekryptering). Derefter får du den elektroniske signaturordning.

Svar

Ja. Det er også ret nemt. Hvis du ser på RSA-specifikationen, har en offentlig nøgle brug for n og e. En privat nøgle kan have p q d. Brug disse til at beregne.

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

Hvis du vil pakke dem tilbage i et PEM-format, se https://github.com/ius/rsatool

Kommentarer

  • Indrammet som et matematisk svar, dette er forkert. En privat nøgle kunne kun have n og d, og ud fra det er det umuligt generelt at beregne e. Det ‘ er normalt kun muligt i praksis, fordi e næsten altid er valgt blandt en håndfuld værdier. Indrammet som et praktisk svar er dette forkert: e er, i praksis altid inkluderet i de andre parametre (i det mindste n og d, normalt også de nødvendige parametre til CRT-baseret beregning).
  • Aftalt, men praktisk talt gemmes RSA med CRT private nøgler normalt som en tuple af (n, e, d, p, q, dP, dQ, qInv), som er tilfældet her. Jeg prøvede at indstille komponenterne matematisk.
  • Ja: praktisk talt er private nøgler normalt gemt som en tuple , der indeholder e . Der er ikke behov for at beregne e.
  • @Gilles Fra posten: ” en offentlig nøgle har brug for n og e.” og fra sudhackar ‘ s kommentar: ” men praktisk talt RSA med private CRT-nøgler er normalt gemt som en tuple af (n, e, d, p, q, dP, dQ, qlnv) “, hvilket fører mig til den konklusion, at praktisk talt private nøgler normalt er gemt som en tuple som indeholder den private nøgle . Der er ikke behov for at beregne den private nøgle, hvilket gør hele dette spørgsmål og alle dets svar irrelevante. Jeg forstår ikke ‘ din seneste kommentar. sudhackar ‘ s svar viser, hvordan man finder sæt af mulige offentlige nøgler fra den mindst mulige nyttige information.
  • @ wizzwizz4 Hvis du har p, q og d , har du mere end de mindst nyttige oplysninger, der er mulige for en privat nøgle. Jeg ‘ har aldrig set private nøgler med p, q og d, men ikke n og e. Du har brug for n for at gøre noget nyttigt med nøglen og gemme p og q i stedet for n ‘ får ikke noget lager.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *