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