OpenPGP で利用可能なアルゴリズム(RFC 4880bis 対応版)
gpgpdump を RFC 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 |
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 |
- 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 |
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 |
- RFC 6637 および RFC 4880bis では NIST curve P-256 が “MUST implement” となっている。また NIST curve P-521, Ed25519, Curve25519 が “SHOULD implement” となっている
- 具体的な実装例については「そろそろ 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-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 |
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 はパスフレーズからセッション鍵を生成するためのハッシュ化の手順である。
ID | S2K タイプ |
---|---|
0 | Simple S2K |
1 | Salted S2K |
2 | Reserved value |
3 | Iterated and Salted S2K |
100-110 | Private/Experimental 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 は 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。 詳しくは「暗号鍵関連の各種変数について」を参照のこと。
ブックマーク
参考図書
- 暗号技術入門 第3版 秘密の国のアリス
- 結城 浩 (著)
- SBクリエイティブ 2015-08-25 (Release 2015-09-17)
- Kindle版
- B015643CPE (ASIN)
- 評価
SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。
- 暗号化 プライバシーを救った反乱者たち
- スティーブン・レビー (著), 斉藤 隆央 (翻訳)
- 紀伊國屋書店 2002-02-16
- 単行本
- 4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)
- 評価
20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!