Làm thế nào để hiển thị chi tiết khóa gpg mà không cần nhập nó?


131

Tôi có một bản sao của khóa gpg của kho lưu trữ postgresql và muốn xem chi tiết về khóa gpg khi có trong tệp. Điều này có thể mà không cần nhập nó vào một vòng chìa khóa?

Câu trả lời:


149

Có một số mức chi tiết bạn có thể nhận được khi xem dữ liệu khóa OpenPGP: tóm tắt cơ bản, đầu ra có thể đọc được của bản tóm tắt này hoặc danh sách chi tiết (và rất kỹ thuật) của các gói OpenPGP riêng lẻ.

Thông tin chính cơ bản

Để có một đỉnh ngắn gọn trong tệp khóa OpenPGP, bạn chỉ cần chuyển tên tệp dưới dạng tham số hoặc đường ống trong dữ liệu khóa thông qua STDIN. Nếu không có lệnh nào được thông qua, GnuPG sẽ cố gắng đoán những gì bạn muốn làm - và đối với dữ liệu chính, đây là in một bản tóm tắt trên khóa:

$ 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]

Bằng cách cài đặt --keyid-format 0xlong, ID khóa dài được in thay vì ID khóa ngắn không an toàn :

$ 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]

Cung cấp -vhoặc -vvthậm chí sẽ thêm một số thông tin. Tôi thích in chi tiết gói trong trường hợp này, mặc dù (xem bên dưới).

Đầu ra dễ đọc bằng máy

GnuPG cũng có định dạng đầu ra được phân tách bằng dấu hai chấm, có thể dễ dàng phân tích cú pháp và có định dạng ổn định. Các định dạng được ghi chép lại trong GnuPG doc/DETAILStập tin . Tùy chọn để nhận định dạng này là --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:::

Kể từ GnuPG 2.1.23, gpg: WARNING: no command supplied. Trying to guess what you mean ...cảnh báo có thể được bỏ qua bằng cách sử dụng --import-options show-onlytùy chọn cùng với --importlệnh (tất nhiên điều này cũng hoạt động mà không có --with-colons):

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

Đối với các phiên bản cũ hơn: thông báo cảnh báo được in trên STDERR, vì vậy bạn chỉ cần đọc STDIN để phân tách thông tin chính khỏi cảnh báo.

Chi tiết kỹ thuật: Liệt kê các gói OpenPGP

Không cần cài đặt thêm bất kỳ gói nào, bạn có thể sử dụng gpg --list-packets [file]để xem thông tin về các gói OpenPGP có trong tệp.

$ 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]

Công pgpdump [file]cụ này hoạt động tương tự gpg --list-packetsvà cung cấp một đầu ra tương tự, nhưng giải quyết tất cả các định danh thuật toán thành các biểu diễn có thể đọc được. Nó có sẵn cho tất cả các bản phân phối có liên quan (trên các dẫn xuất Debian, gói được gọi pgpdumpgiống như chính công cụ).

$ 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
Cảm ơn. Tôi chỉ sử dụng "gpg --list-key path-to-key-file" và nhận được những gì tôi muốn thấy: ... băm subpkt 2 len 4 (sig đã tạo 2013 / 02-24) băm subpkt 9 len 4 (khóa hết hạn sau 4y134d23h24m) ... và pgpdump làm cho đầu ra dễ đọc hơn một chút.
Amos Shapira

@AmosShapira Bạn có chắc không? Lệnh đó hoàn toàn không phù hợp với tôi. Có lẽ bạn có ý nghĩa --list-packets?
Jonathan Cross

1
@JonathanCross Thật vậy, đầu ra được mô tả nghe như --list-packets.
Jens Erat

1
Làm thế nào để thoát khỏi điều xấu xí này WARNING: no command suppliedđến stderr? (Điều này ngăn chặn việc sử dụng gpgtrong các tập lệnh đúng cách. Khi nói đến tiền điện tử, cách an toàn duy nhất là coi bất kỳ đầu ra nào cho lỗi nghiêm trọng. Chỉ có cách này bạn sẽ được chuẩn bị khi phát hiện ra những điểm yếu quan trọng mới chỉ in ra thiết bị lỗi chuẩn).
Tino

1
Tôi không biết có một cách dễ dàng xung quanh. Bạn vẫn có thể sử dụng tệp khóa làm khóa, sau đó chạy --list-keys, đại loại như thế gpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keys. Hoặc đơn giản là loại bỏ thông báo cảnh báo, có một loạt các tùy chọn để lọc stderr trong (ba) sh script .
Jens Erat

31

Tôi dường như có thể hòa hợp với chỉ đơn giản là:

$gpg <path_to_file>

Đầu ra nào như thế này:

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

Các op không chỉ định cụ thể thông tin quan trọng nào có liên quan. Đầu ra này là tất cả những gì tôi quan tâm.


30

Để xác minh và liệt kê dấu vân tay của khóa (không nhập trước vào khóa), hãy nhập

gpg --with-fingerprint <filename>

Chỉnh sửa: trên Ubuntu 18.04 (gpg 2.2.4) dấu vân tay không hiển thị với lệnh trên. Sử dụng --with-subkey-fingerprinttùy chọn thay thế

gpg --with-subkey-fingerprint <filename>

4
Đây phải là câu trả lời được chấp nhận imo. Tôi đồng ý với nhận xét-đăng-trả lời của @Skyr.
gertvdijk

2
ACK, điều này rất tốt, không yêu cầu khóa cá nhân cục bộ, v.v. không hiển thị tên khóa ... hoạt động tốt nhất.
Florian Heigl

1
Đối với một số lý do không xác định / không có giấy tờ gpg --with-fingerprintngăn chặn việc in dấu vân tay ở bên cạnh tôi. Ubuntu 18.04gpg (GnuPG) 2.1.18
Tino

Điều tương tự cũng xảy ra với tôi @Tino, bạn có tìm thấy thêm thông tin nào về lý do không?
kjones

@Tino và @kjones Cập nhật câu trả lời với --with-subkey-fingerprintthông tin nên hoạt động trên Ubuntu 18.04
Ronny Andersson

9

Tùy chọn --list-packetsphân tích dữ liệu pgp từ một tệp và xuất cấu trúc của nó - mặc dù theo một cách rất kỹ thuật. Khi phân tích khóa công khai, bạn có thể dễ dàng trích xuất id người dùng và id khóa của chữ ký.

Hãy cảnh giác rằng lệnh này chỉ phân tích định dạng dữ liệu, nó không xác nhận chữ ký hoặc những thứ tương tự.


2

Khi tôi vấp phải câu trả lời này, tôi đang tìm cách để có được một đầu ra dễ dàng phân tích cú pháp. Đối với tôi, tùy chọn --with-colonsđã thực hiện thủ thuật:

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

Tài liệu có thể được tìm thấy ở đây .


Làm thế nào để bạn có được đầu ra YYYY-MM-DD tốt đẹp đó? Tôi không thể tái tạo điều đó với gpg2.x và --with-colons.
MKesper

1

Bạn cũng có thể sử dụng --keyid-formatchuyển đổi để hiển thị ID khóa ngắn hoặc dài:

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

đầu ra nào như thế này (ví dụ từ khóa 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/ ) là một công cụ mà bạn có thể sử dụng để kiểm tra các khối pgp.

Nó không thân thiện với người dùng và khá kỹ thuật, tuy nhiên,

  • nó phân tích khóa công khai hoặc khóa riêng (không có cảnh báo)
  • theo kinh nghiệm của tôi, nó không sửa đổi bất kỳ khóa nào (đôi khi không rõ ràng gpg làm gì sau mui xe, theo kinh nghiệm của tôi)
  • nó in tất cả các gói, cụ thể là các gói của người dùng hiển thị dữ liệu văn bản khác nhau về các phím.
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

tiếc là nó không đọc stdin: /


Tôi pgpdumpđọc stdin. Ví dụ, curl -s https://www.theguardian.com/pgp/PublicKeys/Guardian%20Application-Security.pub.txt | pgpdumphoạt động tốt.
rickhg12h

0

Để lấy ID khóa (8 byte, 16 chữ số hex), đây là lệnh hoạt động với tôi trong GPG 1.4.16, 2.1.18 và 2.2.19:

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

Để có thêm thông tin (ngoài ID khóa):

gpg --list-packets <key.asc

Để có thêm thông tin:

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

Lệnh

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

cũng hoạt động trong cả 3 phiên bản, nhưng trong GPG 1.4.16, nó chỉ in một ID khóa ngắn (4 byte, 8 chữ số hex), do đó, việc xác định các khóa sẽ kém an toàn hơn.

Một số lệnh trong câu trả lời khác (ví dụ gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) không làm việc trong một số phiên bản 3 GPG trên, do đó họ không cầm tay khi nhắm mục tiêu nhiều phiên bản của GPG.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.