付録 V: 暗号化
V6 は単にベストプラクティスを定義するだけではありません。暗号の原則に対する理解を深め、より耐性のある最新のセキュリティ手法の採用を促進することを目的としています。この付録では、V6 で概説されている包括的な標準を保管するために、各要件に関する詳細な技術情報を提供します。
アルゴリズム (V6.2)
暗号パラメータの等価な強度
さまざまな暗号システムの相対的なセキュリティ強度は以下の表のとおりです (NIST SP 800-57 Part 1, p.71 より):
<= 80
2TDEA
L = 1024 N = 160
k = 1024
f = 160-223
112
3TDEA
L = 2048 N = 224
k = 2048
f = 224-255
128
AES-128
L = 3072 N = 256
k = 3072
f = 256-383
192
AES-192
L = 7680 N = 384
k = 7680
f = 384-511
256
AES-256
L = 15360 N = 512
k = 15360
f = 512+
注: このセクションでは量子コンピュータが存在しないことを前提としています。そのようなコンピュータが存在する場合、最後の 3 列の推定値はもはや有効ではなくなります。
乱数値 (V6.3)
承認された RNG 方式とアルゴリズム
/dev/random
✓
✓
✓
/dev/urandom
ランダムデータを提供するための Linux カーネルの特殊ファイルです。
ハードウェアのランダム性から高性能のエントロピーソースを提供します。
✓
✓
✓
AES-CTR-DRBG
✓
✓
✓
HMAC-DRBG
✓
✓
✓
Hash-DRBG
✓
✓
✓
getentropy()
シンプルで最小限の API で、カーネルのエントロピーソースから安全なランダムバイトを直接提供します。より現代的であり、古い API に関連する落とし穴を回避します。
✓
✓
✓
RBG で許可されていないハッシュ
以下は RBG に使用すべきではありません (SHOULD NOT) (NIST SP-800-57 Part 1 による):
SHA3-224
SHA-512/224
SHA-224
KMAC128
暗号アルゴリズム (V6.5)
承認された暗号
以下の暗号が承認されています:
AES-256
✓
✓
Salsa20
✓
✓
XChaCha20
✓
✓
✓
XSalsa20
✓
✓
✓
ChaCha20
✓
✓
✓
AES-192
✓
✓
✓
AES-128
✓
✓
✓
許可されていない暗号
以下は、明示的に許可されていない 暗号のリストです。上記のリストにないものは、文書化された理由とともに承認されなければなりませんが、以下は明示的に禁止されており、使用してはなりません (MUST NOT):
2TDEA
TDEA (3DES/3DEA)
IDEA
RC4
Blowfish
ARC4
DES
AES 暗号モード
現代の暗号はさまざまな目的でさまざまなモード、特に AES を使用しています。ここでは AES 暗号モードの要件について説明します。
一般的なユースケースで承認されている暗号モード
以下のモードは、その機能が暗号化されたデータ保存 (次のサブセクションを参照) である場合を除いて、承認されています:
GCM
Yes
✓
✓
✓
CCM
Yes
✓
✓
✓
CBC*
No
✓
✓
✓
* すべての暗号化されたメッセージは認証されなければなりません。このため、CBC モードを使用する場合は必ず、メッセージを検証するためにハッシュ関数または MAC が関連付けられていなければなりません (MUST)。一般的に、これは Encrypt-Then-Hash 方式で適用されなければなりません (MUST) (ただし、TLS 1.2 では代わりに Hash-Then-Encrypt を使用します)。これが保証できない場合、CBC を使用してはいけません (MUST NOT)。
一般的なユースケースで承認されている推奨暗号モード
指定の承認されたブロックモードのうち、実装ではこのリストの暗号を優先順に使用すべきです (SHOULD):
GCM
✓
✓
✓
CCM
✓
✓
✓
データ保存 (ディスク上のブロック暗号) でのみ承認されている暗号モード
以下のディスクレベルブロック暗号モードが承認されており、優先順にリストされています:
XTS
✓
✓
✓
XEX
✓
✓
✓
LRW
✓
✓
✓
許可されていない暗号モード
以下の暗号モードはいかなるユースケースでも使用してはいけません (MUST NOT):
ECB
CFB
OFB
CTR
CCM-8**
** CCM-8 を使用する場合、MAC タグは 64 ビットのセキュリティしか持ちません。 これは、少なくとも 128 ビットのセキュリティを必要とする要件 6.2.9 に準拠していません。
鍵ラッピング
暗号鍵ラップ (および対応する鍵アンラップ) は、追加の暗号メカニズムを使用して既存の鍵をカプセル化 (つまりラップ) し、転送中などに元の鍵が明らかに露出しないようにすることで、既存の鍵を保護する方法です。元の鍵を保護するために使用されるこの追加の鍵はラップ鍵と呼ばれます。
この操作は、信頼できないとみなされる場所で鍵を保護したい場合、あるいは信頼できないネットワーク上やアプリケーション内で機密鍵を送信したい場合に実行できます。 ただし、ラップ/アンラップ手順を実行する前に、元の鍵の性質 (アイデンティティや目的など) を理解することを真剣に検討すべきです。これは、セキュリティと、特に鍵の機能 (署名など) の監査証跡や適切な鍵の保存を含むコンプライアンスの点で、ソースとターゲットの両方のシステム/アプリケーションに影響を及ぼす可能性があります。
特に、鍵ラッピングには、NIST SP 800-38F に従い、量子脅威に対する将来を見据えた対策を考慮して、AES-256 を使用しなければなりません (MUST)。AES を使用する暗号モードは優先順に以下のとおりです:
KW
✓
✓
✓
KWP
✓
✓
✓
AES-192 と AES-128 はユースケースで必要な場合に使用できます (MAY) が、その理由はエンティティの暗号インベントリに文書化されなければなりません (MUST)。
認証された暗号
ディスク暗号化を除いて、暗号化されたデータは何かしらの形で認証された暗号 (AE) スキーム、通常は関連データ付き認証暗号 (AEAD) スキームを使用して、認可されていない変更から保護されなければなりません。
アプリケーションは承認済みの AEAD スキームを使用することをお勧めします。代わりに、承認済みの暗号スキームと承認済みの MAC アルゴリズムを Encrypt-then-MAC 構造で組み合わせることもできます。
MAC-then-encrypt はレガシーアプリケーションとの互換性のために依然として許可されています。これは古い暗号スイートを使用する TLS v1.2 で使用されます。
AES-GCM
承認済み
AES-CCM
承認済み
ChaCha-Poly1305
承認済み
Encrypt-then-MAC
承認済み
MAC-then-encrypt
レガシー
ハッシュ関数 (V6.6)
一般的なユースケースで承認されているハッシュ関数
以下のハッシュ関数は、デジタル署名、HMAC、鍵導出関数 (KDF)、ランダムビット生成 (RBG) などの一般的な暗号ユースケースでの使用が承認されています。これらの関数は強力な衝突耐性を提供し、高セキュリティアプリケーションに適しています。これらのアルゴリズムの一部は、適切な暗号鍵管理で使用すると攻撃に対する強力な耐性を提供するため、HMAC、KDF、RBG 機能でも承認されています。
SHA3-512
Y
✓
✓
SHA-512
Y
✓
✓
SHA3-384
Y
✓
✓
SHA-384
Y
✓
✓
SHA3-256
Y
✓
✓
SHA-512/256
Y
✓
✓
SHA-256
Y
✓
✓
✓
KMAC256
N
✓
✓
✓
KMAC128
N
✓
✓
✓
SHAKE256
Y
✓
✓
✓
BLAKE2s
Y
✓
✓
✓
BLAKE2b
Y
✓
✓
✓
BLAKE3
Y
✓
✓
✓
パスワード保存のために承認されているハッシュ関数
以下のハッシュ関数は安全なパスワード保存に特に推奨されています。これらの低速ハッシュアルゴリズムは、パスワードクラッキングの計算難易度を上げることで、ブルートフォース攻撃や辞書攻撃を軽減します。
argon2
RFC 9106
Argon2ID: Memory Cost 19MB, Time Cost 2, Parallelism 1
✓
✓
scrypt
RFC 7914
2^15 r = 8 p = 1
✓
✓
bcrypt
At least 10 rounds.
✓
✓
PBKDF2_SHA512
210,000 iterations
✓
✓
✓
PBKDF2_SHA256
600,000 iterations
✓
✓
✓
許可されていないハッシュ関数
以下のハッシュ関数は、既知の弱点や脆弱性のため、新しいマテリアルを生成する暗号操作に使用してはいけません (MUST NOT)。既存のマテリアルの検証にのみ使用できます (MAY)。
CRC (any length)
--
MD4
MD5
SHA-1
デジタル署名のために許可されていないハッシュ関数
衝突耐性が不十分なため、以下のハッシュ関数はデジタル署名や、衝突耐性を必要とするその他のアプリケーションには使用してはいけません (MUST NOT)。他の用途では、レガシーシステムとの互換性と検証にのみ使用できますが、新しい設計には使用してはいけません。
SHA-224
SHA-512/224
SHA3-224
鍵交換メカニズム (V6.7)
承認されている KEX スキーム
すべての鍵交換スキームに対して 128 ビット以上のセキュリティ強度が確保されていなければならず (MUST)、その実装は以下の表のパラメータ選択に従わなければなりません (MUST)。
RSA
k >= 3072
Diffie-Hellman (DH)
L >= 3072 & N >= 256
Elliptic Curve Diffie-Hellman (ECDH)
f >= 256-383
ここでのパラメータは以下のとおりです:
k は RSA 鍵の鍵サイズです。
L は有限体暗号の公開鍵 (public key) のサイズであり、N は秘密鍵 (private key) のサイズです。
f は ECC の鍵サイズの範囲です。
承認されている DH グループ
以下のグループが承認されており、Diffie-Hellman KEX の実装に使用しなければなりません (MUST)。IKEv2 グループはリファレンスとして提供されています (NIST SP 800-77)。同等のグループが他のプロトコルで使用されるかもしれません。このリストは最も強力なものから最も弱いものの順に並べられています。セキュリティ強度は NIST SP 800-56A, Appendix D および NIST SP 800-57 Part 1 Rev.5 に記載されています。
21
ECC
521-bit random ECP group
260
✓
32
ECC
Curve448
224
✓
18
MODP
8192-bit MODP Group
192 < 200
✓
✓
20
ECC
384-bit random ECP group
192
✓
✓
17
MODP
6144-bit MODP Group
128 < 176
✓
✓
✓
16
MODP
4096-bit MODP Group
128 < 152
✓
✓
✓
31
ECC
Curve25519
128
✓
✓
✓
19
ECC
256-bit random ECP group
128
✓
✓
✓
15
MODP
3072-bit MODP Group
128
✓
✓
✓
14
MODP
2048-bit MODP Group
112
✓
✓
✓
許可されていない KEX スキーム
新しい実装では NIST SP 800-56A & B および NIST SP 800-77 に準拠していないスキームを使用してはいけません (MUST NOT)。
特に IKEv1 は本番環境で使用してはいけません (MUST NOT)。
メッセージ認証コード (MAC)
メッセージ認証コード (MAC) は、メッセージの完全性と真正性を検証するために使用される暗号構造です。MAC は、メッセージと共有鍵 (secret key) を入力として受け取り、固定サイズのタグ (MAC 値) を生成します。MAC は安全な通信プロトコル (TLS/SSL など) で広く使用され、パーティ間で交換されるメッセージが本物で無傷であることを確保します。
承認されている MAC アルゴリズム
以下の MAC アルゴリズムは、完全性と真正性の保証を提供することで、メッセージ保護に使用することが承認されています。実装では、メッセージのセキュリティを確保するために、認証された暗号モードまたは別途適用された HMAC のみを使用しなければなりません (MUST)。
HMAC-SHA-256
✓
✓
✓
✓
HMAC-SHA-384
✓
✓
✓
HMAC-SHA-512
✓
✓
✓
KMAC128
✓
✓
✓
✓
KMAC256
✓
✓
✓
✓
BLAKE3
✓
✓
✓
✓
許可されていない MAC アルゴリズム
以下のアルゴリズムは、既知の脆弱性や不十分なセキュリティ強度のため、明示的に禁止されており、使用してはいけません (MUST NOT):
HMAC-MD5
デジタル署名
承認されているデジタル署名アルゴリズム
以下のデジタル署名アルゴリズムは、データの真正性と完全性を確保するために使用することが承認されています。署名スキームは NIST SP 800-57 Part 1 に従って承認された鍵サイズとパラメータを使用しなければなりません (MUST):
EdDSA (Ed25519, Ed448)
✓
✓
✓
✓
XEdDSA (Curve25519, Curve448)
✓
✓
✓
✓
ECDSA (P-256, P-384, P-521)
✓
✓
✓
✓
RSA-RSSA-PSS
✓
✓
✓
✓
許可されていないデジタル署名アルゴリズム
以下のデジタル署名アルゴリズムは、既知の弱点や不十分なセキュリティ強度のため、使用してはいけません (MUST NOT):
RSA-SSA-PKCS#1 v1.5
DSA (any key size)
鍵導出関数 (KDF)
承認されている KDF
鍵導出関数は鍵マテリアルを特定の暗号操作に適した鍵に変換します。以下の KDF が承認されており、アプリケーションのニーズとセキュリティコンテキストに基づいて使用されなければなりません (MUST):
argon2id
✓
✓
✓
scrypt
✓
✓
✓
PBKDF2
✓
✓
✓
✓
HKDF
✓
✓
✓
✓
許可されていない KDF
以下の KDF は、不十分なセキュリティプロパティや既知の弱点のため、明示的に禁止されており、使用してはいけません (MUST NOT):
MD5-based KDFs
SHA-1-based KDFs
ポスト量子暗号標準
PQC 実装は、堅牢化されたコードや実装リファレンスはまだ最低限しか存在しないため、FIPS-203/204/205 に準拠していなければなりません。 https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards
提案されているハイブリッド TLS 鍵交換グループは、draft-tls-westerbaan-xyber768x00-03 で規定され、Firefox リリース 132 や Chrome リリース 131 などの主要なブラウザでサポートされており、暗号テスト環境や業界や政府が承認したライブラリ内で利用可能な場合に使用できます (MAY)。
Last updated
Was this helpful?