Вероятно, самый безопасный способ - перечислить пакеты OpenPGP. Вы можете использовать --list-packets
GnuPG или отдельный инструмент pgpdump
. Вы получите только подключи; первичные ключи не упоминаются в зашифрованном сообщении. Если вы хотите запросить первичные ключи, вам придется разрешать их через локальный набор ключей (или, в случае их отсутствия, сервер ключей) отдельно.
Для документа, зашифрованного на двух моих подразделах, вывод выглядит следующим образом (--list-only
поэтому GnuPG не запрашивает парольную фразу, если она доступна):
$ 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
Это будет список всех (известных) получателей. Если используются скрытые получатели, очевидно, что это будет невозможно:
# off=0 ctb=85 tag=1 hlen=3 plen=524
:pubkey enc packet: version 3, algo 1, keyid 0000000000000000
data: [4093 bits]
Аналогичный вывод для 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))
К сожалению, ни у одного из них нет четко определенного, стабильного результата. Опция --with-colon
GnuPG недоступна для дампа пакетов.
GnuPG печатает только ключи других пользователей , а не ваши собственные (без --list-only
, он будет пытаться использовать ключ вместо этого). Независимо от того, является ли это намеренным и желательным поведением, может быть предметом споров, передачи одного -v
/--verbose
кажется достаточным, чтобы также перечислить ваши собственные ключи.
Проблема с первой попыткой "скрыть" ваши секретные ключи - это проблема с оператором --no-default-keyring
. От man gpg2
:
--no-default-keyring
Не добавляйте набор ключей по умолчанию в список ключей. Обратите внимание, что GnuPG не будет работать без каких-либо ключей, поэтому если вы используете эту опцию и не предоставляете альтернативные наборы ключей через --keyring
или --secret-keyring
, то GnuPG по-прежнему будет использовать открытые или секретные наборы ключей по умолчанию.
GnuPG всегда читает открытый ключ. Недостаточно просто передать нечитаемый / пустой секретный набор ключей, вместо этого достаточно только передать открытый набор ключей:
gpg2 --no-default-keyring --keyring /dev/null --list-only