A maneira mais segura é listar os pacotes OpenPGP. Você pode usar o comando --list-packets
do GnuPG ou a ferramenta separada pgpdump
. Você só terá subchaves; as chaves primárias não são referenciadas na mensagem criptografada. Se você quiser consultar as chaves primárias, você terá que resolvê-las através do chaveiro local (ou no caso de estarem ausentes, um servidor de chaves) separadamente.
Para um documento criptografado em duas subchaves minhas, a saída é assim ( --list-only
adicionado, então o GnuPG não consulta a senha, se disponível):
$ gpg2 --list-only --list-packets < encrypted.gpg
# off=0 ctb=85 tag=1 hlen=3 plen=524
:pubkey enc packet: version 3, algo 1, keyid CC73B287A4388025
data: [4090 bits]
# off=527 ctb=85 tag=1 hlen=3 plen=268
:pubkey enc packet: version 3, algo 1, keyid 5C88F5D83E2554DF
data: [2048 bits]
# off=798 ctb=d2 tag=18 hlen=2 plen=63 new-ctb
:encrypted data packet:
length: 63
mdc_method: 2
Isso listará todos os destinatários (conhecidos). Se destinatários ocultos forem usados, obviamente isso não será possível:
# off=0 ctb=85 tag=1 hlen=3 plen=524
:pubkey enc packet: version 3, algo 1, keyid 0000000000000000
data: [4093 bits]
Saída semelhante para pgpdump
:
Old: Public-Key Encrypted Session Key Packet(tag 1)(524 bytes)
New version(3)
Key ID - 0x0000000000000000
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(4096 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
Old: Public-Key Encrypted Session Key Packet(tag 1)(268 bytes)
New version(3)
Key ID - 0x5C88F5D83E2554DF
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(2047 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
New: Symmetrically Encrypted and MDC Packet(tag 18)(63 bytes)
Ver 1
Encrypted data [sym alg is specified in pub-key encrypted session key]
(plain text + MDC SHA1(20 bytes))
Infelizmente, nenhum deles tem saída estável e bem definida. A opção --with-colon
do GnuPG não está disponível para pacotes de despejo.
O GnuPG só imprime as chaves outras , não as suas (sem --list-only
, ele tentaria usar a chave). Se esse comportamento é intencional e desejável pode ser objeto de debate, passar um único -v
/ --verbose
parece ser suficiente para listar suas próprias chaves.
O problema com sua primeira tentativa ao tentar "ocultar" suas chaves secretas é um problema com a instrução --no-default-keyring
. De man gpg2
:
--no-default-keyring
Do not add the default keyrings to the list of keyrings. Note that GnuPG will not operate without any keyrings, so if you use this option and do not provide alternate keyrings via
--keyring
or--secret-keyring
, then GnuPG will still use the default public or secret keyrings.
O GnuPG sempre lê o chaveiro público. Apenas passar um chaveiro secreto ilegível / vazio não é suficiente, em vez disso apenas passar um chaveiro público é bom:
gpg2 --no-default-keyring --keyring /dev/null --list-only