Gpg anahtar ayrıntılarını içe aktarmadan nasıl görüntüleyebilirim?


131

Postgresql apt repository gpg anahtarının bir kopyasına sahibim ve dosyada geldiği gibi gpg anahtarının ayrıntılarını görmek istiyorum. Anahtarlığa ithal etmeden bu mümkün müdür?

Yanıtlar:


149

OpenPGP anahtar verilerine bakarken elde edebileceğiniz birkaç ayrıntı düzeyi vardır: temel bir özet, bu özetin makine tarafından okunabilir bir çıktısı veya ayrı ayrı OpenPGP paketlerinin ayrıntılı (ve çok teknik) bir listesi.

Temel Anahtar Bilgiler

Bir OpenPGP anahtar dosyasında kısa bir zirve için, dosya adını STDIN aracılığıyla anahtar verilerde parametre veya boru olarak kolayca iletebilirsiniz. Herhangi bir komut geçilmezse, GnuPG ne yapmak istediğinizi tahmin etmeye çalışır - ve anahtar veriler için bu, anahtara bir özet yazdırır:

$ 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]

Ayarına göre --keyid-format 0xlong, uzun anahtar kimlikleri basılır yerine güvensiz kısa anahtar kimlikleri :

$ 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]

Sağlama -v-vvDaha fazla bilgi veya hatta ekleyecektir. Yine de bu durumda paket ayrıntılarını yazdırmayı tercih ederim (aşağıya bakın).

Makine Tarafından Okunabilen Çıktı

GnuPG ayrıca, kolayca ayrıştırılabilen ve kararlı bir biçime sahip iki nokta üst üste ile ayrılmış bir çıktı biçimine sahiptir. Biçimi GnuPG belgelenmiştir doc/DETAILSdosyası . Bu biçimi alma seçeneği --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'ten beri gpg: WARNING: no command supplied. Trying to guess what you mean ..., --import-options show-onlyseçeneği --importkomutla birlikte kullanarak uyarı atlanabilir (bu --with-colons, elbette olmadan da çalışır ):

$ gpg --with-colons --import-options show-only --import a4ff2279
[snip]

Daha eski sürümler için: uyarı mesajı STDERR üzerinde basılıdır, bu nedenle temel bilgileri uyarıdan ayırmak için STDIN'i okuyabilirsiniz.

Teknik Ayrıntılar: OpenPGP Paketlerini Listeleme

Başka paket yüklemeden gpg --list-packets [file], dosyanın içerdiği OpenPGP paketleri hakkındaki bilgileri görüntülemek için kullanabilirsiniz .

$ 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]Aracı benzer çalışır gpg --list-packetsve benzer bir çıkış sağlar, ancak okunabilir temsillerin tüm bu algoritma tanımlayıcıları giderir. Muhtemelen tüm ilgili dağıtımlar için mevcuttur (Debian türevlerinde paket, pgpdumparacın kendisi gibi adlandırılır ).

$ 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
Teşekkürler. "Gpg --list-keys path-to-key-file" kullandım ve görmek istediğim şeyi aldım: ... hashed subpkt 2 len 4 (sig oluşturuldu 2013-02-24) hashed subpkt 9 len 4 (anahtar 4y134d23h24m sonra sona eriyor) ... ve pgpdump çıktının biraz daha okunabilir olmasını sağlar.
Amos Shapira

@AmosShapira Emin misin? Bu komut benim için hiç çalışmıyor. Belki demek istedin --list-packets?
Jonathan Cross

1
@JonathanCross Aslında, açıklanan çıktı gibi geliyor --list-packets.
Jens Erat

1
Bu çirkin WARNING: no command suppliedstderr'den nasıl kurtulur ? (Bu gpg, komut dosyalarında düzgün şekilde kullanılmasını engeller . Kripto söz konusu olduğunda tek güvenli yol, stderr'e yapılan herhangi bir çıktıyı ölümcül hata olarak ele almaktır. Ancak bu şekilde, yalnızca stderr'e yazdıran yeni önemli zayıflıklar keşfedildiğinde hazırlıklı olursunuz).
Tino

1
Bunun kolay bir yolu olduğunun farkında değilim. Hala çalıştırmak sonra olsa anahtarlık ve gibi anahtar dosyasını kullanabilirsiniz --list-keys, gibi bir şey gpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keys. Veya basitçe uyarı mesajını atın, (ba) sh komut dosyalarındaki stderr'i filtrelemek için bir dizi seçenek vardır .
Jens Erat

31

Görünüşe göre basitçe anlaşabilirim:

$gpg <path_to_file>

Bunun gibi çıktılar:

$ gpg /tmp/keys/something.asc 
  pub  1024D/560C6C26 2014-11-26 Something <something@none.org>
  sub  2048g/0C1ACCA6 2014-11-26

Operasyon, özellikle hangi önemli bilgilerin alakalı olduğunu belirtmedi. Tek umursadığım çıktı bu.


30

Anahtarın parmak izini doğrulamak ve listelemek için (önce anahtarlığa aktarmadan),

gpg --with-fingerprint <filename>

Düzenleme: Ubuntu 18.04 (gpg 2.2.4) üzerinde parmak izi yukarıdaki komutla gösterilmez. Kullanım --with-subkey-fingerprintyerine seçeneği

gpg --with-subkey-fingerprint <filename>

4
Bu kabul edilen cevap imo olmalıdır. @Skyr tarafından yanıt olarak gönderilen yoruma katılıyorum .
gertvdijk

2
ACK, bu çok iyi, yerel kişisel anahtarlık gerektirmez vb. Anahtar adını gösterir ... en iyi sonucu verir.
Florian Heigl

1
Bilinmeyen / belgelenmemiş bir nedenden ötürü, gpg --with-fingerprintparmak izlerini yanımda basmayı bastırıyor. Ubuntu 18.04gpg (GnuPG) 2.1.18
Tino

Benim için de aynı şey oluyor @Tino, neden hakkında ek bilgi buldun mu?
kjones

@Tino ve @kjones Yanıtı --with-subkey-fingerprint, Ubuntu 18.04'te çalışması gereken bilgilerle güncelledi
Ronny Andersson

9

Seçenek --list-packets , bir dosyadaki pgp verilerini ayrıştırır ve yapısını, çok teknik bir şekilde çıkarır. Bir genel anahtarı ayrıştırırken, kullanıcı kimliklerini ve imzaların anahtar kimliklerini kolayca çıkarabilirsiniz.

Bu komutun yalnızca veri biçimini ayrıştırdığına dikkat edin, imzaların veya benzer şeylerin doğrulanması yoktur.


2

Bu cevaba rastladığımda, ayrıştırılması kolay bir çıktı elde etmenin bir yolunu arıyordum. Benim için seçenek --with-colonshile yaptı:

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

Belgeler burada bulunabilir .


Bu güzel YYYY-AA-GG çıktısını nasıl elde edersiniz? Bunu gpg2.x ve --with-colons ile yeniden oluşturamıyorum.
MKesper

1

--keyid-formatKısa veya uzun anahtar kimliğini göstermek için anahtarı da kullanabilirsiniz :

$ gpg2 -n --with-fingerprint --keyid-format=short --show-keys <filename>

bunun gibi çıktılar (PostgreSQL CentOS repo anahtarından örnek):

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 bloklarını incelemek için kullanabileceğiniz bir araçtır.

Kullanıcı dostu değildir ve oldukça tekniktir, ancak,

  • genel veya özel anahtarları ayrıştırır (uyarı vermeden)
  • herhangi bir anahtarlığı değiştirmez (bazen tecrübelerime göre gpg'nin kaputun arkasında ne yaptığı çok net değildir)
  • tüm paketleri, özellikle de anahtarlar hakkındaki çeşitli metin verilerini gösteren kullanıcı kimliği paketlerini yazdırır.
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

maalesef stdin okumuyor: /


Benim pgpdumpokur stdin. Örneğin, iyi curl -s https://www.theguardian.com/pgp/PublicKeys/Guardian%20Application-Security.pub.txt | pgpdumpçalışıyor.
rickhg12hs

0

Anahtar kimliklerini (8 bayt, 16 onaltılık basamak) almak için bu, GPG 1.4.16, 2.1.18 ve 2.2.19'da benim için çalışan komuttur:

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

Daha fazla bilgi almak için (anahtar kimliğine ek olarak):

gpg --list-packets <key.asc

Daha fazla bilgi almak için:

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

Komuta

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

ayrıca 3 sürümün tamamında da çalışır, ancak GPG 1.4.16'da yalnızca kısa (4 bayt, 8 onaltılık basamak) bir anahtar kimliği yazdırır, bu nedenle anahtarları tanımlamak daha az güvenlidir.

Diğer yanıtlar Bazı komutları (örn gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) GPG birden fazla sürümünü hedeflerken böylece taşınabilir değildir, yukarıdaki 3 GPG versiyonlarının bazı iş yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.