Bạn phải có khóa chung để xác minh chữ ký được tạo bằng khóa riêng tương ứng, nhưng bạn không phải ký hoặc thậm chí ký tên cục bộ. Trong trường hợp này, bạn sẽ nhận được cảnh báo từ GPG rằng khóa không đáng tin cậy.
Đây là một thử nghiệm tôi đã thực hiện với một tệp được ký bởi khóa của riêng tôi, nhưng trên một hệ thống mà khóa chưa được nhập:
[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]$
Thật không may, đề nghị của Harry không hoạt động, nó trích xuất thêm một chút thông tin, nhưng không đủ để sử dụng.
Như bạn có thể thấy, thông tin thu được nhiều nhất là ID khóa của khóa con được sử dụng để tạo chữ ký và thời gian chữ ký được tạo. Điều này khớp với dữ liệu có sẵn cho pgpdump (hoặc --list-gói):
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$
Như bạn có thể thấy nó cung cấp thuật toán băm, chi tiết về loại khóa (khóa ký của tôi là khóa con RSA 3072 bit và ID khóa của khóa con, nhưng không có gì để xác định khóa chính. tiết lộ khi bạn có khóa công khai và xác minh chữ ký.
Sau đó, tôi đã nhập khóa công khai của mình trên hệ thống đó và thử lại:
[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]$
Bây giờ nó có thể xác định khóa và khớp với khóa chính. Tuy nhiên, có thể giảm bớt bản chất của những cảnh báo như thế này:
[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]$
Vẫn có một cảnh báo rằng đó là một khóa không đáng tin cậy, nhưng không ồ ạt như vậy và việc loại bỏ tính dài dòng chỉ làm giảm nó xuống mức này:
[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]$
Khóa công khai là bắt buộc cho giai đoạn xác minh vì nó được sử dụng để khớp dữ liệu do người ký tạo với khóa riêng của họ. Nói một cách đơn giản, nó có thể được coi là phần bổ sung của mã hóa trong đó khóa riêng là cần thiết để giải mã dữ liệu được mã hóa thành khóa chung.
Lưu ý: Tôi đã điều chỉnh UID trong ví dụ này một chút, nhưng mọi người nhận được khóa đó sẽ thấy chúng thực sự là gì. Nếu không, đầu ra là một bản sao thẳng và dán.
EDIT: Bạn có thể gọi tệp khóa công khai trực tiếp như khóa, nếu bạn có nó ở định dạng bọc thép không phải ASCII (tức là tệp .gpg thay vì tệp .asc). Mặc dù vậy, bạn vẫn cần khóa công khai. Để làm điều này, lệnh là như thế này:
[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)
cho đầu ra của nó dưới dạng chuỗi đầu tiên dấu vân tay của khóa tạo chữ ký không.