У меня есть копия ключа gpg postgresql apt repository и хотелось бы просмотреть детали ключа gpg, как он есть в файле. Возможно ли это, не импортируя его в брелок?
Как отобразить данные ключа gpg без импорта?
Ответ 1
При просмотре ключевых данных 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 <[email protected]>
uid Jens Erat <[email protected]>
uid Jens Erat <[email protected]>
uid Jens Erat <[email protected]>
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 <[email protected]>
uid Jens Erat <[email protected]>
uid Jens Erat <[email protected]>
uid Jens Erat <[email protected]>
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
. Опция для получения этого формата --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 <[email protected]>:
uid:::::::::Jens Erat <[email protected]>:
uid:::::::::Jens Erat <[email protected]>:
uid:::::::::Jens Erat <[email protected]>:
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 ...
может быть опущено с помощью опции --import-options show-only
вместе с командой --import
(это также работает без --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]
Инструмент pgpdump [file]
работает аналогично gpg --list-packets
и предоставляет аналогичный вывод, но решает все эти идентификаторы алгоритма для читаемых представлений. Он доступен для, вероятно, всех релевантных дистрибутивов (в деривациях 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]
Ответ 2
Кажется, я могу просто согласиться:
$gpg <path_to_file>
Какие выходы выглядят следующим образом:
$ gpg /tmp/keys/something.asc
pub 1024D/560C6C26 2014-11-26 Something <[email protected]>
sub 2048g/0C1ACCA6 2014-11-26
Операция не указала, в частности, какая ключевая информация имеет значение. Этот результат все, о чем я забочусь.
Ответ 3
Чтобы проверить и отобразить отпечаток ключа (без предварительного импорта в связку ключей), введите
gpg --with-fingerprint <filename>
Редактировать: в Ubuntu 18.04 (gpg 2.2.4) fingerprint не отображается с помощью приведенной выше команды. Вместо этого используйте опцию --with-subkey-fingerprint
gpg --with-subkey-fingerprint <filename>
Ответ 4
Параметр --list-packets
анализирует данные pgp из файла и выводит его структуру - очень техничным способом. При анализе открытого ключа вы можете легко извлечь идентификаторы пользователя и ключевые идентификаторы подписей.
Будьте осторожны, что эта команда только анализирует формат данных, не проверяет подписи или подобные вещи.
Ответ 5
Когда я наткнулся на этот ответ, я искал способ получить результат, который легко разобрать. Для меня вариант --with-colons
сделал трюк:
$ gpg --with-colons file
sec::4096:1:AAAAAAAAAAAAAAAA:YYYY-MM-DD::::Name (comment) email
ssb::4096:1:BBBBBBBBBBBBBBBB:YYYY-MM-DD::::
Документацию можно найти здесь.
Ответ 6
Вы также можете использовать --keyid-format
для отображения короткого или длинного идентификатора ключа:
$ gpg2 -n --with-fingerprint --keyid-format=short --show-keys <filename>
что выводит вот так (пример из ключа репозитория PostgreSQL CentOS):
pub dsa1024/442DF0F8 2008-01-08 [SCA] │
Key fingerprint = 68C9 E2B9 1A37 D136 FE74 D176 1F16 D2E1 442D F0F8 │ honor-keyserver-url
uid PostgreSQL RPM Building Project <[email protected]> │ When using --refresh-keys, if the key in question has a preferred keyserver URL, then use that
sub elg2048/D43F1AF8 2008-01-08 [E]
Ответ 7
pgpdump
(https://www.lirnberger.com/tools/pgpdump/) - это инструмент, который вы можете использовать для проверки блоков pgp.
Это не удобно для пользователя, и довольно технический, однако,
- анализирует открытый или закрытый ключи (без предупреждения)
- он не меняет никаких ключей (иногда, по моему опыту, не очень понятно, что делает gpg за капотом)
- он печатает все пакеты, в частности пакеты идентификаторов пользователей, которые показывают различные текстовые данные о ключах.
pgpdump -p test.asc
New: Secret Key Packet(tag 5)(920 bytes)
Ver 4 - new
Public key creation time - Fri May 24 00:33:48 CEST 2019
Pub alg - RSA Encrypt or Sign(pub 1)
RSA n(2048 bits) - ...
RSA e(17 bits) - ...
RSA d(2048 bits) - ...
RSA p(1024 bits) - ...
RSA q(1024 bits) - ...
RSA u(1020 bits) - ...
Checksum - 49 2f
New: User ID Packet(tag 13)(18 bytes)
User ID - test (test) <tset>
New: Signature Packet(tag 2)(287 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 - SHA256(hash 8)
Hashed Sub: signature creation time(sub 2)(4 bytes)
Time - Fri May 24 00:33:49 CEST 2019
Hashed Sub: issuer key ID(sub 16)(8 bytes)
Key ID - 0x396D5E4A2E92865F
Hashed Sub: key flags(sub 27)(1 bytes)
Flag - This key may be used to certify other keys
Flag - This key may be used to sign data
Hash left 2 bytes - 74 7a
RSA m^d mod n(2048 bits) - ...
-> PKCS-1
к сожалению это не читает stdin:/