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

(move from http://text.baldanders.info/remark/2017/11/algorithms-for-openpgp/)

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

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

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

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

IDアルゴリズム鍵長参考文献
1 IDEA 128 (64)  
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 (Reserved) --  
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)
OpenPGP で使用可能な共通鍵暗号アルゴリズム一覧

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

  • sym 2 の TripleDES は “MUST implement” である。また sym 3 の CAST5 と sym 7 の AES-128 は “SHOULD implement” である(AES は MUST でいいと思うんだけどなぁ)
  • 古い PGP(2.6 以前)の暗号データを復号するためには sym 1 の IDEA が必要となる

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

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

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

IDアルゴリズム参考文献
1 RSA (Encrypt or Sign) RFC3447
2 RSA Encrypt-Only
3 RSA Sign-Only
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 , 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 High-speed high-security signatures, RFC8032
OpenPGP で使用可能な公開鍵暗号アルゴリズム一覧

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

  • pub 2 の RSA Encrypt-Only および pub 3 の RSA Sign-Only は deprecated なので,これらの鍵は新たに作成するべきではない(SHOULD NOT be generated)
  • 表には書いてないが pub 4 から pub 15 は予約済み(Reserved)である
  • RFC 4880bis では pub 16 の ElGamal, pub 17 の DSA, pub 18 の ECDH, pub 19 の ECDSA が “MUST implement” となる(現行の RFC 4880 では ElGamal と DSA が “MUST implement”)
  • pub 20 の ElGamal は,元々暗号化と署名の両方できるものだったが,脆弱性が見つかったため OpenPGP では使用禁止になった
  • pub 22 の EdDSA は2017年1月に RFC 8032 として正式に RFC 化された。ただし OpenPGP ではまだドラフト段階である
  • pub 18 の ECDH, pub 19 の ECDSA, pub 22 の EdDSA で利用可能な楕円曲線については「そろそろ GnuPG でも ECC を標準で使うのがいいんじゃないかな」で紹介している

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

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

IDアルゴリズム参考文献
1 MD5 RFC1321
2 SHA-1 FIPS PUB 186-4
3 RIPE-MD/160 The hash function RIPEMD-160
4 (Reserved)  
5 (Reserved)  
6 (Reserved)  
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 FIPS PUB 202
OpenPGP で使用可能な一方向ハッシュ関数一覧

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

  • RFC 4880bis では hash 8 の SHA2-256 が “MUST implement” となる(現行の RFC 4880 では SHA-1 が “MUST implement”)。鍵指紋(key fingerprint)についても V5 では SHA2-256 を使用することになる(現行は V4)
  • RFC 4880bis では hash 1 の MD5 と hash 3 の RIPE-MD/160 は “SHOULD NOT use” となる。これらは古い PGP による鍵や暗号データの互換性のためにのみ残されるだろう
  • RFC 4880bis では hash 2 の SHA-1 も基本的に非推奨になる(SHOULD NOT create messages)。ただし V4 の鍵指紋や MDC (Modification Detection Code) 用には引き続き使われる

その他のアルゴリズム

S2K (String-to-Key)

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

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

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

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

乱数生成器(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]).
via draft-ietf-openpgp-rfc4880bis - OpenPGP Message Format

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

データ圧縮(Compression Algorithms)

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

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

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

アルゴリズムの選択

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

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

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

ブックマーク

参考図書

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

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

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

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

photo
暗号化 プライバシーを救った反乱者たち
スティーブン・レビー 斉藤 隆央
紀伊國屋書店 2002-02-16
評価

ハッカーズ 暗号解読―ロゼッタストーンから量子暗号まで グーグル ネット覇者の真実 追われる立場から追う立場へ 暗号解読〈上〉 (新潮文庫) 暗号解読 下巻 (新潮文庫 シ 37-3)

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

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


  1. ただし OpenPGP では試行回数によるロックアウトは定義されないため無限にパスフレーズ解読を試みることができる。 [return]
  2. もちろんアルゴリズムの危殆化が起きない前提での話である。こればっかりは予測しようもないし(笑) 危殆化があり得ることを前提にするなら,ひとつのアルゴリズムに固定するのではなく,常に代替えを用意する(または用意できるよう準備する)ことが大事である。 [return]