pgpdump
山本和彦
pgpdumpは、OpenPGP (RFC 9580、RFC 4880)や PGP version 2 (RFC 1991)のデータ構造を可視化するツールです。RFC 9980 の耐量子暗号アルゴリズムや、GnuPG が生成する LibrePGP (draft-koch-librepgp) の拡張にも対応しています。
pgpdump の動作
PGP は、バイナリ・ファイルか(MIME の Base64 と等価な) ASCII armor ファイルを生成します。以下が、ASCII armor ファイルの例です(sig.pgp と呼びましょう)。これは RFC 9580 の付録 A.7 にある署名付きメッセージの例です。
% cat sig.pgp
-----BEGIN PGP MESSAGE-----
xEYGAQobIHZJX1AhiJD39eLuPBgiUU9wUA9VHYblySHkBONKU/usyxhsTwYJppfk
1S36bHIrDB8eJ8GKVnCPZSXsJ7rZrMkBy0p1AAAAAABXaGF0IHdlIG5lZWQgZnJv
bSB0aGUgZ3JvY2VyeSBzdG9yZToKCi0gdG9mdQotIHZlZ2V0YWJsZXMKLSBub29k
bGVzCsKYBgEbCgAAACkFgmOYo2MiIQbLGGxPBgmml+TVLfpscisMHx4nwYpWcI9l
JewnutmsyQAAAABpNiB2SV9QIYiQ9/Xi7jwYIlFPcFAPVR2G5ckh5ATjSlP7rCfQ
b7gKqPxbyxbhljGygHQPnqau1eBzrQD5QVplPEDnemrnfmkrpx0GmhCfokxYz9jj
FtCgazStmsuOXF9SFQE=
-----END PGP MESSAGE-----
このままでは、この内部のデータ構造を理解するのは困難です。pgpdump は、これを以下のように可視化します。
% pgpdump sig.pgp
New: One-Pass Signature Packet(tag 4)(70 bytes)
Latest version(6)
Sig type - Signature of a canonical text document(0x01).
Hash alg - SHA512(hash 10)
Pub alg - Ed25519(pub 27)
Salt - 76 49 5f 50 21 88 90 f7 f5 e2 ee 3c 18 22 51 4f 70 50 0f 55 1d 86 e5 c9 21 e4 04 e3 4a 53 fb ac
Fingerprint - cb 18 6c 4f 06 09 a6 97 e4 d5 2d fa 6c 72 2b 0c 1f 1e 27 c1 8a 56 70 8f 65 25 ec 27 ba d9 ac c9
Next packet - other than one pass signature
New: Literal Data Packet(tag 11)(74 bytes)
Packet data format - UTF-8 text
Filename -
Creation time - Thu Jan 1 09:00:00 JST 1970
Literal - ...
New: Signature Packet(tag 2)(152 bytes)
Ver 6 - latest
Sig type - Signature of a canonical text document(0x01).
Pub alg - Ed25519(pub 27)
Hash alg - SHA512(hash 10)
Hashed Sub: signature creation time(sub 2)(critical)(4 bytes)
Time - Wed Dec 14 01:08:03 JST 2022
Hashed Sub: issuer fingerprint(sub 33)(33 bytes)
v6 - Fingerprint - cb 18 6c 4f 06 09 a6 97 e4 d5 2d fa 6c 72 2b 0c 1f 1e 27 c1 8a 56 70 8f 65 25 ec 27 ba d9 ac c9
Hash left 2 bytes - 69 36
Salt - 76 49 5f 50 21 88 90 f7 f5 e2 ee 3c 18 22 51 4f 70 50 0f 55 1d 86 e5 c9 21 e4 04 e3 4a 53 fb ac
Ed25519 signature(64 bytes) - ...
pgpdump の入手方法
- pgpdump の初リリースは 1998年12月です。
- 2026年9月25日現在の最新バージョンは 0.38 です。ソースのダウンロード。
- Git リポジトリ を github で公開しています。
PGP のデータ構造の歴史
- Simson Garfinkel が PGP を詳細に解説した O’Reilly の本には次のように書かれています。
- Zimmermann はまず、暗号鍵、暗号文、および署名のデータ構造について論文を書いた。この論文は「IEEE Computer」に掲載された。
- これは、おそらく次の論文のことでしょう:
- Philip Zimmermann, “A Proposed Standard Format for RSA Cryptosystems”, IEEE Computer 19(9), pp 21-34 (1986).
- 当初、PGP 2 のデータ構造は、“doc/pgformat.doc” に書かれていました。
- PGP 2 の正式な書式(RFC 1991) は1996年8月に公開されました。
- OpenPGP の正式な書式(RFC 2440)は、1998年11月に公開されました。
- RFC 2440 は改訂されて、2007年11月にRFC 4880になりました。
- RFC 4880 は改訂されて、2024年7月にRFC 9580になりました。
- OpenPGP の耐量子暗号(RFC 9980)は、2026年6月に公開されました。