จะแสดงรายละเอียดคีย์ gpg โดยไม่ต้องนำเข้าได้อย่างไร


131

ฉันมีสำเนาของคีย์ gpg ที่เก็บ postgresql apt และต้องการดูรายละเอียดของคีย์ gpg ตามที่มาในไฟล์ เป็นไปได้หรือไม่โดยไม่ต้องนำเข้าพวงกุญแจ

คำตอบ:


149

มีรายละเอียดหลายระดับที่คุณจะได้รับเมื่อดูข้อมูลคีย์ OpenPGP: สรุปพื้นฐานผลลัพธ์ที่เครื่องอ่านได้ของข้อมูลสรุปนี้หรือรายการโดยละเอียด (และทางเทคนิคมาก) ของแพ็กเก็ต OpenPGP แต่ละรายการ

ข้อมูลสำคัญพื้นฐาน

สำหรับจุดสูงสุดสั้น ๆ ที่ไฟล์คีย์ OpenPGP คุณสามารถส่งชื่อไฟล์เป็นพารามิเตอร์หรือไพพ์ในข้อมูลคีย์ผ่าน STDIN หากไม่มีการส่งผ่านคำสั่ง GnuPG จะพยายามเดาสิ่งที่คุณต้องการทำและสำหรับข้อมูลหลักนี่คือการพิมพ์สรุปบนคีย์:

$ gpg a4ff2279.asc
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa8192 2012-12-25 [SC]
      0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
uid           Jens Erat (born 1988-01-19 in Stuttgart, Germany)
uid           Jens Erat <jens.erat@fsfe.org>
uid           Jens Erat <jens.erat@uni-konstanz.de>
uid           Jens Erat <jabber@jenserat.de>
uid           Jens Erat <email@jenserat.de>
uid           [jpeg image of size 12899]
sub   rsa4096 2012-12-26 [E] [revoked: 2014-03-26]
sub   rsa4096 2012-12-26 [S] [revoked: 2014-03-26]
sub   rsa2048 2013-01-23 [S] [expires: 2023-01-21]
sub   rsa2048 2013-01-23 [E] [expires: 2023-01-21]
sub   rsa4096 2014-03-26 [S] [expires: 2020-09-03]
sub   rsa4096 2014-03-26 [E] [expires: 2020-09-03]
sub   rsa4096 2014-11-22 [A] [revoked: 2016-03-01]
sub   rsa4096 2016-02-24 [A] [expires: 2020-02-23]

โดยการตั้งค่า--keyid-format 0xlongรหัสคีย์แบบยาวจะถูกพิมพ์แทนรหัสคีย์สั้นที่ไม่ปลอดภัย :

$ gpg a4ff2279.asc                                                                 
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa8192/0x4E1F799AA4FF2279 2012-12-25 [SC]
      0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
uid                             Jens Erat (born 1988-01-19 in Stuttgart, Germany)
uid                             Jens Erat <jens.erat@fsfe.org>
uid                             Jens Erat <jens.erat@uni-konstanz.de>
uid                             Jens Erat <jabber@jenserat.de>
uid                             Jens Erat <email@jenserat.de>
uid                             [jpeg image of size 12899]
sub   rsa4096/0x0F3ED8E6759A536E 2012-12-26 [E] [revoked: 2014-03-26]
sub   rsa4096/0x2D6761A7CC85941A 2012-12-26 [S] [revoked: 2014-03-26]
sub   rsa2048/0x9FF7E53ACB4BD3EE 2013-01-23 [S] [expires: 2023-01-21]
sub   rsa2048/0x5C88F5D83E2554DF 2013-01-23 [E] [expires: 2023-01-21]
sub   rsa4096/0x8E78E44DFB1B55E9 2014-03-26 [S] [expires: 2020-09-03]
sub   rsa4096/0xCC73B287A4388025 2014-03-26 [E] [expires: 2020-09-03]
sub   rsa4096/0x382D23D4C9773A5C 2014-11-22 [A] [revoked: 2016-03-01]
sub   rsa4096/0xFF37A70EDCBB4926 2016-02-24 [A] [expires: 2020-02-23]
pub   rsa1024/0x7F60B22EA4FF2279 2014-06-16 [SCEA] [revoked: 2016-08-16]

ให้-vหรือ-vvจะเพิ่มข้อมูลเพิ่มเติม ฉันชอบพิมพ์รายละเอียดแพ็คเกจมากกว่าในกรณีนี้ (ดูด้านล่าง)

เอาต์พุตที่อ่านได้ด้วยเครื่อง

GnuPG ยังมีรูปแบบเอาต์พุตที่คั่นด้วยโคลอนซึ่งสามารถแยกวิเคราะห์ได้ง่ายและมีรูปแบบที่เสถียร รูปแบบการบันทึกไว้ใน GnuPGdoc/DETAILSไฟล์ --with-colonsตัวเลือกที่จะได้รับรูปแบบนี้คือ

$ gpg --with-colons a4ff2279.asc
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub:-:8192:1:4E1F799AA4FF2279:1356475387:::-:
uid:::::::::Jens Erat (born 1988-01-19 in Stuttgart, Germany):
uid:::::::::Jens Erat <jens.erat@fsfe.org>:
uid:::::::::Jens Erat <jens.erat@uni-konstanz.de>:
uid:::::::::Jens Erat <jabber@jenserat.de>:
uid:::::::::Jens Erat <email@jenserat.de>:
uat:::::::::1 12921:
sub:-:4096:1:0F3ED8E6759A536E:1356517233:1482747633:::
sub:-:4096:1:2D6761A7CC85941A:1356517456:1482747856:::
sub:-:2048:1:9FF7E53ACB4BD3EE:1358985314:1674345314:::
sub:-:2048:1:5C88F5D83E2554DF:1358985467:1674345467:::
sub:-:4096:1:8E78E44DFB1B55E9:1395870592:1599164118:::
sub:-:4096:1:CC73B287A4388025:1395870720:1599164118:::
sub:-:4096:1:382D23D4C9773A5C:1416680427:1479752427:::
sub:-:4096:1:FF37A70EDCBB4926:1456322829:1582466829:::

ตั้งแต่ GnuPG 2.1.23 gpg: WARNING: no command supplied. Trying to guess what you mean ...คำเตือนสามารถละเว้นได้โดยใช้--import-options show-onlyตัวเลือกร่วมกับ--importคำสั่ง ( --with-colonsแน่นอนว่าจะใช้งานได้โดยไม่มี):

$ gpg --with-colons --import-options show-only --import a4ff2279
[snip]

สำหรับเวอร์ชันเก่า: ข้อความเตือนจะพิมพ์บน STDERR ดังนั้นคุณสามารถอ่าน STDIN เพื่อแยกข้อมูลสำคัญออกจากคำเตือน

รายละเอียดทางเทคนิค: รายการแพ็กเก็ต OpenPGP

คุณสามารถใช้gpg --list-packets [file]เพื่อดูข้อมูลบนแพ็กเก็ต OpenPGP ที่อยู่ในไฟล์ได้โดยไม่ต้องติดตั้งแพ็คเกจเพิ่มเติม

$ gpg --list-packets a4ff2279.asc
:public key packet:
    version 4, algo 1, created 1356475387, expires 0
    pkey[0]: [8192 bits]
    pkey[1]: [17 bits]
    keyid: 4E1F799AA4FF2279
:user ID packet: "Jens Erat (born 1988-01-19 in Stuttgart, Germany)"
:signature packet: algo 1, keyid 4E1F799AA4FF2279
    version 4, created 1356516623, md5len 0, sigclass 0x13
    digest algo 2, begin of digest 18 46
    hashed subpkt 27 len 1 (key flags: 03)
[snip]

pgpdump [file]เครื่องมือที่ทำงานคล้ายกับgpg --list-packetsและให้ผลผลิตที่คล้ายกัน แต่จะช่วยแก้ปัญหาเหล่านั้นทั้งหมดตัวระบุขั้นตอนวิธีการแสดงที่สามารถอ่านได้ มีให้สำหรับการแจกแจงที่เกี่ยวข้องทั้งหมด (ในอนุพันธ์ของ Debian จะเรียกแพคเกจpgpdumpเหมือนเครื่องมือนั้นเอง)

$ pgpdump a4ff2279.asc
Old: Public Key Packet(tag 6)(1037 bytes)
    Ver 4 - new
    Public key creation time - Tue Dec 25 23:43:07 CET 2012
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA n(8192 bits) - ...
    RSA e(17 bits) - ...
Old: User ID Packet(tag 13)(49 bytes)
    User ID - Jens Erat (born 1988-01-19 in Stuttgart, Germany)
Old: Signature Packet(tag 2)(1083 bytes)
    Ver 4 - new
    Sig type - Positive certification of a User ID and Public Key packet(0x13).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA1(hash 2)
    Hashed Sub: key flags(sub 27)(1 bytes)
[snip]

1
ขอบคุณ ฉันเพิ่งใช้ "gpg --list-keys path-to-key-file" และได้สิ่งที่ต้องการดู: ... hashed subpkt 2 len 4 (sig created 2013-02-24) hashed subpkt 9 len 4 (key หมดอายุหลังจาก 4y134d23h24m) ... และ pgpdump ทำให้เอาต์พุตอ่านง่ายขึ้นเล็กน้อย
Amos Shapira

@AmosShapira แน่ใจเหรอ? คำสั่งนั้นใช้ไม่ได้กับฉันเลย บางทีคุณอาจหมายถึง--list-packets?
Jonathan Cross

1
@JonathanCross --list-packetsแท้จริงอธิบายเสียงเอาท์พุทชอบ
Jens Erat

1
จะกำจัดสิ่งน่าเกลียดนี้WARNING: no command suppliedให้เป็น stderr ได้อย่างไร (สิ่งนี้ขัดขวางการใช้gpgในสคริปต์อย่างถูกต้องเมื่อพูดถึงการเข้ารหัสลับวิธีเดียวที่ปลอดภัยคือการปฏิบัติต่อผลลัพธ์ใด ๆ กับ stderr ว่าเป็นข้อผิดพลาดร้ายแรงวิธีนี้คุณจะเตรียมพร้อมเมื่อมีการค้นพบจุดอ่อนที่สำคัญใหม่ซึ่งจะพิมพ์ไปยัง stderr เท่านั้น)
Tino

1
ฉันไม่รู้ว่ามีวิธีง่ายๆ คุณยังสามารถใช้ไฟล์ที่สำคัญเป็นพวงกุญแจและแม้ว่าแล้วเรียกบางอย่างเช่น--list-keys gpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keysหรือเพียงแค่ทิ้งข้อความแจ้งเตือนที่มีพวงของตัวเลือกในการกรอง stderr ใน (BA) สคริปต์ดวลจุดโทษ
Jens Erat

31

ดูเหมือนว่าฉันจะสามารถเข้ากับ:

$gpg <path_to_file>

ซึ่งผลลัพธ์จะเป็นดังนี้:

$ gpg /tmp/keys/something.asc 
  pub  1024D/560C6C26 2014-11-26 Something <something@none.org>
  sub  2048g/0C1ACCA6 2014-11-26

หน่วยงานไม่ได้ระบุเป็นพิเศษว่าข้อมูลสำคัญใดที่เกี่ยวข้อง ผลลัพธ์นี้คือทั้งหมดที่ฉันสนใจ


30

ในการตรวจสอบและแสดงรายชื่อลายนิ้วมือของคีย์ (โดยไม่ต้องนำเข้าในพวงกุญแจก่อน) ให้พิมพ์

gpg --with-fingerprint <filename>

แก้ไข: บน Ubuntu 18.04 (gpg 2.2.4) ลายนิ้วมือจะไม่แสดงพร้อมกับคำสั่งด้านบน ใช้--with-subkey-fingerprintตัวเลือกแทน

gpg --with-subkey-fingerprint <filename>

4
นี่ควรเป็นคำตอบที่ยอมรับได้ ฉันเห็นด้วยกับความคิดเห็นที่โพสต์ - เป็นคำตอบโดย @Skyr
gertvdijk

2
ACK ดีมากไม่ต้องใช้พวงกุญแจส่วนตัวในท้องถิ่น ฯลฯ จะแสดงชื่อคีย์ ... ทำงานได้ดีที่สุด
Florian Heigl

1
ด้วยเหตุผลบางประการที่ไม่ทราบสาเหตุ / ไม่มีเอกสารทำให้gpg --with-fingerprintไม่สามารถพิมพ์ลายนิ้วมือที่ด้านข้างของฉันได้ Ubuntu 18.04gpg (GnuPG) 2.1.18
Tino

สิ่งเดียวกันก็เกิดขึ้นกับฉันเช่นกัน @Tino คุณพบข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุหรือไม่?
kjones

@Tino และ @kjones อัปเดตคำตอบพร้อม--with-subkey-fingerprintข้อมูลที่ควรใช้กับ Ubuntu 18.04
Ronny Andersson

9

ตัวเลือกนี้--list-packetsจะแยกวิเคราะห์ข้อมูล pgp จากไฟล์และส่งออกโครงสร้าง - ด้วยวิธีทางเทคนิค เมื่อแยกวิเคราะห์คีย์สาธารณะคุณสามารถแยกรหัสผู้ใช้และรหัสคีย์ของลายเซ็นได้อย่างง่ายดาย

โปรดระวังว่าคำสั่งนี้จะแยกวิเคราะห์รูปแบบข้อมูลเท่านั้น แต่จะไม่มีการตรวจสอบลายเซ็นหรือสิ่งที่คล้ายคลึงกัน


2

เมื่อฉันสะดุดกับคำตอบนี้ฉันกำลังมองหาวิธีที่จะได้ผลลัพธ์ที่ง่ายต่อการแยกวิเคราะห์ สำหรับฉันตัวเลือก--with-colonsทำเคล็ดลับ:

$ gpg --with-colons file
sec::4096:1:AAAAAAAAAAAAAAAA:YYYY-MM-DD::::Name (comment) email
ssb::4096:1:BBBBBBBBBBBBBBBB:YYYY-MM-DD::::

เอกสารที่สามารถพบได้ที่นี่


คุณจะได้ผลลัพธ์ YYYY-MM-DD ที่ดีได้อย่างไร ฉันไม่สามารถทำซ้ำได้ด้วย gpg2.x และ - พร้อมเครื่องหมายโคลอน
MKesper

1

คุณยังสามารถใช้--keyid-formatสวิตช์เพื่อแสดงรหัสคีย์สั้นหรือยาว:

$ gpg2 -n --with-fingerprint --keyid-format=short --show-keys <filename>

ซึ่งผลลัพธ์จะเป็นเช่นนี้ (ตัวอย่างจากคีย์ repo PostgreSQL CentOS):

pub   dsa1024/442DF0F8 2008-01-08 [SCA]                                                                       │
      Key fingerprint = 68C9 E2B9 1A37 D136 FE74  D176 1F16 D2E1 442D F0F8                                    │              honor-keyserver-url
uid                    PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>                      │                     When  using --refresh-keys, if the key in question has a preferred keyserver URL, then use that
sub   elg2048/D43F1AF8 2008-01-08 [E]

0

pgpdump( https://www.lirnberger.com/tools/pgpdump/ ) เป็นเครื่องมือที่คุณสามารถใช้เพื่อตรวจสอบบล็อก pgp

ไม่เป็นมิตรกับผู้ใช้และค่อนข้างเป็นเทคนิคอย่างไรก็ตาม

  • มันแยกวิเคราะห์คีย์สาธารณะหรือส่วนตัว (โดยไม่มีคำเตือน)
  • มันไม่ได้ปรับเปลี่ยนพวงกุญแจใด ๆ (บางครั้งก็ไม่ชัดเจนว่า gpg ทำอะไรหลังฝากระโปรงจากประสบการณ์ของฉัน)
  • มันพิมพ์แพ็คเก็ตทั้งหมดโดยเฉพาะแพ็คเก็ตของ userid ซึ่งแสดงข้อมูลข้อความต่างๆเกี่ยวกับคีย์
pgpdump -p test.asc 
New: Secret Key Packet(tag 5)(920 bytes)
    Ver 4 - new
    Public key creation time - Fri May 24 00:33:48 CEST 2019
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA n(2048 bits) - ...
    RSA e(17 bits) - ...
    RSA d(2048 bits) - ...
    RSA p(1024 bits) - ...
    RSA q(1024 bits) - ...
    RSA u(1020 bits) - ...
    Checksum - 49 2f 
New: User ID Packet(tag 13)(18 bytes)
    User ID - test (test) <tset>                        
New: Signature Packet(tag 2)(287 bytes)
    Ver 4 - new
    Sig type - Positive certification of a User ID and Public Key packet(0x13).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA256(hash 8)
    Hashed Sub: signature creation time(sub 2)(4 bytes)
        Time - Fri May 24 00:33:49 CEST 2019
    Hashed Sub: issuer key ID(sub 16)(8 bytes)
        Key ID - 0x396D5E4A2E92865F
    Hashed Sub: key flags(sub 27)(1 bytes)
        Flag - This key may be used to certify other keys
        Flag - This key may be used to sign data
    Hash left 2 bytes - 74 7a 
    RSA m^d mod n(2048 bits) - ...
        -> PKCS-1

น่าเสียดายที่มันไม่อ่าน stdin: /


ฉันอ่านpgpdump stdinเช่นcurl -s https://www.theguardian.com/pgp/PublicKeys/Guardian%20Application-Security.pub.txt | pgpdumpทำงานได้ดี
rickhg12hs

0

ในการรับรหัสคีย์ (8 ไบต์ 16 หลักฐานสิบหก) นี่คือคำสั่งที่ใช้ได้กับฉันใน GPG 1.4.16, 2.1.18 และ 2.2.19:

gpg --list-packets <key.asc | awk '$1=="keyid:"{print$2}'

หากต้องการรับข้อมูลเพิ่มเติม (นอกเหนือจากรหัสคีย์):

gpg --list-packets <key.asc

หากต้องการรับข้อมูลเพิ่มเติม:

gpg --list-packets -vvv --debug 0x2 <key.asc

คำสั่ง

gpg --dry-run --import <key.asc

ยังใช้งานได้ทั้ง 3 เวอร์ชัน แต่ใน GPG 1.4.16 จะพิมพ์รหัสคีย์สั้น ๆ (4 ไบต์ 8 หลักเลขฐานสิบหก) เท่านั้นดังนั้นจึงมีความปลอดภัยน้อยกว่าในการระบุคีย์

บางคำสั่งในคำตอบอื่น ๆ (เช่นgpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) จะไม่ได้ทำงานในบางส่วนของ 3 รุ่นจีพีจีดังกล่าวข้างต้นทำให้พวกเขาไม่ได้พกพาเมื่อกำหนดเป้าหมายหลายรุ่นของจีพีจี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.