Bagaimana cara mengelola kunci GPG di berbagai sistem?

103

Saya baru menggunakan GnuPG dan mencoba memahami cara terbaik untuk menggunakannya. Saya telah mengulas penjelasan singkat, mudah dimengerti tentang GPG / PGP untuk orang-orang non-teknis? , tetapi sebagian besar panduan menjelaskan PGP dengan perspektif mesin tunggal.

Saya ingin menggunakan GnuPG pada tiga perangkat komputasi: PC Linux, laptop Linux, dan ponsel Android.

Kasing penggunaan mendasar adalah mengenkripsi / mendekripsi email yang dikelola oleh layanan IMAP, sehingga semua perangkat memerlukan kunci pribadi yang sama untuk dekripsi.

Saya pikir pilihan saya adalah:

  1. Cukup salin semua kunci saya ke keyring pada setiap perangkat dan terutama bergantung pada kata sandi kunci pribadi untuk perlindungan.

  2. Buat kunci master (dengan --gen-key) untuk mewakili identitas saya, lalu buat kunci sekali pakai terpisah (lagi dengan --gen-key) untuk mengenkripsi / mendekripsi email dan menandatangani dengan kunci master. Yang pertama hanya berada di PC saya, yang terakhir didistribusikan ke setiap perangkat. Selama perangkat seluler saya tidak terganggu, maka kunci sekali pakai tetap valid.

Saya mungkin terlalu paranoid dan membuat ini lebih rumit dari yang seharusnya, tapi tolong saya. Saya percaya tidak menaruh semua telur Anda dalam satu keranjang.

Kunci master seharusnya menjadi identitas digital saya. Banyak usaha akan dihabiskan untuk membangun kepercayaan di sekitar identitas itu, dan saya lebih suka menderita ketidaknyamanan paranoia saya daripada kehilangan kunci saya dari kecerobohan dan harus membangun kepercayaan di sekitar kunci master baru (mungkin ini tidak seburuk yang saya berpikir, tapi saya baru dalam hal ini) .

Saya lebih cenderung kehilangan laptop atau ponsel saya daripada PC saya. Jika kehilangan == kompromi, maka saya lebih suka kehilangan pasangan kunci sekali pakai (yang dapat saya batalkan) daripada pasangan kunci utama saya. Saya selalu bisa memberikan kepercayaan kunci master saya pada kunci sekali pakai baru.

Maaf untuk pertanyaan yang sangat panjang. :-)

TL; DR

Apakah kata sandi perlindungan yang cukup untuk menyimpan kunci pribadi master saya di beberapa perangkat?

Apakah rencana saya untuk opsi # 2 layak? Apakah saya mendapatkan sesuatu yang salah atau dapatkah itu diperbaiki?

Jika opsi # 2 adalah ide yang buruk, lalu apa praktik terbaik saat menggunakan GnuPG untuk satu pengguna di beberapa perangkat?

Justin C
sumber

Jawaban:

59

Yah, ini agak memalukan. Saya telah menghabiskan waktu berjam-jam selama seminggu untuk mencari tahu masalah ini, dan jawabannya tampaknya terletak pada subkunci - sebuah topik yang dibahas secara manual oleh GnuPG dan FAQ.

Sambil meneliti apa itu subkunci dan mengapa mereka bisa digunakan sebagai ganti --gen-key, saya menemukan permata ini: http://wiki.debian.org/subkeys .

Wiki Debian menjelaskan cara mengimplementasikan opsi # 2 (lihat OP) menggunakan kunci utama dengan subkunci, dan selanjutnya menjelaskan cara menghapus kunci utama dari sistem apa pun setelah menyimpannya pada media cadangan (mis. Flash drive). Subkunci kemudian dapat didistribusikan di antara keyrings saya di setiap perangkat.

Pro:

  1. Tidak bergantung terutama pada kata sandi untuk melindungi kunci utama,

  2. Jika ada sistem yang dikompromikan, kunci master tidak segera tersedia (kecuali saya dengan bodohnya membiarkan flash drive saya terhubung, atau melampirkan drive tersebut ke sistem yang dikompromikan),

  3. Ini adalah praktik yang diterapkan oleh tim pengembangan Debian.

  4. Menggunakan fitur subkey dari GnuPG. Yang tampaknya sedikit lebih terorganisir daripada memiliki banyak kunci longgar pada keyring Anda, ya?

Bagian yang relevan dari Debian Subkey Wiki

  1. Buat cadangan file GnuPG Anda yang ada ($ HOME / .gnupg). Menjaga mereka tetap aman. Jika terjadi kesalahan pada langkah-langkah berikut, Anda mungkin perlu ini untuk kembali ke tempat yang dikenal baik. (catatan: umask 077 akan menghasilkan izin terbatas untuk cadangan.)

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
  2. Buat subkunci baru untuk ditandatangani.

    • Temukan ID kunci Anda: gpg --list-keys yourname
    • gpg --edit-key YOURMASTERKEYID
    • Saat gpg>diminta:addkey
    • Ini meminta frasa sandi Anda, ketik.
    • Pilih jenis kunci "RSA (tanda saja)".
    • Akan lebih bijaksana untuk memilih 4096 (atau 2048) ukuran kunci bit.
    • Pilih tanggal kedaluwarsa (Anda dapat memutar subkunci Anda lebih sering daripada kunci utama, atau menyimpannya selama masa pakai kunci utama, tanpa kedaluwarsa).
    • GnuPG akan (pada akhirnya) membuat kunci, tetapi Anda mungkin harus menunggu untuk mendapatkan cukup entropi untuk melakukannya.
    • Simpan kuncinya: save
  3. Anda dapat mengulanginya, dan membuat sub kunci "RSA (hanya enkripsi)", jika Anda mau.

  4. Sekarang salin $HOME/.gnupgke drive USB Anda.

  5. Inilah bagian yang sulit. Anda harus menghapus kunci master pribadi, dan sayangnya GnuPG tidak menyediakan cara yang nyaman untuk melakukan itu. Kita perlu mengekspor subkey, menghapus kunci privat, dan mengimpor subkey kembali.

    • Ekspor subkunci: gpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys(untuk memilih subkunci untuk mengekspor, menentukan ID subkey masing-masing diikuti dengan tanda seru: gpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..])
    • Hapus kunci rahasia utama Anda: gpg --delete-secret-key YOURMASTERKEYID
    • Impor kembali subkunci: gpg --import secret-subkeys
    • Verifikasi yang gpg -Kmenunjukkan sec#bukan hanya secuntuk kunci pribadi Anda. Itu berarti kunci rahasia tidak benar-benar ada. (Lihat juga keberadaan paket OpenPGP dummy di output of gpg --export-secret-key YOURMASTERKEYID | gpg --list-packets).
    • Opsional, mengubah kata sandi melindungi subkunci: gpg --edit-key YOURMASTERKEYID passwd. (Perhatikan bahwa materi kunci pribadi pada cadangan, termasuk kunci master pribadi, akan tetap dilindungi oleh frasa sandi lama.)

Komputer Anda sekarang siap untuk penggunaan normal.

Saat Anda perlu menggunakan kunci utama, pasang drive USB terenkripsi, dan setel variabel lingkungan GNUPGHOME:

export GNUPGHOME=/media/something
gpg -K

atau gunakan --home argumen baris perintah:

gpg --home=/media/something -K

Perintah yang terakhir sekarang harus daftar kunci pribadi Anda dengan secdan tidak sec#.

Beberapa Subkey per Mesin vs. Satu Subkey Tunggal untuk Semua Mesin

Kutipan dari wiki subkey Debian. Awalnya dicatat dalam komentar. [Mengutip] dan menekankan milikku.

Seseorang mungkin tergoda untuk memiliki satu subkey per mesin sehingga Anda hanya perlu menukar subkey yang berpotensi dikompromikan dari mesin itu. Dalam kasus subkey tunggal yang digunakan pada semua mesin, perlu dipertukarkan pada semua mesin [ketika subkey tunggal itu atau diduga dikompromikan].

Tapi ini hanya berfungsi untuk menandatangani subkunci . Jika Anda memiliki beberapa subkunci enkripsi, gpg dikatakan mengenkripsi hanya untuk subkunci enkripsi terbaru dan tidak untuk semua subkunci enkripsi yang dikenal dan tidak dicabut.

Justin C
sumber
5
T&J yang bagus, tapi AFAIK masih ada satu masalah dengan pengaturan ini ... Ini bagus untuk penandatanganan, tetapi tidak untuk enkripsi jika Anda tidak ingin berbagi kunci enk yang sama antara perangkat Anda yang berbeda, karena ketika seseorang membuat Anda penerima penerima yang dienkripsi pesan, gunakan gpg secara default kunci enc terbaru yang tidak dicabut yang dihasilkan. Tidak mungkin memaksa pengirim untuk menggunakan subkunci enk tertentu tergantung pada UID (rumah atau kantor, dll).
KurzedMetal
2
Mungkin ini masalah. Kekhawatiran terbesar saya adalah kehilangan jaringan kepercayaan yang saya bangun di sekitar kunci utama saya (yang hanya bertanda). Tentu saja subkunci enkripsi harus ada di semua perangkat yang saya gunakan untuk membaca pesan terenkripsi. Jika kunci enkripsi saya pernah dikompromikan, maka proses pemulihan hanya melibatkan diri saya sendiri; sebagai lawan kehilangan kunci penandatanganan master saya dan harus meminta / meyakinkan web kepercayaan saya untuk menandatangani kunci baru. Saya tidak bermaksud memindahkan subkunci enkripsi di brankas saya.
Justin C
9

Sebagai seseorang yang juga tidak suka satu titik kegagalan (termasuk kunci utama dan terutama kata sandi), ini adalah cara saya akan melakukannya. Hal ini memungkinkan perangkat untuk beroperasi melalui web kepercayaan, sambil tetap memungkinkan identitas terdesentralisasi.

Saya tidak tahu apakah sudah ada sistem yang sudah ada untuk ini, tapi saya pikir itu mungkin bisa scrobbled bersama dengan cron job dan beberapa baris Bash.

Dalam sistem ini, Anda memiliki dua kelas keypair: keypair perangkat dan keypairs kerangka waktu . Satu keypair perangkat dihasilkan untuk pengguna di setiap perangkat, dan tetap pada perangkat itu untuk seumur hidup. Sebuah keypair jangka waktu yang dihasilkan oleh server pusat pada interval rutin (bulanan, harian, jam - tergantung pada seberapa paranoid Anda ingin menjadi). Kunci publik diumumkan secara publik (server itu sendiri memiliki perangkat keypair untuk menandatangani dengan), dan kunci pribadi didistribusikan dienkripsi dengan kunci publik dari setiap perangkat yang dimaksudkan untuk memiliki akses ke kunci ini. (Distribusi ini harus bersifat pribadi mungkin, mis. Memiliki perangkat yang terhubung ke server secara langsung.)

Untuk menandatangani pesan, Anda akan menggunakan kunci perangkat dari perangkat apa pun yang Anda kirimi pesan. Jika seseorang ingin mengirimi Anda pesan, mereka dapat menandatanganinya dengan kunci waktu publik Anda saat ini. (Mereka harus memiliki sistem otomatis untuk mengikuti pengumuman.) Anda kemudian dapat membaca pesan mereka dari perangkat apa pun.

Untuk membaca pesan terenkripsi yang lebih lama, keypairs kerangka waktu yang lebih lama dicadangkan di setiap perangkat sesuai dengan strategi yang sesuai (termasuk server penghasil jangka waktu-keypair, jika Anda menginginkannya - lagi, tergantung pada tingkat paranoia Anda), di mana Anda memiliki perangkat lain dari keypairs yang dilindungi kata sandi yang melindungi kunci lama (dengan banyak kata sandi dari waktu ke waktu karena Anda merasa nyaman mengingat).

Jika suatu perangkat dicuri atau dikompromikan, Anda dapat menggunakan salah satu dari perangkat Anda yang dipercayai publik untuk membuat pesan yang ditandatangani secara publik untuk memverifikasi identitas Anda (dengan cara apa pun, misalnya mencatat bahwa Anda akan menghadiri pertemuan umum dan / atau memiliki teman tepercaya memverifikasi Anda secara langsung) dan mencabut kunci perangkat yang disusupi dan kunci waktu apa pun yang dapat diaksesnya. Saat mencabut kunci, Anda juga menghapus perangkat yang dicuri dari daftar perangkat tepercaya server (dengan kata sandi dan kunci perangkat tepercaya Anda).

Kebijakan untuk mempercayai kunci perangkat yang baru diumumkan harus mengikuti sesuatu seperti kebijakan kepercayaan saat ini - Saya percaya kebijakan yang tepat adalah mempercayai server penghasil, perangkat seluler, dan perangkat besar dan berat, karena sulit untuk mencuri / menyusup ke dalam telepon pengguna, PC desktop, dan VPS dalam pencurian terpadu sebelum pemberitahuan pengguna.

Jika server Anda dikompromikan, Anda hanya mencabutnya dengan prosedur yang sama dengan yang dijelaskan untuk perangkat lain yang dikompromikan (mungkin dengan kebijakan yang lebih kuat mirip dengan yang menambahkan perangkat baru), dan menggunakan server yang diamankan ulang atau sama sekali baru (dengan keypair perangkat baru) maju.

Stuart P. Bentley
sumber
Bagian pencabutan sedikit berawan seperti yang tertulis - pencabutan perangkat harus dimungkinkan dengan pengumuman dari perangkat lain (agar tidak gagal jika seseorang mencuri laptop Anda dan telepon Anda tidak dapat menghubungi server secara langsung), tetapi tidak mungkin untuk dilakukan oleh pencuri (jadi perangkat harus memiliki kunci yang dilindungi kata sandi untuk pencabutan). Dalam hal terjadi laporan yang bertentangan, semua kunci harus sementara tidak dipercaya sampai verifikasi manual oleh pihak ketiga dapat dilakukan.
Stuart P. Bentley
Bahkan, mungkin disarankan untuk memiliki mekanisme lain untuk mencabut kunci, menggunakan kata sandi publik yang kuat yang diperbarui secara manual (diganti) secara berkala- dengan cara ini, Anda dapat mencabut kunci tanpa tergantung pada perangkat apa pun (misalkan Anda hanya dengan ponsel Anda dan seseorang mencurinya), selama Anda merahasiakan kata sandinya.
Stuart P. Bentley