Как отобразить ключевые данные gpg без импорта?


У меня есть копия ключа GPG репозитория postgresql apt и я хотел бы просмотреть детали ключа gpg, как он входит в файл. Возможно ли это без импорта его в брелок?

5 85

5 ответов:

есть несколько уровней детализации, которые вы можете получить при просмотре ключевых данных 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]

установка --keyid-format 0xlong, длинные идентификаторы ключей печатаются вместо небезопасные короткие идентификаторы ключей:

$ 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 file. Возможность получить этот формат --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 ... предупреждение можно опустить с помощью вместе с (это также работает без --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]

The pgpdump [file] инструмент работает аналогично gpg --list-packets и предоставляет аналогичный вывод, но разрешает все эти идентификаторы алгоритмов для читаемых представлений. Он доступен, вероятно, для всех соответствующих дистрибутивов (on Производные Debian, пакет называется 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]

Я, кажется, в состоянии ладить с просто:

$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

ОП не уточнил, в частности, какая ключевая информация имеет значение. Этот выход-все, что меня волнует.

чтобы проверить и перечислить отпечаток ключа (не импортируя его сначала в брелок), введите

gpg --with-fingerprint <filename>

параметр --list-packets анализирует данные pgp из файла и выводит его структуру-очень техническим способом. При анализе открытого ключа вы можете легко извлечь идентификаторы пользователей и идентификаторы ключей подписей.

будьте осторожны, что эта команда только анализирует формат данных, он не выполняет проверку подписей или подобных вещей.

когда я наткнулся на этот ответ, я искал способ получить вывод, который легко разобрать. Для меня вариант --with-colons сделал свое дело:

$ gpg --with-colons file
sec::4096:1:AAAAAAAAAAAAAAAA:YYYY-MM-DD::::Name (comment) email
ssb::4096:1:BBBBBBBBBBBBBBBB:YYYY-MM-DD::::

документация может быть найдена здесь.