Issuer Fingerprint Signature Subpacket in Next OpenPGP

(move from http://text.baldanders.info/remark/2017/11/issuer-fingerprint-signature-subpacket-in-next-openpgp/)

OpenPGP 鍵管理に関する考察」を書いていて気づいたのだが,署名パケット(signature packet)に関して,次期 OpenPGP (RFC 4880bis) の実装が既に GnuPG に一部入っているようである1

署名パケットの中に署名サブパケット(signature subpacket; 鍵や署名に関する属性情報が入っている)というのがあって RFC 4880 では sub 32 まで ID が振られているのだけど(プライベート用は別), RFC 4880bis で sub 33 が追加された。 それが “Issuer Fingerprint” で以下の内容になっている。

The OpenPGP Key fingerprint of the key issuing the signature. This subpacket SHOULD be included in all signatures. If the version of the issuing key is 4 and an Issuer subpacket is also included in the signature, the key ID of the Issuer subpacket MUST match the low 64 bits of the fingerprint.
Note that the length N of the fingerprint for a version 4 key is 20 octets. For a version 5 key the leftmost 25 octets of the fingerprint are used (N=25).
via draft-ietf-openpgp-rfc4880bis - OpenPGP Message Format

まぁ,要するに “Issuer Fingerprint” には署名を行う鍵の鍵指紋(key fingerprint)が入りますよ,ということのようだ。 ちょっと試してみよう。

たとえば “Hello world” の文字列に電子署名してみる。

$ echo Hello world | gpg -u 0x7E20B81C --clear-sign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hello world
-----BEGIN PGP SIGNATURE-----

iHUEAREIAB0WIQQbUgLbSj7HdvHgrRi02juufiC4HAUCWhfcngAKCRC02juufiC4
HCPUAP4npfesVUOXy/RbFn65Ci6rgtvrFNeNIfmFjYit/xMEywD/eHflgDJQWY+Y
7g7btse2kmbJvRwaKUf1QMgntzgo07E=
=k8ok
-----END PGP SIGNATURE-----

ちなみに 0x7E20B81C私の鍵の鍵 ID である。 --clear-sign コマンドは署名対象のテキストとその電子署名を ASCII armor で出力する。 これをそのまま pgpdump にかけてみよう。

こんな感じになる。

$ echo Hello world | gpg -u 0x7E20B81C --clear-sign | pgpdump -u
Old: Signature Packet(tag 2)(117 bytes)
        Ver 4 - new
        Sig type - Signature of a canonical text document(0x01).
        Pub alg - DSA Digital Signature Algorithm(pub 17)
        Hash alg - SHA256(hash 8)
        Hashed Sub: issuer fingerprint(sub 33)(21 bytes)
         v4 -   Fingerprint - 1b 52 02 db 4a 3e c7 76 f1 e0 ad 18 b4 da 3b ae 7e 20 b8 1c
        Hashed Sub: signature creation time(sub 2)(4 bytes)
                Time - Fri Nov 24 08:56:21 UTC 2017
        Sub: issuer key ID(sub 16)(8 bytes)
                Key ID - 0xB4DA3BAE7E20B81C
        Hash left 2 bytes - 23 54
        DSA r(255 bits) - ...
        DSA s(256 bits) - ...
                -> hash(DSA q bits)

なお pgpdump はバージョン 0.32 で “Issuer Fingerprint” に対応した2

RFC 4880bis では V5 フォーマットの公開鍵パケットや鍵指紋3 の仕様が出てきている。 これらの仕様を取り込んだ GnuPG 2.3 あたりがそのうち出てくるんじゃないかと期待している。

ブックマーク

参考図書

photo
暗号技術入門 第3版 秘密の国のアリス
結城 浩
SBクリエイティブ 2015-08-25
評価

自作エミュレータで学ぶx86アーキテクチャ コンピュータが動く仕組みを徹底理解! 数学ガールの秘密ノート/丸い三角関数 数学ガールの秘密ノート/微分を追いかけて 情報セキュリティ白書2015: サイバーセキュリティ新時代:あらゆる変化へ柔軟な対応を 数学ガールの秘密ノート/数列の広場

SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。

reviewed by Spiegel on 2015-09-20 (powered by G-Tools)


  1. 先行してドラフト仕様が GnuPG に組み込まれるのは珍しいことではない。 [return]
  2. 私の gpgpdump も 0.2.1 で一応対応させているがまだテストの途中なのでダメダメ。 [return]
  3. V5 フォーマットの鍵指紋は SHA-3 ではなく SHA256 (SHA-2) を使うようだ。まぁドラフト段階なので変わるかもだけど。 SHA-3 自体は既に ID が振られているので組み込みはやれないこともない。 [return]