Bagaimana cara kerja agen GPG?

31

Saya memiliki baris dalam file gpg.conf saya yang mengatakan use-agent.
Saya mengerti ini merujuk ke gpg-agent yang merupakan daemon. Halaman manual menyatakan "gpg-agent adalah daemon untuk mengelola kunci rahasia (pribadi) secara independen dari protokol apa pun. Ini digunakan sebagai backend untuk gpg dan gpgsm serta untuk beberapa utilitas lain."

Adakah yang bisa menjelaskan apa artinya ini dalam konteks gpg? Apa gunanya agen gpg?

Saya memiliki GPG 1.4 saat ini.

  1. Bagaimana saya bisa tahu apakah agen sedang berjalan? Saya sebenarnya bahkan tidak jelas apakah gpg-agent diinstal dengan paket GPG 1.4 dasar.
  2. Bagaimana saya bisa memulainya, jika tidak berjalan?
  3. Bagaimana saya bisa menghentikannya, jika sedang berjalan?
Kode Saus
sumber

Jawaban:

38

Gpg-agent adalah program yang berjalan di latar belakang ( daemon ) dan menyimpan kunci rahasia GPG dalam memori. Ketika proses GPG membutuhkan kunci, ia menghubungi program gpg-agent yang sedang berjalan melalui soket dan meminta kunci. Jika proses agen memiliki kunci, itu memberikannya ke gpg. Jika tidak, ia mencoba memuat kunci terenkripsi dari keyring Anda, dan meminta Anda untuk frasa sandi kunci itu. Setelah agen telah mendapatkan kunci yang didekripsi, ia meneruskannya ke proses gpg. Selain kunci GPG, agen Gpg juga dapat menyimpan kunci SSH dan menyediakannya untuk proses SSH, seperti ssh-agentprogram yang dilengkapi dengan SSH.

Poin utama menggunakan agen kunci adalah agar Anda tidak perlu mengetikkan kata sandi Anda setiap kali Anda menggunakan kunci Anda. Agen menyimpan kunci dalam memori dari satu waktu ke waktu berikutnya. GPG sendiri tidak dapat melakukan itu karena proses berakhir setelah selesai.

Hal lain yang dapat dilakukan agen kunci adalah memungkinkan GPG berjalan pada mesin jarak jauh untuk mendapatkan kunci di agen lokal (yang mungkin memuatnya dari file lokal dan meminta frasa sandi Anda). Agen gpg belum dapat melakukan ini, ini adalah fitur yang direncanakan . SSH telah memiliki agen forwarding untuk waktu yang sangat lama. (Ini adalah alasan untuk tidak menggunakan agen gpg untuk kunci SSH.)

GPG 1.x atau 2.0.x tahu bahwa agen sedang berjalan karena GPG_AGENT_INFOvariabel diatur. Variabel ini berisi lokasi soket untuk berkomunikasi dengan agen serta ID proses agen. GPG 2.1 selalu menempatkan soket agen di ~/.gnupg. GPG 2.x selalu memulai proses agen jika tidak ada yang berjalan.

Anda dapat memulai agen hanya dengan menjalankan gpg-agent. Jika Anda ingin menjaga proses agen sebagai bagian dari sesi Anda, Anda dapat mengganti permintaan manajer sesi Anda dengan gpg-agent my-session-manager; beberapa distribusi mengatur ini secara otomatis. GPG akan secara otomatis memulai agen, dan GPG 2.1 juga akan menemukan agen berjalan tanpa perlu variabel lingkungan, jadi Anda tidak perlu memulainya dengan cara ini kecuali jika Anda menggunakan versi GPG yang lebih lama atau Anda menggunakan agen untuk menyimpan tipe lain tombol seperti SSH.

Anda dapat mengirim perintah agen dengan perintahgpg-connect-agent shell. Kirim killperintah untuk mematikan proses agen (atau mengirimnya sinyal).

Agen gpg dikirimkan bersama GPG sendiri. Beberapa distribusi mengemasnya secara terpisah.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6
"Ketika proses GPG membutuhkan kunci, itu menghubungi program gpg-agent yang sedang berjalan melalui soket dan meminta kunci. Jika proses agen memiliki kunci, itu menyediakannya untuk gpg." Sedikit menyesatkan. Agen tidak memberikan kunci untuk proses klien. Sebagai gantinya, ia melakukan tindakan menggunakan kunci, atas nama proses klien. (Klien memberikan sesuatu kepada agen untuk ditandatangani, dienkripsi, atau didekripsi, dan agen melakukannya.) Saat menggunakan agen, perangkat lunak klien SSH dan GPG Anda tidak pernah mendapatkan akses ke kunci yang sebenarnya.
Peter Samuelson
3
"Agen gpg belum dapat melakukan ini, ini adalah fitur yang direncanakan. SSH telah memiliki penerusan agen untuk waktu yang sangat lama. (Ini adalah alasan untuk tidak menggunakan agen gpg untuk kunci SSH.)" Tidak sepenuhnya benar. gpg-agent berfungsi dengan baik dengan penerusan agen SSH. Aku menggunakannya setiap hari. Klien SSH menangani penerusan, agen gpg tidak benar-benar terlibat dalam hal itu. Yang tidak didukung adalah GPG sendiri untuk berbicara dengan agen dari jarak jauh.
Peter Samuelson