Bagaimana, jika sama sekali, perbedaan kunci SSH dari kunci asimetris yang digunakan untuk tujuan lain?

13

Bagaimana, jika sama sekali, perbedaan kunci SSH dari kunci asimetris yang digunakan untuk tujuan lain, misalnya penandatanganan email?

Saya diminta untuk menanyakan hal ini, sebagian, karena pada OS X, ada aplikasi yang tersedia untuk mengelola kunci SSH (ssh-agent, SSHKeychain, dll) serta aplikasi yang dirancang untuk mengelola kunci GPG (Akses Keychain GPG, dll.), dan tampaknya tidak pernah bertemu yang kedua. Namun, saya tidak percaya ini adalah masalah khusus OS X.

Apakah pemisahan kekhawatiran ini karena kuncinya berbeda jenisnya, atau karena disimpan di tempat yang berbeda, atau apakah karena alasan lain atau kombinasi alasan, misalnya alasan historis?

sampablokuper
sumber

Jawaban:

14
  • Kunci SSH hanyalah pasangan kunci asimetris RSA, DSA, atau ECDSA biasa. Keypair semacam itu yang dihasilkan oleh OpenSSH sudah dapat digunakan oleh OpenSSL dan sebagian besar program lainnya.

    ( .pubKeluaran file oleh ssh-keygenadalah dalam format spesifik OpenSSH, tetapi itu tidak relevan karena file "pribadi" sudah mengandung kunci privat dan publik.)

    Perangkat lunak SSH lain mungkin memiliki format penyimpanan sendiri, seperti RFC 4716 atau Putty's PPK , tetapi mereka menyimpan informasi RSA / DSA / ECDSA yang sama.

  • X.509 (digunakan oleh SSL, S / MIME) sedikit lebih rumit: kunci "pribadi" masih sama, tetapi alih-alih file kunci publik yang kosong Anda memiliki "sertifikat" - struktur ASN.1 yang berisi kunci publik, subjek dan nama penerbit, tanggal validitas. Dalam sertifikat X.509 v3, ekstensi seperti "penggunaan kunci" dan "nama subjek alternatif" akan hadir. Seluruh sertifikat ditandatangani oleh kunci penerbit (atau ditandatangani sendiri jika tidak ada penerbit terpisah).

    Anda dapat dengan mudah menggunakan file "kunci pribadi" X.509 untuk SSH - OpenSSH bahkan menggunakan format yang sama.

    Anda dapat membuat sertifikat X.509 dari keypair sederhana dan kemudian menandatanganinya sendiri, atau Anda dapat membuat "permintaan sertifikat" dan mengirimkannya untuk ditandatangani oleh CA (otoritas sertifikasi).

    Untuk menampilkan informasi dalam sertifikat X.509, gunakan:

    certtool -i < foo.pem
    certtool -i --inder < foo.crt
    
    openssl x509 -noout -text < foo.pem
    openssl x509 -noout -text -inform der < foo.crt
    

    ( certtooladalah bagian dari GnuTLS.)

  • Kunci OpenPGP (digunakan oleh GPG) adalah yang paling rumit. Apa yang Anda sebut "kunci PGP" atau "kunci PGP" adalah struktur kompleks yang disebut "sertifikat OpenPGP", yang mengandung:

    • satu "kunci utama" - pasangan kunci asimetris, biasanya digunakan untuk penandatanganan
    • satu atau lebih "ID pengguna" - label teks, biasanya dalam bentuk "Nama <email @ alamat>"
      • setidaknya satu dari mereka ditandai sebagai "ID pengguna utama"
      • untuk setiap ID pengguna, "tanda tangan sendiri" - tanda tangan dengan kunci utama Anda sendiri
      • untuk setiap ID pengguna, nol atau lebih "tanda tangan" oleh pengguna lain
      • paket tanda tangan sendiri juga mengandung algoritme pilihan Anda (SHA-1, AES, dll.)
    • satu atau lebih "subkunci" - pasangan kunci tambahan, yang pertama biasanya untuk enkripsi
      • untuk setiap subkunci, tanda tangan dengan kunci utama
    • nol atau lebih "ID foto" - lampiran JPEG atau PNG yang berisi wajah Anda
      • menandatangani dengan cara yang sama seperti ID pengguna
    • nol atau lebih sertifikat X.509

    Semua keypairs memiliki tanggal kedaluwarsa dan bit penggunaan: data masuk, kunci sertifikasi (tanda), enkripsi, otentikasi ke layanan. Kunci utama secara default memiliki bit "tanda" dan "sertifikasi" dan subkunci pertama adalah "mengenkripsi". Jika Anda menambahkan subkunci "otentikasi", Anda dapat menggunakannya gpg-agentuntuk otentikasi SSH.

    Untuk melihat isi sertifikat Anda:

    gpg --export [email protected] | gpg -vv
    
    gpg --export [email protected] | certtool --pgp-certificate-info
    

    ( certtooladalah bagian dari GnuTLS.)


Sertifikat X.509 dan kunci privasinya yang terkait tersedia dalam beberapa format:

  • DER adalah penyandian biner dari struktur ASN.1 sertifikat. File-file tersebut biasanya memiliki .crtatau .cerekstensi nama file ( .derkurang umum tetapi tidak terlihat).

  • File format "PEM" berisi data yang disandikan DER yang sama, tetapi juga disandikan menggunakan Base64 dan antara header "MULAI INI" dan "AKHIR ITU". Ekstensi nama file umum adalah .pem, meskipun keduanya .crtdan .cerkadang-kadang digunakan di sini juga (tetapi tidak pernah .der).

  • Untuk kunci pribadi milik sertifikat, format "PEM" biasanya digunakan - Base64 dikelilingi oleh tajuk "BEGIN PRIVATE KEY" (kunci dalam struktur PKCS # 7) atau "BEGIN RSA (atau DSA) PRIVATE KEY" (kunci kosong, OpenSSL format). Terkadang kunci ada di .keyfile terpisah , terkadang dibundel dengan sertifikat.

  • PKCS # 12 dan PFX yang sedikit lebih tua adalah wadah terenkripsi yang menyimpan sertifikat dan kunci privat (seringkali sertifikat penerbit juga). Format ini digunakan oleh sebagian besar perangkat lunak saat mengekspor atau "mencadangkan" sertifikat dengan kunci pribadi.

Situasi yang kurang membingungkan adalah di OpenPGP: semua data mengikuti format biner yang sama, dan secara opsional "berlapis baja" (disandikan dengan Radix64 dan di antara header mirip-PEM).

pengguna1686
sumber
2

Disimpan di tempat yang berbeda dan dalam format yang berbeda (format yang digunakan oleh PGP, GnuPG ssh,, dan beberapa format X.509 berbeda, antara lain, sangat berbeda). Hal ini dimungkinkan untuk transcode antara mereka sampai batas tertentu dengan mencampur dan mencocokkan pilihan yang tepat untuk ssh-keygen, pgp, gpg/ gpg2, openssl, dll .; tetapi secara umum itu tidak sepadan dengan usaha. Juga, format kunci yang berbeda mendukung jumlah informasi yang berbeda pulasshmembawa informasi tambahan paling sedikit dan X.509 format PEM dan DER paling banyak dijalankan. Selain itu, OSX Keychain hanya penyimpanan kunci / nilai terenkripsi, sehingga mekanisme yang berbeda umumnya diperlukan oleh setiap aplikasi untuk mengkonversi antara format kunci asli + format metadata dan sesuatu yang dapat disimpan dalam Keychain. (Masalah serupa juga berlaku pada dompet KDE dan gantungan kunci GNOME.)

geekosaurus
sumber
Penting untuk dicatat bahwa standar enkripsi yang mendasarinya juga berbeda. gpg sebagian besar menggunakan DSA, sedangkan SSH sebagian besar menggunakan RSA. Ada sejumlah standar standar asimetris, dan sebagian besar aplikasi mendukung banyak standar, tetapi standar yang 'normal' untuk berbagai aplikasi berbeda.
jcrawfordor