Anda harus memiliki kunci publik untuk memverifikasi tanda tangan yang dibuat dengan kunci pribadi yang sesuai, tetapi Anda tidak harus menandatangani atau bahkan menandatangani kunci secara lokal. Dalam hal ini Anda akan menerima peringatan dari GPG bahwa kunci tidak dipercaya.
Inilah tes yang saya buat dengan file yang ditandatangani oleh kunci saya sendiri, tetapi pada sistem di mana kunci tersebut belum diimpor:
[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$ gpg -v --status-fd 1 --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
[GNUPG:] ERRSIG 7FF2D37135C7553C 1 10 00 1380142299 9
[GNUPG:] NO_PUBKEY 7FF2D37135C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$
Sayangnya saran Harry tidak berfungsi, itu mengekstrak sedikit informasi lebih banyak, tetapi tidak cukup untuk digunakan.
Seperti yang Anda lihat, sebagian besar informasi yang diperoleh adalah ID kunci subkunci yang digunakan untuk membuat tanda tangan dan waktu tanda tangan dibuat. Ini cocok dengan data yang tersedia untuk pgpdump (atau --list-paket):
bash-3.2$ pgpdump thing.txt.gpg
Old: Compressed Data Packet(tag 8)
Comp alg - ZLIB <RFC1950>(comp 2)
Old: One-Pass Signature Packet(tag 4)(13 bytes)
New version(3)
Sig type - Signature of a binary document(0x00).
Hash alg - SHA512(hash 10)
Pub alg - RSA Encrypt or Sign(pub 1)
Key ID - 0x7FF2D37135C7553C
Next packet - other than one pass signature
Old: Literal Data Packet(tag 11)(24 bytes)
Format - binary
Filename - thing.txt
File modified time - Thu Sep 26 06:51:39 EST 2013
Literal - ...
Old: Signature Packet(tag 2)(412 bytes)
Ver 4 - new
Sig type - Signature of a binary document(0x00).
Pub alg - RSA Encrypt or Sign(pub 1)
Hash alg - SHA512(hash 10)
Hashed Sub: signature creation time(sub 2)(4 bytes)
Time - Thu Sep 26 06:51:39 EST 2013
Sub: issuer key ID(sub 16)(8 bytes)
Key ID - 0x7FF2D37135C7553C
Hash left 2 bytes - f0 97
RSA m^d mod n(3066 bits) - ...
-> PKCS-1
bash-3.2$
Seperti yang Anda lihat, ia menyediakan algoritma hash, detail dari jenis kunci (kunci penandatanganan saya adalah subkunci RSA 3072-bit dan ID kunci subkunci, tetapi tidak ada yang mengidentifikasi kunci utama. Informasi itu hanya terungkap ketika Anda memiliki kunci publik dan memverifikasi tanda tangan.
Kemudian saya mengimpor kunci publik saya ke sistem itu dan mencoba lagi:
[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E 55C4 321E 4E23 7359 0E5D
Subkey fingerprint: B7F0 FE75 9387 430D D0C5 8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$
Sekarang ia dapat mengidentifikasi kunci dan mencocokkannya dengan kunci utama. Namun, adalah mungkin untuk mengurangi sifat dari peringatan tersebut seperti ini:
[ben@seditious tmp]$ gpg -v --verify --trust-model always thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$
Masih ada peringatan bahwa itu adalah kunci yang tidak dipercaya, tetapi tidak secara besar-besaran dan menghapus verbositas hanya mengurangi ini menjadi ini:
[ben@seditious tmp]$ gpg --verify --trust-model always thing.txt.gpg
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
[ben@seditious tmp]$
Kunci publik diperlukan untuk tahap verifikasi karena digunakan untuk mencocokkan data yang dihasilkan oleh penanda tangan dengan kunci pribadi mereka. Dapat dianggap, secara sederhana, sebagai pelengkap enkripsi di mana kunci pribadi diperlukan untuk mendekripsi data yang dienkripsi ke kunci publik.
Catatan: Saya telah sedikit mengubah UID dalam contoh ini, tetapi setiap orang yang mendapatkan kunci itu akan melihat apa sebenarnya mereka. Kalau tidak, hasilnya adalah copy dan paste langsung.
EDIT: Anda dapat memanggil file kunci publik secara langsung seperti keyring jika Anda memilikinya dalam format lapis baja non-ASCII (yaitu file .gpg alih-alih file .asc). Meski begitu, Anda masih membutuhkan kunci publik. Untuk melakukan ini perintahnya seperti ini:
[ben@seditious ~]$ gpg -v --no-default-keyring --keyring /tmp/mykey.gpg --verify /tmp/thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E 55C4 321E 4E23 7359 0E5D
Subkey fingerprint: B7F0 FE75 9387 430D D0C5 8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious ~]$
gpg --status-fd 1 --verify (thefile)
memberikan dalam outputnya sebagai string pertama sidik jari kunci yang membuat tanda tangan.