Kunci SSH: mengapa id_rsa lebih besar dari id_rsa.pub?

8

Kunci pribadi saya ( ~/.ssh/id_rsa) adalah file 1766-byte, tetapi kunci publik saya ( ~/.ssh/id_rsa.pub) panjangnya hanya 396 byte. Mengapa perbedaannya sangat besar? Apakah itu karena kunci pribadi dienkripsi menggunakan AES? Bukankah ciphertext AES biasanya sekitar panjang yang sama dengan plaintext?

splicer
sumber

Jawaban:

17

Kunci pribadi Anda memiliki lebih banyak informasi daripada kunci publik Anda. Sedangkan kunci publik hanya menyampaikan eksponen enkripsi (e) dan modulus (n), kunci pribadi juga mencakup eksponen dekripsi (d) dan dua faktor utama (p dan q) dari modulus. Kunci pribadi pada dasarnya memiliki kunci publik di dalamnya.

[Enkripsi: ciphertext = pesan ^ e (mod n); Dekripsi: message = ciphertext ^ d (mod n)]

Untuk melihat semua data dalam file kunci pribadi Anda:

$ openssl rsa -in id_rsa -text -noout

Sunting: File kunci pribadi tampaknya tidak memiliki eksponen enkripsi, tetapi memiliki eksponen d_1 dan d_2, di mana d_1 = d (mod p-1) dan d_2 = d (mod q-1). Ini digunakan untuk mempercepat dekripsi - Anda dapat membagi eksponensial dekripsi Anda menjadi panggilan eksponensial paralel yang lebih kecil, yang akhirnya lebih cepat dari satu m besar = c ^ d (mod n) untuk d besar dan n besar.

pengguna75636
sumber
2

Sayangnya Anda tidak menentukan format kunci yang disimpan. Saya kira Anda mengacu pada penyandian kunci OpenSSH. Dalam format ini kunci disimpan dalam blok data yang dikodekan base64. Bergantung pada pengkodean saat mengenkripsi biasanya ada semacam padding yang terlibat saat mengenkripsi data. Jadi data yang dihasilkan adalah kelipatan dari ukuran blok enkripsi.

Kunci OpenSSH juga dapat menyertakan semacam komentar dan properti tambahan yang disisipkan di antara penanda ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----dan -----END RSA [PUBLIC|PRIVATE] KEY-----. Lihat RFC4716 .

Selain itu untuk kunci publik, modulus dan eksponen publik disimpan sementara untuk kunci pribadi eksponen pribadi disimpan. Lihat pembuatan kunci RSA di Wikipedia untuk perincian tentang dasar matematika. Ada banyak tempat di web yang menggambarkan koneksi matematika antara tombol-tombol ini. Tidak yakin apakah Anda memerlukan salinan penjelasan ini di sini.

Secara teoritis dimungkinkan untuk menghitung kunci pribadi dari informasi kunci publik tetapi melakukan ini secara matematis jauh lebih sulit daripada sebaliknya. Anggap saja kunci pribadi sebagai "sumber" yang mencakup semua variabel dan kunci publik sebagai hasil dari perhitungan. Sangat mudah untuk melakukan perhitungan berulang-ulang jika Anda mengetahui semua variabel tetapi mengetahui hasilnya sulit untuk mendapatkan semua variabel sumber. Ini juga alasan mengapa cukup bagi Anda untuk menyimpan kunci pribadi di tempat yang aman. Anda selalu dapat menggunakan kunci pribadi untuk menghitung ulang kunci publik. Tetapi tidak sebaliknya - baik, secara teoritis Anda bisa melakukan ini tetapi tergantung pada panjang kunci ini mungkin memakan waktu bertahun-tahun;).

SkyBeam
sumber
Menghitung kunci pribadi dari kunci publik membutuhkan factorisation cepat dan efisien - kekurangan yang menjadi dasar keamanan enkripsi kunci publik (setidaknya RSA).
Andrew
Ini benar. Temukan algoritma faktorisasi cepat dan pada dasarnya Anda merusak keamanan enkripsi RSA. Atau orang bisa pergi untuk ECC (Elliptic Curve Cryptography) yang didasarkan pada konsep kesulitan berjalan logaritma diskrit. Namun jika seseorang menemukan solusi yang efisien untuk masalah ini ...
SkyBeam