gpg를 사용하여 ASCII로 보호되는 PGP 키의 지문을 얻는 방법은 무엇입니까?

gpg를 사용하여 ASCII로 보호되는 PGP 키의 지문을 얻는 방법은 무엇입니까?

secret.ascASCII 장갑(즉, 일반 텍스트로 시작하고 으로 시작하는) PGP/GPG 비밀/개인 키가 포함된 파일 이 있는데 -----BEGIN PGP PRIVATE KEY BLOCK-----GPG 키링으로 가져오지 않고 해당 파일의 40자 키 지문을 알고 싶습니다. 불행하게도 내가 시도한 명령 중 어느 것도 이 정보를 제공하지 못했습니다.

내가 시도한 것

다음과 같은 실패한 시도는 Ubuntu Xenial 16.04.5, gpg 버전 1.4.20 및 gpg2 버전 2.1.11에서 실행되었습니다. 문제의 키는 실험 목적으로만 생성되었으며 어떤 용도로도 사용되지 않으므로 출력 결과에 대해 너무 많은 내용이 공개되어도 상관없습니다.

$ gpg --with-fingerprint secret.asc
sec  2048R/161722B3 2018-09-12 
uid                            Testing <[email protected]>

짧은 키 ID만 있고 지문은 없습니다.

$ gpg2 --with-fingerprint secret.asc
gpg: DBG: FIXME: merging secret key blocks is not anymore available
gpg: DBG: FIXME: No way to print secret key packets here

실수.

$ gpg --with-fingerprint --no-default-keyring --secret-keyring ./secret.asc --list-secret-keys
gpg: [don't know]: invalid packet (ctb=2d)
gpg: keydb_search_first failed: invalid packet

실수.

$ gpg2 --with-fingerprint --no-default-keyring --secret-keyring ./secret.asc --list-secret-keys
/home/jwodder/.gnupg/pubring.gpg
--------------------------------
...

어떤 이유로 이것은 내 열쇠 고리의 비밀 키를 나열합니다.

$ gpg --dry-run --import -vvvv secret.asc
gpg: using character set `utf-8'
gpg: armor: BEGIN PGP PRIVATE KEY BLOCK
gpg: armor header: Version: GnuPG v1
:secret key packet:
        version 4, algo 1, created 1536783228, expires 0
        skey[0]: [2048 bits]
        skey[1]: [17 bits]
        skey[2]: [2047 bits]
        skey[3]: [1024 bits]
        skey[4]: [1024 bits]
        skey[5]: [1021 bits]
        checksum: 386f
        keyid: 07C0845B161722B3
:signature packet: algo 1, keyid 07C0845B161722B3
        version 4, created 1536783228, md5len 0, sigclass 0x1f
        digest algo 2, begin of digest b6 12
        hashed subpkt 2 len 4 (sig created 2018-09-12)
        hashed subpkt 12 len 22 (revocation key: c=80 a=1 f=9F3C2033494B382BEF691BB403BB6744793721A3)
        hashed subpkt 7 len 1 (not revocable)
        subpkt 16 len 8 (issuer key ID 07C0845B161722B3)
        data: [2048 bits]
:user ID packet: "Testing <[email protected]>"
:signature packet: algo 1, keyid 07C0845B161722B3
        version 4, created 1536783228, md5len 0, sigclass 0x13
        digest algo 2, begin of digest 33 ee
        hashed subpkt 2 len 4 (sig created 2018-09-12)
        hashed subpkt 27 len 1 (key flags: 03)
        hashed subpkt 9 len 4 (key expires after 32d3h46m)
        hashed subpkt 11 len 5 (pref-sym-algos: 9 8 7 3 2)
        hashed subpkt 21 len 5 (pref-hash-algos: 8 2 9 10 11)
        hashed subpkt 22 len 3 (pref-zip-algos: 2 3 1)
        hashed subpkt 30 len 1 (features: 01)
        hashed subpkt 23 len 1 (key server preferences: 80)
        subpkt 16 len 8 (issuer key ID 07C0845B161722B3)
        data: [2046 bits]
gpg: sec  2048R/161722B3 2018-09-12   Testing <[email protected]>
gpg: key 161722B3: secret key imported
gpg: pub  2048R/161722B3 2018-09-12  Testing <[email protected]>
gpg: writing to `/home/jwodder/.gnupg/pubring.gpg'
gpg: using PGP trust model
gpg: key 793721A3: accepted as trusted key
gpg: key 161722B3: public key "[User ID not found]" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg:       secret keys read: 1
gpg:   secret keys imported: 1

찾을 수 있는 유일한 지문은 해지 키의 지문입니다.

$ gpg2 --dry-run --import -vvvv secret.asc

위와 동일한 출력.

$ gpg --list-packets secret.asc
$ gpg2 --list-packets secret.asc

--dry-run --import -vvvv기본적으로 줄 없이 command 와 동일한 출력입니다 gpg:.

답변1

현재 파이프라인에서 이 작업을 수행할 수 있으므로 GnuPG의 새 버전에서는 변경될 수 있습니다.

$ gpg --with-colons --import-options show-only --import --fingerprint < secret.asc | awk -F: '$1 == "fpr" {print $10;}'

주요 게임 체인저는 import-options다음과 같은 옵션입니다.가짜 수입. 우리는 파일을 가져올 때처럼 단순히 파일을 처리하고 있지만, 그렇지 않습니다.

옵션 --with-colons보증안정적인그리고기계 분석 가능awk이전 섹션에서 사용한 형식 입니다.

awk지문이 있는 행의 열 10을 인쇄하세요( 로 시작 fpr).

답변2

주석에 표시된 대로 가장 간단한 해결책은 먼저 키를 삭제한 다음 --list-secret-keys새 파일에서 실행하는 것 같습니다.

$ gpg --dearmor secret.asc  # Creates secret.asc.gpg
$ gpg --with-fingerprint --no-default-keyring --secret-keyring ./secret.asc.gpg --list-secret-keys

짜증나게도 이 옵션을 사용하여 삭제된 키를 표준 출력에 쓸 수 있지만 두 번째 명령이 표준 입력에서 키를 읽는 것을 허용 하지 -o -않으므로 두 명령을 하나로 파이프하는 것은 옵션이 아닙니다. 또한 두 번째 명령을 대신 실행해도 여전히 원하는 출력이 제공되지 않습니다.--secret-keyring ---secret-keyring /dev/stdingpg2gpg

약간 더 복잡한 방법이지만 두 버전 모두에서 작동하는 것으로 보이는 방법은 gpg비밀 키를 임시 GPG 홈 디렉터리로 가져온 다음 임시 홈 디렉터리에 대한 개인 키를 나열하는 것입니다.

$ mkdir -m 0700 tmphome
$ gpg --homedir tmphome --import secret.asc
$ gpg --homedir tmphome --with-fingerprint --list-secret-keys

답변3

GPG 2.2.8부터--show-keys(2018년 중반 출시) 키를 가져오지 않고 표시하는 옵션이 있습니다 .바로가기로 제공--import --import-options show-only.

파일의 키를 표시하려면 다음을 수행하십시오 secret.asc.

$ gpg --show-keys secret.asc

다양한 지문 형식:

$ gpg --show-keys --with-fingerprint secret.asc

관련 정보