ssh-add -l
menampilkan semua ssh-keys yang telah ditambahkan ssh-add ~/.ssh/id_yourkey
. Bagaimana saya melakukan hal yang analog dengan gpg dan gpg-agent, dengan kata lain, memintanya untuk menampilkan daftar kunci yang di-cache?
Anda mungkin tidak dapat melakukan ini, setidaknya belum, atau setidaknya tidak dalam kasus umum. Namun, saya akan membagikan apa yang telah saya pelajari, dan berharap untuk memperbarui jawaban ini pada waktunya.
Pertama-tama, tidak seperti ssh-agent
kapabilitas, yang sebenarnya menyimpan kunci privat, gpg-agent
dapat men-cache kunci atau frasa sandi. Terserah masing-masing klien untuk melakukan cache, dan gpg
hanya menggunakan gpg-agent
untuk men-cache passphrase.
Anda dapat berinteraksi dengan gpg-agent
menggunakan gpg-connect-agent
utilitas. Dalam contoh berikut ini, saya mengirimkan perintah satu per satu melalui STDIN.
$ CACHEID="ThisIsTheTrickyPart"
$ ERRSTR="Error+string+goes+here"
$ PMTSTR="Prompt"
$ DESSTR="Description+string+goes+here"
$ echo "GET_PASSPHRASE --data $CACHEID $ERRSTR $PMTSTR $DESSTR" | gpg-connect-agent
D MyPassPhrase
OK
Setelah memanggil gpg-connect-agent
dan meneruskan perintah ini, pinentry
perintah yang dikonfigurasi pada sistem saya menggunakan string error, prompt, dan description untuk meminta frasa sandi. Dalam hal ini saya memasukkan "MyPassPhrase" yang merupakan hasil dari output terstruktur (lihat gambar di bawah) . Jika saya mengirim GET_PASSPHRASE
ke gpg-agent
lagi dengan yang sama $CACHEID
, ia mengembalikan cache passphrase daripada menggunakan pinentry
.
GET_PASSPHRASE
juga menerima --no-ask
opsi yang akan mengembalikan kesalahan pada cache miss. Di sini saya menggunakan "NotCachedID" sebagai ID cache, dan menggunakan string dummy untuk argumen yang diperlukan yang gpg-agent
tidak akan digunakan.
$ echo "GET_PASSPHRASE --no-ask NotCachedID Err Pmt Des" | gpg-connect-agent
ERR 67108922 No data <GPG Agent>
Pada prinsipnya, maka, Anda bisa meminta agen untuk setiap frasa sandi yang mungkin di-cache pada gilirannya, dan memeriksa OK
atau ERR
dalam output. Pertanyaannya kemudian, bagaimana cara menghasilkan ID cache? Seperti yang kita lihat dalam contoh di atas, gpg-agent
liberal dalam apa yang diterima sebagai ID cache. Ternyata gpg
menghitung sidik jari pada kunci publik dan menggunakan representasi string hex-coded sebagai ID cache, tetapi masalahnya adalah bahwa sidik jari ini tidak sama dengan sidik jari yang dapat Anda pelajari melaluigpg --fingerprint --list-secret-keys
. Intisari ini disebut keygrip (karena dihitung atas bahan kunci mentah saja sedangkan sidik jari dihitung atas bahan kunci dan cap waktu pembuatan). Jika Anda benar-benar ingin melanjutkan jalur ini, Anda harus mencari tahu cara membuat sidik jari yang benar untuk setiap tombol yang ingin Anda periksa (ini akan mudah menggunakan GnuPG generasi berikutnya, 2.1, dengan opsi --with-keygrip
).
Peringatan: Keluaran dari GET_PASSPHRASE
sebenarnya berisi frasa sandi di tempat kosong . Bahkan jika Anda meninggalkan --data
opsi, frasa sandi jelas terlihat sebagai string kode-hex. Mungkin ini adalah ide yang sangat buruk untuk dikacaukan dengan hal ini kecuali Anda tahu apa yang Anda lakukan, dan mengambil tindakan pencegahan yang sesuai.
gpg-agent
, bukan?gpg-agent
meminta rasa apa pun daripinentry
program yang dikonfigurasi untuk digunakan. Lihat misalnya Bagaimana memaksa GPG ke mode penggunaan konsol pinentry ... .gpg-2.1.11
dikompilasi dari sumber pada Ubuntu 14.04, saya tidak tahu apa itugpg-agent
cache id: Saya mencoba kedua keygrips (kunci utama dan subkunci) dan sidik jari kunci, seperti yang ditunjukkan olehgpg --fingerprint --with-keygrip <user>
. Tidak ada yang berfungsi, dangpg-connect-agent
selalu melaporkanERR 67108922 No data <GPG Agent>
. Saya mengecek agen masih memiliki kata sandi dengan berhasil menjalankanGPG_TTY= gpg --decrypt <file>
setelah mencoba berbagai id cache. (Seandainya tidak jelas, dengan unsettingGPG_TTY
, dekripsi berhasil hanya jika frasa sandi sudah di-cache olehgpg-agent
.)Pada versi gnupg yang lebih baru (diuji dengan 2.1.18) gunakan:
gpg --fingerprint --with-keygrip <email>
untuk mendapatkan keygrip, lalu
echo "KEYINFO --no-ask <keygrip> Err Pmt Des" | gpg-connect-agent
untuk melihat apakah itu di-cache atau tidak.
sumber
Pada versi GnuPG yang lebih baru (diuji dengan 2.2.9) juga dimungkinkan untuk membuat daftar keygrip yang saat ini di-cache oleh agen menggunakan perintah
keyinfo --list
dengangpg-connect-agent
.Di
1
kolom ketujuh menunjukkan bahwa keygrip di-cache. Hubungan antara keygrip dan kunci yang diwakilinya dapat diambil dengangpg --list-secret-keys --with-keygrip
.Sumber: https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-in-cache/
sumber
Untuk mendapatkan cacheid Anda perlu menyebutkan
--fingerprint
dua kali, misalnya:Cacheid dalam hal ini adalah
E8514C2510C602910D47A0087C8B4360E50A8F2A
.sumber
--fingerprint
lawan dua--fingerprint --fingerprint
sama-sama mengembalikan hasil yang sama persis. Sebagai @BenCreasy menulis, jawaban di atas menggunakan karya keygrip.http://lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
Cacheid adalah sidik jari penuh dari kunci.
sumber