가져 오기없이 gpg 키 세부 사항을 표시하는 방법은 무엇입니까?


131

postgresql apt 저장소 gpg 키의 사본이 있으며 파일에 나오는 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]

을 설정 하면 안전하지 않은 짧은 키 ID 대신 --keyid-format 0xlong긴 키 ID가 인쇄 됩니다 .

$ 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는 또한 콜론으로 구분 된 출력 형식을 가지고 있으며, 쉽게 분석 할 수 있고 안정적인 형식을 가지고 있습니다. 형식은 GnuPG는의에 설명되어 있습니다 doc/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하고 비슷한 결과를 제공하지만 모든 알고리즘 식별자를 읽을 수있는 표현으로 해석합니다. 아마도 모든 관련 배포판에서 사용할 수 있습니다 (데비안 파생 제품에서는 패키지가 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 (2013-02-24 생성 된 서명) hashed subpkt 9 len 4 (key pgpdump는 출력을 좀 더 읽기 쉽게 만듭니다.
Amos Shapira

@AmosShapira 확실합니까? 그 명령은 전혀 효과가 없습니다. 아마 당신은 의미 --list-packets?
Jonathan Cross

1
@JonathanCross 실제로, 설명 된 출력은 다음과 같습니다 --list-packets.
Jens Erat

1
이 못생긴 WARNING: no command suppliedstderr를 제거하는 방법 ? (이것은 gpg스크립트에서 올바르게 사용 하는 것을 방해합니다 . 암호에 관해서는 stderr로 출력을 치명적인 오류로 취급하는 것이 유일한 안전한 방법입니다. stderr로만 인쇄되는 새로운 중요한 약점이 발견되면 준비하십시오.)
Tino

1
나는 쉬운 방법이 있다는 것을 모른다. 그래도 키 파일을 키 링으로 사용하고 다음과 같이 실행할 --list-keysgpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keys있습니다. 또는 단순히 경고 메시지를 무시하십시오 . (ba) sh 스크립트에서 stderr를 필터링하는 옵션이 많이 있습니다 .
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
허용되는 답변 imo 여야합니다. @Skyr의 답변 으로 게시의견에 동의합니다 .
gertvdijk

2
ACK, 이것은 매우 좋습니다, 로컬 개인 키 링 등이 필요하지 않습니다. 키 이름을 표시하지 않습니다 ... 가장 잘 작동합니다.
Florian Heigl

1
알 수 없거나 문서화되지 않은 이유로 인해 gpg --with-fingerprint내 지문이 인쇄 되지 않습니다 . 우분투 18.04gpg (GnuPG) 2.1.18
티노

@Tino에서도 같은 일이 일어나고 있습니다. 이유에 대한 추가 정보를 찾았습니까?
kjones

@Tino and @kjones --with-subkey-fingerprint우분투 18.04에서 작동하는 정보로 답변을 업데이트했습니다
Ronny Andersson

9

이 옵션 --list-packets은 파일에서 pgp 데이터를 구문 분석하고 매우 기술적 인 방식으로 구조를 출력합니다. 공개 키를 구문 분석 할 때 서명의 사용자 ID 및 키 ID를 쉽게 추출 할 수 있습니다.

이 명령 은 데이터 형식 구문 분석하고 서명 또는 이와 유사한 사항은 검증하지 않습니다.


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와 --with-colons로는 재현 할 수 없습니다.
MKesper

1

--keyid-format스위치를 사용 하여 짧거나 긴 키 ID를 표시 할 수도 있습니다 .

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

다음과 같이 출력됩니다 (PostgreSQL CentOS repo 키의 예).

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

키 ID (8 바이트, 16 진수 16 자)를 얻으려면 GPG 1.4.16, 2.1.18 및 2.2.19에서 저에게 효과적이었습니다.

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

키 ID 외에 추가 정보를 얻으려면 :

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 16 진수) 키 ID 만 인쇄하므로 키를 식별하는 것이 안전하지 않습니다.

다른 답변에서 일부 명령 (예를 들면 gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) GPG의 여러 버전을 대상으로 할 때, 따라서 그들은 휴대용없는, 위의 3 개 GPG 버전의 일부 작업을하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.