Bagaimana cara mengimpor kunci RSA SSH ke GPG sebagai kunci pribadi _primary_?

16

Saat ini saya memiliki kunci SSH yang telah saya gunakan untuk sementara waktu dan saya ingin mulai menggunakan GnuPG dengan keyring baru. Namun, mengingat bahwa saya telah menggunakan kunci saya selama berabad-abad, saya ingin tetap menggunakan kunci itu di GPG sebagai kunci utama / utama. Saya sudah mencoba mengimpor kunci melalui instruksi ini .

Tapi, saya berakhir dengan apa yang dianggap sebagai "subkey". Selain itu, jika saya mencoba mengimpornya tanpa membuat kunci GPG standar, GPG bahkan tidak melihat subkunci ini. (Saya berasumsi bahwa subkunci harus ditandatangani oleh kunci utama terlebih dahulu.)

Bagaimana cara menggunakan kunci ini sebagai kunci utama dalam secring.gpg?

Brendan Byrd
sumber
Dalam arti apa maksud Anda " _primary_ private key "?
MadHatter

Jawaban:

16

Jawaban sederhananya adalah: Anda tidak.

Kunci SSH dan kunci GnuPG (sebenarnya, OpenPGP) sama sekali berbeda, meskipun kedua protokol dapat menggunakan pasangan kunci RSA.

Dan selain itu, mengapa Anda ingin melakukannya? Bahkan jika Anda menggunakan bahan kunci yang sama untuk membuat kunci PGP Anda, Anda masih perlu mendistribusikan kunci Anda sebagai kunci PGP. Anda mungkin belum mendistribusikan kunci publik SSH Anda kepada orang-orang yang berkorespondensi dengan Anda, jadi dari sudut pandang distribusi kunci tidak ada perbedaan: mereka perlu menerima kunci publik dari Anda. Dan bahkan jika Anda telah mendistribusikan kunci publik SSH Anda kepada orang lain, mereka perlu mengambil beberapa langkah tambahan untuk dapat mengimpornya ke dalam implementasi OpenPGP mereka, yang mungkin atau mungkin tidak mudah.

Seperti yang ditunjukkan kasperd dengan cukup tepat, hanya ada satu cara untuk menafsirkan (khususnya) tanda tangan. Jika Anda menggunakan kunci yang sama untuk PGP dan SSH, jika seseorang dapat menipu Anda untuk menandatangani pesan yang dibuat khusus (yang merupakan kemampuan yang diasumsikan dalam serangan sistem tanda tangan tertentu) dalam satu, maka bahkan jika kedua sistem aman dalam isolasi itu mungkin dimungkinkan untuk menyusun pesan semacam itu dengan cara yang memiliki satu makna di salah satu sistem, tetapi makna yang berbeda di yang lain. Itu, dengan sendirinya, akan menjadi kerentanan. (Dapat dieksploitasi? Siapa yang tahu. Tapi mengapa mengambil risiko?)

Pasangan kunci PGP dan SSH adalah kunci jangka panjang, yang digunakan untuk mengamankan kunci simetris sesaat (pesan dan sesi), serta memverifikasi keaslian pesta jarak jauh. Itu membuat kunci pribadi PGP atau SSH target nilai yang jauh lebih tinggi untuk seorang penyerang daripada kunci simetris yang sesuai. Jika Anda menggunakan bahan kunci yang sama untuk keduanya, dan penyerang dapat menyadari hal itu, itu hanya meningkatkan nilai serangan yang berhasil pada pasangan kunci tersebut.

Tanpa melihat kedua protokol secara terperinci, saya membayangkan bahwa mengenali bahwa materi kunci yang sama sedang digunakan di kedua kemungkinan akan cukup sepele, karena kunci publik pada dasarnya ditransmisikan secara jelas.

Cukup buat kunci PGP baru. Jika Anda mau, buatlah RSA dan dengan panjang yang sama dengan kunci SSH Anda. (Tidak ada orang waras yang akan melihatnya lebih dekat daripada memverifikasi sidik jari.) Kemudian, bagikan kunci publik kepada orang yang ingin Anda korespondensi, sebagai kunci PGP. Ini akan jauh lebih mudah untuk semua orang, dan kemungkinan besar lebih aman, dengan biaya sejumlah kecil entropi dari kumpulan entropi acak sistem Anda yang harus dengan cepat diisi kembali.


Jika Anda memiliki beberapa kunci pada kunci rahasia Anda dan ingin menentukan yang mana yang harus digunakan secara default, gunakan default-keydan mungkin default-recipient{,-self}arahan dalam ~ / .gnupg / gnupg.conf Anda.

sebuah CVn
sumber
1
Saya setuju dengan jawaban ini. Namun ada satu alasan lagi untuk tidak menggunakan bahan kunci yang sama. Demi alasan keamanan, hanya ada satu cara untuk menafsirkan tanda tangan. Mungkinkah tanda tangan yang sama ditafsirkan dalam dua cara yang berbeda, itu akan menjadi kerentanan. Sekalipun ssh dan gpg aman sendiri, musuh mungkin menipu Anda untuk menandatangani pesan dengan satu dan kemudian mengambil tanda tangan ke program lain, di mana itu bisa memiliki arti yang berbeda.
kasperd
@kasperd Poin bagus. Saya mengubah jawabannya; bagaimana perasaanmu sekarang?
CVn
Kedengarannya bagus.
kasperd
1
Saya pikir jawaban ini tidak sepenuhnya akurat: dengan monkeysphere ada usecase di mana Anda mungkin ingin kunci OpenSSH yang ada sebagai subkunci hanya otentikasi dalam kunci OpenPGP pribadi Anda. Setidaknya saya ingin menggunakannya seperti itu.
user134450
Kunci-kunci ini tidak berbeda sama sekali; metadata mereka adalah.
foo
5

Anda dapat mengonversi Kunci-SSH ke kunci OpenPGP dengan alat pem2openpgpdari proyek monkeysphere . Kunci ini kemudian dapat diimpor oleh gnupg sebagai pasangan kunci privat / publik biasa. Seperti jawaban lain menyebutkan ini biasanya bukan ide yang baik karena ssh tidak memiliki konsep sertifikat, jadi Anda secara efektif menambahkan kemampuan ke kunci yang ada yang tidak mungkin dimiliki sebelumnya. Ini umumnya dilarang dalam kriptografi.

Saya tetap melakukannya dengan salah satu kunci ssh saya tetapi saya menambahkan pasangan kunci ke kunci OpenPGP saya yang lain sebagai subkunci yang hanya memiliki satu flag kemampuan: otentikasi. Bendera ini dimaksudkan untuk situasi seperti ini, di mana Anda tidak ingin menandatangani atau mengenkripsi apa pun dengan pasangan kunci (artinya --encryptdan --signopsi untuk gnupg) tetapi Anda ingin memilikinya di kotak kunci Anda untuk otentikasi dengan OpenSSH dan agen gnupg.

Untuk lebih jelasnya lihat dokumentasi monkeysphere.

pengguna134450
sumber
2

Mungkin ada alasan bagus untuk mengonversi kunci format PKCS biasa untuk impor menjadi gpg.

Misalnya, jika Anda ingin memasukkannya ke kartu pintar. Fasilitas yang disediakan gpg dengan kartu-info dan perintah edit kartu sangat membantu untuk tujuan ini, jadi mengapa tidak menggunakannya sebagai alat? Satu-satunya rintangan yang perlu diatasi adalah ... tepatnya: mengimpor kunci dari format standar PKCS # 8 (atau format "mentah" RSA PKCS # 1) ke penyimpanan kunci gpg untuk diproses lebih lanjut.

Jadi - perhatikan keberatan saya atas jawaban yang disetujui! :)

Jawaban yang sebenarnya membantu untuk pertanyaan semacam ini ditemukan di sini: /unix/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg

foo
sumber
1

Gunakan ini di Ubuntu 16.04 atau Windows WSL.

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <[email protected]>" > key.pgp

Kartu impor. Dapat dilakukan di Windows atau Linux.

gpg --import key.gpg

Pindah ke kartu

Temukan pengenal tanda tangan utama.

gpg --list-key

Pindahkan kunci otentikasi ke kartu

gpg --edit-key FFFFFFFFFFF
keytocard

Pilih nomor untuk slot otentikasi.

Anda selesai di sini.

Ingatlah untuk menghapus kunci dari gantungan kunci gpg jika Anda menggunakan kartu. Gunakan pengidentifikasi kunci dari atas.

gpg --delete-secret-key FFFFFFFFFFF

Lain-lain

Tidak diperlukan tetapi mungkin berguna untuk mendapatkan kunci dalam format pgp berbasis teks.

gpg -a --export FFFFFF > key.asc
Api
sumber