Så vidt jeg husker krypterer du meldingen ved hjelp av en offentlig nøkkel og dekrypterer den med en privat nøkkel. Spørsmålet mitt er om det er mulig å få en offentlig nøkkel fra en RSA privat nøkkel. Hvis jeg for eksempel har en nøkkel 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økkel?

Kommentarer

  • Denne nøkkelen er nå lekket til internett og ikke lenger trygg for bruk utenfor eksempler, bare slik at du skjønner det.
  • » Her er nøkkelen til huset mitt. Hvem vil lage en kopi? »
  • Jeg håper at OP genererte et eksempel på en nøkkel bare for bruk i dette spørsmålet og deretter kastet det umiddelbart.
  • @ basic6 » Her er nøkkelen til huset mitt. Hvordan lager jeg meg en lås for det? »
  • Du må avklare om du ‘ spør om bare den private nøkkelen (i så fall er svaret nei) eller den private nøkkelfilen , som etter konvensjonen (som her) inkluderer begge nøklene.

Svar

kan jeg få en offentlig nøkkel?

Det er enkelt å bruke 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 vil få en ide om hva som finnes i en nøkkelfil, kan du sende alternativet -text for å se en menneskelig lesbar (slags) feilsøking dump. På denne måten kan du se at en nøkkelfil inneholder både privat informasjon, men også offentlig informasjon. Spesielt inneholder den modulus og publicExponent som fullt ut beskriver den offentlige nøkkelen:

$ 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 svaret handler ikke om » å finne » publikum fra den offentlige nøkkelen. Det er enkelt at all informasjon som trengs for både den private og den offentlige delen, lagres i den private nøkkelfilen. I den offentlige nøkkelfilen mangler all informasjon om den private delen i stedet.
  • @Pysis Dette er asymmetrisk kryptering.
  • @Pysis Ja, asymmetrisk kryptering er » litt asymmetrisk «.
  • @SteffenUllrich Den setningen skal være en del av svaret ditt
  • @ Mehrdad: i sammenheng med informasjonssikkerhet i den virkelige verden, blir alt som praktisk talt er gjennomførbart ansett som lite mulig. Informasjonsteoretisk sikkerhet er ikke relevant her, siden den antar ubegrenset datakraft som ganske enkelt ikke eksisterer. Dermed mangler all informasjon angående den private delen som all informasjon som gjør det mulig i praksis å utlede den private nøkkelen mangler .

Svar

I praksis, ja, du kan få den offentlige nøkkelen fra den private nøkkelen. I prinsippet ville det være mulig å opprette en RSA privat nøkkel som den tilsvarende offentlige nøkkelen ikke kan være lett for oppnådd, men dette vil kreve å bruke både en ikke-standard nøkkelgenereringsmetode og et ikke-standard lagringsformat for privatnøkkel.


La oss raskt gå gjennom det grunnleggende. En offentlig RSA-nøkkel består av to verdier:

  • modulen n (et produkt av to hemmelig valgte store primtall p og q ), og
  • den offentlige eksponenten e (som kan være den samme for mange nøkler, og er vanligvis valgt til å være en liten oddetall, vanligvis enten 3 eller 2 16 +1 = 6 5537).

En RSA privat nøkkel krever i mellomtiden minst følgende to verdier:

  • modulen n (samme som i den offentlige nøkkelen), og
  • den private eksponenten d (beregnet fra den offentlige eksponenten e og faktorene p og q for modulen).

De fleste formater for lagring av RSA private nøkler, inkludert PKCS1 RSAPrivateKey-format vist i spørsmålet ditt, lagrer faktisk en rekke tilleggsverdier også, inkludert:

  • den offentlige eksponenten e ,
  • faktorene p og q av modulen,
  • de reduserte private eksponentene d p = d mod ( p − 1) og dq = d mod ( q − 1), og
  • » CRT-koeffisient « q inv = q − 1 mod p .

Spesielt inkluderingen av den offentlige eksponenten e i formatet for privat nøkkel betyr at den offentlige nøkkelen trivielt kan hentes fra en PKCS1-kompatibel privat nøkkelfil.Selv om den offentlige eksponenten e ikke var inkludert i den private nøkkelfilen, er det mulig å kjenne faktorene p og q til modulen, selv om den offentlige eksponenten e er for å bli lett beregnet fra den andre. Og til slutt, selv om vi ikke kjente faktorene til modulen, kunne vi for RSA-nøkler generert på vanlig måte bare teste de mest brukte verdiene til e og se hvilken av dem som genererer krypteringstekster som kan dekrypteres riktig ved hjelp av den gitte private nøkkelen.


Alt som er sagt, hvis vi skulle bruke en ikke-standard RSA-nøkkelgenereringsalgoritme som valgte e ( eller d ) tilfeldig fra det tillatte verdiområdet (dvs. heltallene større enn 1 og mindre enn og koprime med λ ( n ) = lcm ( p − 1, q − 1)), og hvis vi brukte et ikke-standard RSA privat nøkkelformat som bare lagret bare minimum informasjon for dekryptering (dvs. n og d ), da ville det ikke være mulig å beregne den offentlige nøkkelen fra den private nøkkelen uten å knekke nøkkelen effektivt (dvs. faktorisering av modulen).

Faktisk, hvis den brukes i en slik ikke-standard mann ner blir RSA-algoritmen «symmetrisk» i den forstand at ingen av tastene ( n , e ) og ( n , d ) kan beregnes effektivt fra den andre, og den ene kan vilkårlig betegnes som den private nøkkelen. I prinsippet, hvis du ikke la den private nøkkelinnehaveren vite den tilsvarende «offentlige» nøkkelen (som selvfølgelig betyr at den ikke egentlig ville være offentlig lenger), så kunne de bare dekryptere meldinger, men ikke kryptere dem. Akk, den praktiske nytten av en slik ordning er ganske begrenset av det enkle faktum at den som genererer nøkkelparet, uunngåelig vil ende opp med å kjenne begge halvdelene av det uansett. / p>

Kommentarer

  • Jeg rynker pannen rundt siste setning. Da e uansett regnes som offentlig, kan ikke å glemme e (og p og q) knapt betraktes som en bakdør tilgjengelig for eieren av den private nøkkelen. (Og hvis en motstander får den private nøkkelen d, har de også den offentlige nøkkelen e og vunnet)
  • @ HagenvonEitzen: Siste avsnitt snakker om (ikke-standard) brukssaken der e verken er offentlig eller liten .
  • @ HagenvonEitzen: Jeg nevnte faktisk det problemet i det koblede crypto.SE-innlegget. Enhver ordning som er avhengig av at » offentlig » nøkkelen ikke kan avledes fra » private » -tasten må nødvendigvis holde » offentlig » nøkkelhemmelig fra i det minste noen parter ( og dermed bryter en av standardforutsetningene for kryptering med offentlig nøkkel) for at den funksjonen skal være til nytte. Men jeg kan se hvordan det avsnittet kan ha vært villedende; forhåpentligvis er den omskrevne versjonen i det minste litt tydeligere.
  • RSA har en interessant matematisk egenskap at dekryptering bruker samme formel som kryptering, bare med d i stedet for e. Takket være dette kan du bytte e og d (dvs. bruke den private nøkkelen for kryptering og den offentlige for dekryptering). Så får du den elektroniske signaturordningen.

Svar

Ja. Det er ganske enkelt også. Hvis du ser på RSA-spesifikasjonen, trenger en offentlig nøkkel n og e. En privat nøkkel kan ha p q d. Bruk disse til å beregne.

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

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

Kommentarer

  • Innrammet som et matematisk svar, er dette feil. En privat nøkkel kan bare ha n og d, og ut fra det er det umulig generelt å beregne e. Det ‘ er vanligvis bare mulig i praksis fordi e nesten alltid er valgt blant en håndfull verdier. Innrammet som et praktisk svar, er dette feil: e er, i praksis alltid inkludert med de andre parametrene (i det minste n og d, vanligvis også parametrene som trengs for CRT-basert beregning).
  • Avtalt, men praktisk talt lagres RSA med CRT private nøkler vanligvis som en tuple av (n, e, d, p, q, dP, dQ, qInv) som er tilfelle her. Jeg prøvde å sette komponentene matematisk.
  • Ja: praktisk talt er private nøkler vanligvis lagret som en tuple som inneholder e . Det er ikke behov for å beregne e.
  • @Gilles Fra innlegget: » en offentlig nøkkel trenger n og e.» og fra sudhackar ‘ s kommentar: » men praktisk talt RSA med CRT private nøkler er vanligvis lagret som en tuple av (n, e, d, p, q, dP, dQ, qlnv) «, noe som fører meg til konklusjonen at praktisk talt er private nøkler vanligvis lagret som en tuple som inneholder den private nøkkelen . Det er ikke nødvendig å beregne den private nøkkelen, og dermed blir hele dette spørsmålet og alle svarene irrelevante. Jeg forstår ikke ‘ den siste kommentaren din. sudhackar ‘ s svar viser hvordan du finner settet med mulige offentlige nøkler fra minst mulig nyttig informasjon.
  • @ wizzwizz4 Hvis du har p, q og d , har du mer enn minst nyttig informasjon mulig for en privat nøkkel. Jeg ‘ har aldri sett private nøkler med p, q og d, men ikke n og e. Du trenger n for å gjøre alt som er nyttig med nøkkelen og lagre p og q i stedet for n ‘ t får noe lagringsplass.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *