คุณต้องมีพับลิกคีย์เพื่อตรวจสอบลายเซ็นที่ทำด้วยไพรเวตคีย์ที่เกี่ยวข้อง แต่คุณไม่จำเป็นต้องเซ็นชื่อหรือแม้แต่เซ็นชื่อในเครื่อง ในกรณีนี้คุณจะได้รับคำเตือนจาก GPG ว่ารหัสไม่น่าเชื่อถือ
นี่คือการทดสอบที่ฉันทำกับไฟล์ที่ลงชื่อด้วยกุญแจของฉันเอง แต่ในระบบที่ไม่ได้นำเข้ากุญแจ:
[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]$
น่าเสียดายที่ข้อเสนอแนะของแฮร์รี่ไม่ได้ผล แต่ก็มีการดึงข้อมูลเพิ่มเติมอีกเล็กน้อย แต่ไม่เพียงพอที่จะใช้งาน
ดังที่คุณเห็นข้อมูลส่วนใหญ่ที่ได้รับคือรหัสคีย์ของคีย์ย่อยที่ใช้ในการสร้างลายเซ็นและเวลาที่สร้างลายเซ็น สิ่งนี้ตรงกับข้อมูลที่มีให้ pgpdump (หรือ --list-packets):
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$
อย่างที่คุณเห็นมันมีอัลกอริธึมการแฮชรายละเอียดของประเภทของคีย์ (คีย์การลงนามของฉันคือคีย์ย่อย RSA 3072 บิตและรหัสคีย์ของคีย์ย่อย แต่ไม่มีอะไรที่จะระบุคีย์หลักข้อมูลนั้นเป็นเพียง เปิดเผยเมื่อคุณมีรหัสสาธารณะและตรวจสอบลายเซ็น
จากนั้นฉันนำเข้ากุญแจสาธารณะของฉันบนระบบนั้นและลองอีกครั้ง:
[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]$
ขณะนี้สามารถระบุคีย์และจับคู่กับคีย์หลักได้ อย่างไรก็ตามมีความเป็นไปได้ที่จะลดลักษณะของคำเตือนเหล่านี้:
[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]$
ยังคงมีคำเตือนว่ามันเป็นกุญแจที่ไม่น่าเชื่อถือ แต่ไม่หนาแน่นมากและการลบคำฟุ่มเฟื่อยเพียงลดความมัน:
[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]$
ต้องใช้พับลิกคีย์สำหรับขั้นตอนการตรวจสอบเนื่องจากใช้เพื่อจับคู่ข้อมูลที่ผู้ลงนามสร้างขึ้นด้วยคีย์ส่วนตัวของพวกเขา ในแง่ที่เรียบง่ายอาจคิดได้ว่าเป็นส่วนเสริมของการเข้ารหัสที่จำเป็นต้องใช้คีย์ส่วนตัวเพื่อถอดรหัสข้อมูลที่เข้ารหัสไปยังกุญแจสาธารณะ
หมายเหตุ: ฉันได้ปรับแต่ง UID ในตัวอย่างนี้นิดหน่อย แต่ทุกคนที่ได้รับกุญแจนั้นจะเห็นว่าพวกเขาเป็นอะไรจริงๆ มิฉะนั้นเอาต์พุตจะเป็นสำเนาและวางแบบตรง
แก้ไข: คุณสามารถเรียกไฟล์กุญแจสาธารณะโดยตรงเช่นพวงกุญแจหากคุณมีในรูปแบบหุ้มเกราะที่ไม่ใช่ ASCII (เช่นไฟล์. gpg แทนไฟล์. asg) ถึงกระนั้นคุณยังต้องใช้รหัสสาธารณะ หากต้องการทำสิ่งนี้คำสั่งจะเป็นดังนี้:
[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)
ให้ในการส่งออกเป็นสตริงแรกลายนิ้วมือของคีย์ที่ทำให้ลายเซ็น