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)
(リンクは私によるもの)
データ圧縮(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世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!