OpenPGP で利用可能なアルゴリズム(RFC 4880bis 対応版)

gpgpdumpRFC 4880bis対応させていく作業の中で「改めて『OpenPGP で利用可能なアルゴリズム』をまとめておいたほうがいいかなぁ」と感じたので,覚え書きとして記しておく。

なお RFC 4880bis は,名前の通り,ドラフト段階なので今後変わる可能性がある。 アルゴリズム関連で変更があった場合は随時この記事に加筆・修正していって,正式な RFC 番号が振られた段階でこの記事の最終稿とする予定である。

共通鍵暗号アルゴリズム(Symmetric-Key Algorithms)

OpenPGP で利用可能な共通鍵暗号は以下の通り。 なお「鍵長」項目の括弧内はブロック長を指す。 いずれも単位は “bit” である。

IDアルゴリズム鍵長参考文献
0 Plaintext or unencrypted data
1 IDEA 128 (64) Narrow-Bicliques: Cryptanalysis of Full IDEA
2 TripleDES 168 (64) SP800-67 Rev.2
3 CAST5 128 (64) RFC2144
4 Blowfish 128 (64) Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish)
5,6 (Reserved)
7 AES with 128-bit key 128 (128) FIPS PUB 197
8 AES with 192-bit key 192 (128)
9 AES with 256-bit key 256 (128)
10 Twofish with 256-bit key 256 (128)
11 Camellia with 128-bit key 128 (128) RFC3713, RFC5581
12 Camellia with 192-bit key 192 (128)
13 Camellia with 256-bit key 256 (128)
100-110 Private/Experimental algorithm
OpenPGP で使用可能な共通鍵暗号アルゴリズム一覧

ID は OpenPGP で定義されるもので “sym 1” のように表記する。

  • RFC 4880bis では AES-128 (sym 7) が “MUST implement” で AES-256 (sym 9) が “SHOULD implement” となる
  • 現行の RFC 4880 では TripleDES (sym 2) が “MUST implement” で CAST5 (sym 3) および AES-128 が “SHOULD implement” であるため,今後も RFC 4880 に対応するならこれらのアルゴリズムを実装する必要がある
  • 旧 PGP(2.6 およびそれ以前)の暗号鍵および暗号データを利用するのであれば IDEA (sym 1) が必要

ちなみに sym 11 から sym 13 の Camellia 暗号は日本製である。

OpenPGP では共通鍵暗号を使った暗号化に CFB mode1 を使用する。 なお,認証付き暗号の暗号モードについては以下の通り。

認証付き暗号の暗号モード(AEAD Algorithms)

RFC 4880bis で追加される認証付き暗号(Authenticated Encryption with Associated Data; AEAD)について OpenPGP で利用可能な暗号モードは以下の通り。

ID暗号モード参考文献
1 EAX EAX: A Conventional Authenticated-Encryption Mode
2 OCB RFC7253
100-110 Private/Experimental algorithm
OpenPGP で使用可能な認証付き暗号アルゴリズム一覧
  • RFC 4880bis では EAX mode が “MUST implement” となる
  • OCB mode は特許問題が絡むため RFC 4880bis での取り扱いについて議論がある

公開鍵暗号・署名アルゴリズム(Public-Key Algorithms)

OpenPGP で利用可能な公開鍵暗号・署名は以下の通り。

IDアルゴリズム参考文献
1 RSA (Encrypt or Sign) RFC3447
2 RSA Encrypt-Only
3 RSA Sign-Only
4-15 (Reserved)
16 Elgamal
(Encrypt-Only)
A public key cryptosystem and a signature scheme based on discrete logarithms
17 DSA FIPS PUB 186-4
18 ECDH public key algorithm SP800-56A Revision 2 , RFC6090, RFC6637
19 ECDSA public key algorithm FIPS PUB 186-4 , RFC6090, RFC6637
20 (Reserved; formerly Elgamal Encrypt or Sign)
21 (Reserved for Diffie-Hellman)
22 EdDSA FIPS PUB 186-5, RFC8032
23 (Reserved for AEDH)
24 (Reserved for AEDSA)
100-110 Private/Experimental algorithm
OpenPGP で使用可能な公開鍵暗号・署名アルゴリズム一覧

ID は OpenPGP で定義されるもので “pub 1” のように表記する。

  • RFC 4880bis では電子署名用に RSA (pub 1) と ECDSA (pub 19),暗号化用に RSA (pub 1) と ECDH (pub 18) が “MUST implement” となる
    • RFC 4880bis で追加された EdDSA (pub 22) は “SHOULD implement” となる。ちなみに EdDSA は2017年1月に RFC 8032 として正式に RFC 化された
  • 現行 RFC 4880 では ElGamal (pub 16) と DSA (pub 17) が “MUST implement” であるため,今後も RFC 4880 に対応するならこれらのアルゴリズムを実装する必要がある
  • RSA Encrypt-Only (pub 2) および RSA Sign-Only (pub 3) は deprecated なので,これらの鍵は新たに作成するべきではない(SHOULD NOT be generated)
  • ElGamal (pub 20) は,元々暗号化と署名の両方できるものだったが,脆弱性が見つかったため OpenPGP では使用禁止になった2
  • pub 23 および pub 24 は AEAD 用に ID のみ予約されている

楕円曲線

RFC 6637 および RFC 4880bis で追加される楕円曲線暗号(Elliptic Curve Cryptography; ECC)について OpenPGP で利用可能な楕円曲線(Elliptic Curve)は以下の通り。 なお「鍵長」の単位は “bit” である。

楕円曲線名適用アルゴリズム鍵長参考文献
NIST P-256 ECDSA, ECDH 256 SP800-56A Revision 2 , FIPS PUB 186-4 , RFC6637
NIST P-384 ECDSA, ECDH 384
NIST P-521 ECDSA, ECDH 521
brainpoolP256r1 ECDSA, ECDH 256 ECC-Brainpool, RFC5639
brainpoolP512r1 ECDSA, ECDH 512
Ed25519 EdDSA 256 FIPS PUB 186-5, RFC8032
Curve25519 ECDH 256 RFC7748
OpenPGP で使用可能な楕円曲線一覧

一方向ハッシュ関数アルゴリズム(Hash Algorithms)

OpenPGP で利用可能なハッシュ関数は以下の通り。

>
IDアルゴリズム参考文献
1 MD5 RFC1321
2 SHA-1 FIPS PUB 186-4
3 RIPE-MD/160 The hash function RIPEMD-160
4-7 (Reserved)
8 SHA2-256 FIPS PUB 180-4
9 SHA2-384
10 SHA2-512
11 SHA2-224
12 SHA3-256 FIPS PUB 202
13 (Reserved)
14 SHA3-512
100-110 Private/Experimental algorithm
OpenPGP で使用可能な一方向ハッシュ関数一覧

ID は OpenPGP で定義されるもので “hash 1” のように表記する。

  • RFC 4880bis では SHA2-256 (hash 8) が “MUST implement” となる(現行 RFC 4880 では SHA-1 (hash 2) が “MUST implement”)
    • 鍵指紋(key fingerprint)についても V5 では SHA2-256 を使用することになる(現行 RFC 4880 は V4)
  • RFC 4880bis では SHA-1 も基本的に非推奨になる(SHOULD NOT create messages)が,現行 RFC 4880 の V4 の鍵指紋や MDC (Modification Detection Code) 用に対応するのであれば SHA-1 も実装する必要がある
  • RFC 4880bis では MD5 (hash 1) と RIPE-MD/160 (hash 3) は “SHOULD NOT use” となる
    • ただし,旧 PGP(2.6 およびそれ以前)の暗号鍵および暗号データを利用するのであればこれらが必要

その他のアルゴリズム

S2K (String-to-Key)

S2K はパスフレーズからセッション鍵を生成するためのハッシュ化の手順である。

IDS2K タイプ
0 Simple S2K
1 Salted S2K
2 Reserved value
3 Iterated and Salted S2K
100-110 Private/Experimental S2K
OpenPGP で使用可能な S2K アルゴリズム一覧

ID は OpenPGP で定義されるもので “s2k 1” のように表記する。

OpenPGP では,パスフレーズ自体はいかなる形(ハッシュ値を含む)でも保存しない。 このため,パスフレーズを紛失してしまった場合は復元できない3

乱数生成器(Random Number Generator)

Certain operations in this specification involve the use of random numbers. An appropriate entropy source should be used to generate these numbers (see [RFC4086]).

(リンクは私によるもの)

データ圧縮(Compression Algorithms)

暗号化メッセージや電子署名を圧縮するためのアルゴリズムである。

IDアルゴリズム参考文献
0 Uncompressed  
1 ZIP RFC1951
2 ZLIB RFC1950
3 BZip2 bzip2
100-110 Private/Experimental algorithm
OpenPGP で使用可能なデータ圧縮アルゴリズム一覧

ID は OpenPGP で定義されるもので “comp 1” のように表記する。

  • 非圧縮(comp 0)は “MUST implement” である
  • RFC 4880 では ZIP (comp 1) が “SHOULD implement” だが RFC 4880bis では ZLIB (comp 2) が “SHOULD implement” となっていて, ZIP (comp 1) については “SHOULD be able to decompress using” と復号時の後方互換性のみ確保されていればいいようだ

アルゴリズムの選択

暗号関連のアルゴリズムや鍵長は組み合わせが重要で,あるアルゴリズムのみ強くても効率が悪くなるだけである。 たとえば,2030年以降も使える組み合わせが必要なら

  • AES 128bit
  • ElGamal, DSA 3072bit
  • RSA 3072bit
  • ECDH, ECDSA 256bit
  • SHA2-256, SHA3-256

の中から組み合わせるのが「ベストマッチ!」である4。 詳しくは「暗号鍵関連の各種変数について」を参照のこと。

ブックマーク

参考図書

photo
暗号技術入門 第3版 秘密の国のアリス
結城 浩 (著)
SBクリエイティブ 2015-08-25 (Release 2015-09-17)
Kindle版
B015643CPE (ASIN)
評価     

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

reviewed by Spiegel on 2015-09-20 (powered by PA-APIv5)

photo
暗号化 プライバシーを救った反乱者たち
スティーブン・レビー (著), 斉藤 隆央 (翻訳)
紀伊國屋書店 2002-02-16
単行本
4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)
評価     

20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!

reviewed by Spiegel on 2015-03-09 (powered by PA-APIv5)


  1. 厳密には CFB mode の変形である。 ↩︎

  2. pub 20 が禁止になった経緯については “GnuPG’s ElGamal signing keys compromised” を参照のこと。 ↩︎

  3. ただし OpenPGP では試行回数によるロックアウトは定義されないため,無限にパスフレーズ解読を試みることができる。 ↩︎

  4. もちろんアルゴリズムの危殆化が起きない前提での話である。こればっかりは予測しようもないし(笑) 危殆化があり得ることを前提にするなら,ひとつのアルゴリズムに固定するのではなく,常に代替えを用意する(または用意できるよう準備する)ことが大事である。 ↩︎