Como obtenho a impressão digital de uma chave secreta de PGP protegida por ASCII com gpg?

0

Eu tenho um arquivo secret.asc contendo uma chave secreta / privada PGP / GPG ASCII (ou seja, texto simples e começa com -----BEGIN PGP PRIVATE KEY BLOCK----- ), e gostaria de saber sua impressão digital de chave de 40 caracteres sem importá-la no meu chaveiro GPG. Infelizmente, nem um único comando que eu tentei rendeu essa informação para mim.

O que eu tentei

As seguintes tentativas fracassadas foram executadas no Ubuntu Xenial 16.04.5 com gpg versão 1.4.20 e gpg2 versão 2.1.11. A chave em questão foi criada apenas para fins de experimentação e não será usada em nada, então não me importo se a saída revelar muito sobre isso.

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

Somente ID de chave abreviada, sem impressão digital.

$ 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

Erro.

$ 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

Erro.

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

Isso lista as chaves secretas no meu chaveiro por algum motivo.

$ 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

A única impressão digital encontrada é a da chave de revogação.

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

Mesma saída como acima.

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

Basicamente, a mesma saída que os comandos --dry-run --import -vvvv , apenas sem as linhas gpg: .

    
por jwodder 12.09.2018 / 22:54

1 resposta

0

Como indicado nos comentários, a solução mais simples parece ser primeiro excluir a chave e executar --list-secret-keys no novo arquivo:

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

Irritante, embora a chave querida possa ser escrita para stdout com a opção -o - , nem --secret-keyring - nem --secret-keyring /dev/stdin permitirá que o segundo comando leia a chave de stdin, então combinando os dois comandos em um com um tubo não é uma opção. Além disso, a execução do segundo comando com gpg2 em vez de gpg ainda não fornece a saída desejada.

Uma abordagem um pouco mais elaborada, mas que parece funcionar com ambas as versões de gpg , é importar a chave secreta para um diretório temporário de GPG e, em seguida, listar as chaves particulares da home temp:

$ mkdir -m 0700 tmphome
$ gpg --homedir tmphome --import secret.asc
$ gpg --homedir tmphome --with-fingerprint --list-secret-keys
    
por 13.09.2018 / 22:28

Tags