Eu nu't într-adevăr să înțeleagă asta:
în conformitate cu: http://www.madboa.com/geek/openssl/#key-rsa , puteți genera o cheie publică de la o cheie privată.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Gândirea mea inițială a fost că acestea sunt generate într-o pereche împreună. Are cheia privată RSA conține suma? sau cheia publică?
openssl genrsa -out mykey.pem 1024
va produce de fapt un public - privat perechi de chei. Perechea este stocat în generat mykey.pem
de fișier.
openssl rsa -in mykey.pem -pubout > mykey.pub
va extrage cheia publică și imprima asta. Aici este un link la o pagina care descrie mai bine acest lucru.
EDIT: Verifica exemple secțiunea aici. La doar ieșire publică o parte a cheii private:
openssl rsa -in key.pem -pubout -out pubkey.pem
Pentru a obține o utilizabil cu cheie publică pentru SSH scop, utilizați ssh-keygen:
ssh-keygen -y -f key.pem > key.pub
Daca're în căutarea de a extrage cheia publică pentru utilizarea cu OpenSSH, veți avea nevoie pentru a obține cheia publică un pic diferit
$ ssh-keygen -y -f mykey.pem > mykey.pub
Acest format de cheie publică este compatibil cu OpenSSH. Adăuga cheia publică pentru a la distanță:~/.ssh/authorized_keys
și'll fi bine să plec
documente din SSH-KEYGEN(1)
ssh-keygen-y [-f input_keyfile] -y Această opțiune va citi un privat OpenSSH format de fișier și de imprimare o OpenSSH cheie publică la stdout.
În cele mai multe software-ul care generează RSA cu chei private, inclusiv openssl's, cheia privată este reprezentat ca un PKCS#1 RSAPrivatekey obiect sau o varianta a acestuia:
A. 1.2 cheia privată RSA sintaxa
O cheie privată RSA ar trebui să fie reprezentate cu ASN.1 tip RSAPrivateKey:
RSAPrivateKey ::= SECVENȚĂ { versiunea version, modulul ÎNTREG, - n publicExponent ÎNTREG, - e privateExponent ÎNTREG, -- d prime1 ÎNTREG, -- p prime2 ÎNTREG, - q exponent1 ÎNTREG, -- d mod (p-1) exponent2 ÎNTREG, -- d mod (q-1) coeficientul ÎNTREG, -- (inversul q) mod p otherPrimeInfos OtherPrimeInfos OPȚIONAL }
După cum puteți vedea, acest format are un număr de domenii, inclusiv modulul publice și exponent și, astfel, este strict superset de informații într-un RSA cu cheie publică.
Raspunsul meu de mai jos este un pic cam lungi, dar să sperăm că oferă unele detalii care lipsesc în răspunsurile anterioare. Am'll începe cu unele declarații și, în sfârșit, răspunsul la întrebarea inițială.
Pentru a cripta ceva folosind algoritmul RSA ai nevoie de modul și de criptare (publice) exponent perechea (n, e). Ca's cheia publică. Pentru a decripta ceva folosind algoritmul RSA ai nevoie de modulul și decriptare (privat) exponent perechea (n, d). Ca's cheia dvs. privată.
Pentru a cripta ceva folosind RSA cu cheie publică-ți tratezi text clar ca număr și ridica-l la puterea de e modul n:
ciphertext = ( plaintext^e ) mod n
Pentru a decripta ceva folosind cheia privată RSA-ți tratezi cifrat ca număr și de a ridica la puterea d modulul n:
plaintext = ( ciphertext^d ) mod n
Pentru a genera private (d,n) cheie folosind openssl puteți utiliza următoarea comandă:
openssl genrsa -out private.pem 1024
Pentru a genera publice (e,n) cheia din cheia privată folosind openssl puteți utiliza următoarea comandă:
openssl rsa -in private.pem -out public.pem -pubout
Pentru a diseca conținutul privat.pem privată RSA cheie generată de comanda openssl de mai sus, executați următoarea (ieșire trunchiat la etichetele de aici):
openssl rsa -in private.pem -text -noout | less
modulus - n
privateExponent - d
publicExponent - e
prime1 - p
prime2 - q
exponent1 - d mod (p-1)
exponent2 - d mod (q-1)
coefficient - (q^-1) mod p
Ar trebui't privată-cheie constau (n, d) pereche numai? De ce sunt 6 componente suplimentare? Acesta conține e (publice exponent), astfel încât publice RSA cheie pot fi generate/extras/derivat din cel privat.pem privată RSA cheie. Restul de 5 componente sunt acolo pentru a accelera procesul de decriptare. Se pare că, prin pre-calcul și stocarea cele 5 valori este posibil pentru a accelera de decriptare RSA cu un factor de 4. Decriptare va funcționa fără cele 5 componente, dar se poate face mai repede, dacă le aveți la îndemână. Accelerarea algoritm se bazează pe Chinese Remainder Theorem.
Da, privat.pem cheia privată RSA, de fapt, conține toate cele 8 valori; nici unul dintre ele sunt generate pe zbor, atunci când executați comanda anterioară. Încercați să rulați următoarele comenzi și comparați ieșire:
# Convert the key from PEM to DER (binary) format
openssl rsa -in private.pem -outform der -out private.der
# Print private.der private key contents as binary stream
xxd -p private.der
# Now compare the output of the above command with output
# of the earlier openssl command that outputs private key
# components. If you stare at both outputs long enough
# you should be able to confirm that all components are
# indeed lurking somewhere in the binary stream
openssl rsa -in private.pem -text -noout | less
Această structură de cheia privată RSA este recomandat de PKCS#1 v1.5 ca o alternativă (în al doilea rând**) de reprezentare. PKCS#1 v2.0 standard exclude e și d exponenți de alternative de reprezentare cu totul. PKCS#1 v2.1 și v2.2 propune modificări suplimentare la alternative de reprezentare, de opțional, inclusiv mai multe CRT-componente conexe.
Pentru a vedea conținutul de public.pem publice RSA cheie executați următoarea (ieșire trunchiat la etichetele de aici):
openssl rsa -in public.pem -text -pubin -noout
Modulus - n
Exponent (public) - e
Nici o surpriză aici. L's doar (n, e) pereche, așa cum a promis.
Acum în cele din urmă de a răspunde la întrebarea inițială: Cum a fost arătat mai sus privată RSA cheie generate folosind openssl conține componente de atât publice cât și private cheile și ceva mai mult. Atunci când se generează/extract/obține cheia publică de la cheia privată, openssl exemplare, două dintre aceste componente (e,n) într-un fișier separat, care devine cheia publică.
Cheia Publică nu este stocat în fișier PEM ca unii oameni cred. Următoarele DER structura este prezent pe Fișier Cheie Privată:
openssl rsa -text-în mykey.pem
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
Deci, nu există suficiente date pentru a calcula Cheia Publică (modulul publice și exponent), care este ce openssl rsa-în mykey.pem -pubout
nu
aici, în acest cod în primul rând vom crea chei RSA, care este privat, dar nu a pereche a cheii publice, precum și astfel încât pentru a obține reale cheie publică pur și simplu a face acest lucru
openssl rsa -in mykey.pem -pubout > mykey.pub
sperăm că veți obține pentru mai multe informatii a verifica acest lucru
În primul rând, o scurtă recapitulare pe cheie RSA generație.
Cheia publică este format din modulul și exponentul public.
Un minim cheie privată ar consta în modul și exponentul privat. Nu există nici un calcul fezabilă modalitate sigura de a trece de la un cunoscut modul și private exponent corespunzătoare publice exponent.
Cu toate acestea:
Deci, în cel mai practic RSA implementări puteți obține cheia publică de la cheia privată. Ar fi posibil să se construiască un RSA criptosistem bazat în cazul în care acest lucru nu a fost posibil, dar nu este un lucru de făcut.
Use the following commands:
1. openssl req -x509 -nodes -days 365 -sha256 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem
Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
.............+++
..................................................................................................................................................................+++
writing new private key to 'mycert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
2. If you check there will be a file created by the name : mycert.pem
3. openssl rsa -in mycert.pem -pubout > mykey.txt
writing RSA key
4. If you check the same file location a new public key : mykey.txt will be created.