Saya tidak begitu mengerti yang ini:
menurut: http://www.madboa.com/geek/openssl/#key-rsa , Anda dapat membuat kunci publik dari kunci pribadi.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Pemikiran awal saya adalah bahwa keduanya dihasilkan secara berpasangan. Apakah kunci pribadi RSA berisi jumlah? atau kunci publik?
Jawaban:
akan benar-benar menghasilkan pasangan kunci publik-swasta. Pasangan disimpan dalam
mykey.pem
file yang dihasilkan .akan mengekstrak kunci publik dan mencetaknya. Berikut ini tautan ke halaman yang menjelaskan hal ini dengan lebih baik.
EDIT: Periksa bagian contoh di sini . Untuk hanya menampilkan bagian publik dari kunci pribadi:
Untuk mendapatkan kunci publik yang dapat digunakan untuk keperluan SSH, gunakan ssh-keygen :
sumber
e
dand
dalam literatur umum). Tidak satu pun secara matematis pribadi atau publik, itu adalah label yang secara sewenang-wenang ditetapkan pada saat penciptaan. Mereka bisa dengan mudah ditugaskan secara terbalik. Menghasilkan satu dari yang lain adalah masalah yang setara. The.pem
Format berisi sejumlah besar informasi, termasuk kedua eksponen, dan kedua tombol, kan?openssl genrsa
perintah. File kunci publik yang terpisah tidak dibuat pada langkah yang sama. Untuk mengekstrak kunci publik dari file kunci pribadi ke file kunci publik yang terpisah, Anda menggunakanopenssl rsa -in private.pem -pubout -out public.pem
perintah Anda . Ketika Anda menghasilkan kunci publik dengan cara ini, itu diekstraksi dari file kunci pribadi, tidak dihitung. Lihat jawaban saya di bawah ini untuk lebih jelasnya.Orang yang mencari kunci publik SSH ...
Jika Anda ingin mengekstrak kunci publik untuk digunakan dengan OpenSSH, Anda perlu mendapatkan kunci publik sedikit berbeda
Format kunci publik ini kompatibel dengan OpenSSH. Tambahkan kunci publik untuk
remote:~/.ssh/authorized_keys
dan Anda akan baik untuk pergidokumen dari
SSH-KEYGEN(1)
sumber
openssl rsa -in key.pem -pubout -out pubkey.pem
tidak diterima karena ternyata hasilnya adalah kunci publik format pem. Jadi saya mendapatkan kesalahan ini: "Kunci tidak valid. Ini harus dimulai dengan 'ssh-rsa' atau 'ssh-dss'. Periksa apakah Anda menyalin bagian publik dari kunci". Namunssh-keygen -y [-f input_keyfile]
menghasilkan format yang benar yang diambil Github.Dalam sebagian besar perangkat lunak yang menghasilkan kunci privat RSA, termasuk openssl, kunci privat direpresentasikan sebagai objek RSAPrivatekey PKCS # 1 atau beberapa varian daripadanya:
Seperti yang Anda lihat, format ini memiliki sejumlah bidang termasuk modulus dan eksponen publik dan dengan demikian merupakan superset ketat dari informasi dalam kunci publik RSA .
sumber
Jawaban saya di bawah ini agak panjang, tapi mudah-mudahan ini memberikan beberapa detail yang hilang dalam jawaban sebelumnya. Saya akan mulai dengan beberapa pernyataan terkait dan akhirnya menjawab pertanyaan awal.
Untuk mengenkripsi sesuatu menggunakan algoritma RSA Anda memerlukan modulus dan enkripsi (publik) pasangan eksponen (n, e). Itu kunci publik Anda. Untuk mendekripsi sesuatu menggunakan algoritma RSA Anda memerlukan pasangan eksponen modulus dan dekripsi (pribadi) (n, d). Itu kunci pribadi Anda.
Untuk mengenkripsi sesuatu menggunakan kunci publik RSA, Anda memperlakukan plaintext Anda sebagai angka dan menaikkannya menjadi kekuatan modul:
Untuk mendekripsi sesuatu menggunakan kunci privat RSA, Anda memperlakukan ciphertext Anda sebagai angka dan menaikkannya dengan kekuatan modulus:
Untuk menghasilkan kunci pribadi (d, n) menggunakan openssl Anda dapat menggunakan perintah berikut:
Untuk menghasilkan kunci publik (e, n) dari kunci pribadi menggunakan openssl Anda dapat menggunakan perintah berikut:
Untuk membedah konten kunci RSA private.pem pribadi yang dihasilkan oleh perintah openssl di atas, jalankan perintah berikut (output terpotong ke label di sini):
Bukankah kunci pribadi hanya terdiri dari (n, d) pasangan? Mengapa ada 6 komponen tambahan? Ini berisi e (eksponen publik) sehingga kunci RSA publik dapat dihasilkan / diekstraksi / berasal dari kunci RSA pribadi private.pem. Sisanya 5 komponen ada untuk mempercepat proses dekripsi. Ternyata dengan melakukan pra-komputasi dan menyimpan 5 nilai tersebut, dimungkinkan untuk mempercepat dekripsi RSA dengan faktor 4. Dekripsi akan bekerja tanpa 5 komponen itu, tetapi dapat dilakukan lebih cepat jika Anda memilikinya. Algoritma percepatan didasarkan pada Teorema Sisa Cina .
Ya, private.pem Kunci privat RSA sebenarnya berisi ke-8 nilai tersebut; tidak satu pun dari mereka dihasilkan dengan cepat ketika Anda menjalankan perintah sebelumnya. Coba jalankan perintah berikut dan bandingkan output:
Struktur kunci pribadi RSA ini direkomendasikan oleh PKCS # 1 v1.5 sebagai representasi alternatif ( kedua ). Standar PKCS # 1 v2.0 mengecualikan eksponen e dan d dari representasi alternatif secara keseluruhan. PKCS # 1 v2.1 dan v2.2 mengusulkan perubahan lebih lanjut pada representasi alternatif, dengan secara opsional memasukkan lebih banyak komponen yang terkait dengan CRT.
Untuk melihat konten kunci RSA publik.pem publik jalankan yang berikut (output terpotong ke label di sini):
Tidak ada kejutan di sini. Itu hanya (n, e) pasangan, seperti yang dijanjikan.
Sekarang akhirnya menjawab pertanyaan awal: Seperti yang ditunjukkan di atas kunci RSA pribadi yang dihasilkan menggunakan openssl berisi komponen kunci publik dan pribadi dan beberapa lagi. Ketika Anda membuat / mengekstrak / mendapatkan kunci publik dari kunci privat, membuka salinan dua komponen tersebut (e, n) ke file terpisah yang menjadi kunci publik Anda.
sumber
e
selalu 655370x010001
. Ini mungkin defacto untuk memilih eksponen publik dan ini mungkin mengapa di halaman manual, dan hampir setiap tempatgenrsa
dijelaskan sebagaito generate the private key
. Yang umum agak jelas.Kunci Publik tidak disimpan dalam file PEM seperti yang dipikirkan sebagian orang. Struktur DER berikut ada pada File Kunci Pribadi:
Jadi ada cukup data untuk menghitung Kunci Publik (modulus dan eksponen publik), yang memang
openssl rsa -in mykey.pem -pubout
berfungsisumber
di sini dalam kode ini pertama kita membuat kunci RSA yang bersifat pribadi tetapi memiliki sepasang kunci publik juga jadi untuk mendapatkan kunci publik Anda yang sebenarnya, kami cukup melakukan ini
harap Anda mendapatkannya untuk info lebih lanjut, periksa ini
sumber
Pertama rekap cepat pada generasi kunci RSA.
Kunci publik terdiri dari modulus dan eksponen publik.
Kunci pribadi minimal akan terdiri dari modulus dan eksponen pribadi. Tidak ada cara pasti yang layak secara komputasi untuk beralih dari modulus yang diketahui dan eksponen swasta ke eksponen publik yang sesuai.
Namun:
Jadi dalam sebagian besar implementasi RSA praktis Anda bisa mendapatkan kunci publik dari kunci pribadi. Mungkin untuk membangun cryptosystem berbasis RSA di mana ini tidak mungkin, tetapi itu bukan hal yang dilakukan.
sumber
sumber