Як відобразити деталі gpg, не імпортуючи їх?


131

У мене є копія ключа gpg для сховища postgresql apt і я хотів би переглянути деталі ключа gpg так, як він є у файлі. Чи можливо це без імпортування його в брелок?

Відповіді:


149

Існує кілька рівнів деталізації, які ви можете отримати при перегляді ключових даних 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файлі . Можливість отримання цього формату є --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 ...попередження можна опустити, використовуючи --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]

1
Дякую. Я тільки що використав "gpg --list-keys шлях-до-ключа-файлу" і отримав те, що я хотів побачити: ... хеш-код subpkt 2 len 4 (sig створено 2013-02-24) хеш-код subpkt 9 len 4 (ключ закінчується через 4y134d23h24m) ... і pgpdump робить результат трохи читабельнішим.
Амос Шапіра

@AmosShapira Ви впевнені? Ця команда для мене взагалі не працює. Може, ти мав на увазі --list-packets?
Джонатан Хрест

1
@JonathanCross Дійсно, описаний вихід звучить як --list-packets.
Єнс Ерат

1
Як позбутися цього негарного WARNING: no command suppliedдо жорсткішого? (Це перешкоджає gpgправильному використанню в скриптах. Якщо мова заходить про криптовалюту, єдиний безпечний спосіб - це трактувати будь-який вихід на stderr як фатальну помилку. Тільки так ви будете готові, коли будуть виявлені нові важливі слабкі місця, які друкуються лише на stderr).
Тіно

1
Я не знаю, що існує простий шлях. Ви все ще можете використовувати ключ файлів як брелок, а потім запустити --list-keysщось подібне gpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keys. Або просто відкиньте попереджувальне повідомлення, є купа варіантів відфільтрувати stderr у (ba) sh сценаріях .
Єнс Ерат

31

Я, здається, зможу просто ужитися:

$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

Зокрема, не вказано, яка ключова інформація є релевантною. Цей результат - це все, що мені важливо.


30

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

gpg --with-fingerprint <filename>

Редагувати: в Ubuntu 18.04 (gpg 2.2.4) відбиток пальця не відображається із вказаною вище командою. Використовуйте --with-subkey-fingerprintнатомість опцію

gpg --with-subkey-fingerprint <filename>

4
Це повинна бути прийнята відповідь imo. Я погоджуюся з коментарем, опублікованим як відповідь від @Skyr.
gertvdijk

2
ACK, це дуже добре, не вимагає місцевих особистих брелоків і т.д.
Флоріан Хейгл

1
З якоїсь невідомої / незадокументованої причини gpg --with-fingerprintпригнічує друк відбитків у мене. Ubuntu 18.04gpg (GnuPG) 2.1.18
Тіно

Те ж саме відбувається і в мене @Tino, ти знайшов додаткову інформацію про те, чому?
kjones

@Tino та @kjones Оновили відповідь --with-subkey-fingerprintінформацією, яка повинна працювати на Ubuntu 18.04
Ронні Андерссон

9

Опція --list-packetsаналізує дані pgp з файлу та виводить його структуру - проте дуже технічним способом. Розбираючи відкритий ключ, ви можете легко витягнути ідентифікатори користувача та ключові ідентифікатори підписів.

Будьте обережні, що ця команда аналізує лише формат даних, вона не перевіряє підписи чи подібні речі.


2

Коли я натрапив на цю відповідь, я шукав спосіб отримати вихід, який легко проаналізувати. Для мене варіант --with-colonsзробив свою справу:

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

Документацію можна знайти тут .


Як ви отримуєте гарний вихід YYYY-MM-DD? Я не можу це відтворити за допомогою gpg2.x та --wth-colons.
MKesper

1

Ви також можете використовувати --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 <pgsqlrpms-hackers@pgfoundry.org>                      │                     When  using --refresh-keys, if the key in question has a preferred keyserver URL, then use that
sub   elg2048/D43F1AF8 2008-01-08 [E]

0

pgpdump( https://www.lirnberger.com/tools/pgpdump/ ) - це інструмент, який можна використовувати для огляду блоків pgp.

Це не є зручним для користувачів і досить технічним, однак,

  • він аналізує відкриті або приватні ключі (без попередження)
  • він не змінює жодної брелоки (іноді не так зрозуміло, що gpg робить за кришкою, на мій досвід)
  • він друкує всі пакети, зокрема пакети Userid, де відображаються різні текстові дані про клавіші.
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: /


Мої pgpdumpчитає stdin. Наприклад, curl -s https://www.theguardian.com/pgp/PublicKeys/Guardian%20Application-Security.pub.txt | pgpdumpпрекрасно працює.
rickhg12hs

0

Щоб отримати ключові ідентифікатори (8 байт, 16 шістнадцяткових цифр), це команда, яка працювала для мене в GPG 1.4.16, 2.1.18 та 2.2.19:

gpg --list-packets <key.asc | awk '$1=="keyid:"{print$2}'

Щоб отримати додаткові відомості (крім ідентифікатора ключа):

gpg --list-packets <key.asc

Щоб отримати ще більше інформації:

gpg --list-packets -vvv --debug 0x2 <key.asc

Команда

gpg --dry-run --import <key.asc

також працює у всіх 3 версіях, але в GPG 1.4.16 він друкує лише короткий ідентифікатор ключа (4 байти, 8 шістнадцяткових цифр), тож ідентифікувати ключі менш безпечно.

Деякі команди в інших відповідях (наприклад gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) не працюють в деяких версіях 3 GPG вище, таким чином , вони не є переносними при орієнтації кілька версій GPG.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.