11. セキュリティに関する考慮事項 (Security Considerations)
TLSプロトコルのセキュリティは、以下の仮定に基づいています:
11.1. 暗号強度 (Cryptographic Strength)
TLSのセキュリティは、使用される暗号プリミティブの強度に基本的に依存しています。実装者は以下を行うべきです:
- 強力な暗号スイートを使用する
- 既知の弱点を持つアルゴリズム (DES、RC4、MD5など) を避ける
- 既知の脆弱性を修正するために暗号ライブラリを定期的に更新する
11.2. 乱数生成 (Random Number Generation)
TLSプロトコルのセキュリティは、暗号学的に強力な乱数生成に大きく依存しています。実装は以下を行わなければなりません (MUST):
- 暗号学的に安全な疑似乱数生成器 (CSPRNG) を使用する
- 乱数生成器に十分なエントロピー源があることを確認する
- 乱数生成器を定期的に再シードする
11.3. 証明書の検証 (Certificate Validation)
適切な証明書検証は、中間者攻撃を防ぐために重要です:
- 証明書チェーンの完全性を検証する
- 証明書の失効状態を確認する (CRLまたはOCSP)
- ホスト名の一致を検証する
- 証明書の有効期限を確認する
11.4. バージョンロールバック攻撃 (Version Rollback Attacks)
実装はバージョンロールバック攻撃を防止しなければなりません (MUST)。TLSは、ClientHelloおよびServerHelloのバージョン番号と、Finishedメッセージのverify_dataを使用して、バージョンロールバックの試みを検出します。
11.5. 既知の攻撃 (Known Attacks)
実装は以下の既知の攻撃に注意する必要があります:
- BEAST (Browser Exploit Against SSL/TLS): TLS 1.0 CBCモードに対する攻撃。TLS 1.2は明示的なIVでこれを緩和します。
- CRIME (Compression Ratio Info-leak Made Easy): TLS圧縮を悪用する攻撃。TLS圧縮を無効にすることが推奨されます。
- Lucky 13: CBCモードのパディングに対するタイミング攻撃。実装は定数時間比較を使用すべきです。
- POODLE: SSL 3.0に対する攻撃。SSL 3.0は無効にすべきです。
- Bleichenbacher攻撃: RSA PKCS#1 v1.5パディングに対する攻撃。TLS 1.2にはこれに対する保護が含まれています。
11.6. 再ネゴシエーション (Renegotiation)
再ネゴシエーションはセキュリティリスクをもたらす可能性があります。RFC 5246は、これらの問題に対処するための安全な再ネゴシエーション拡張を定義しています。実装は以下を行うべきです:
- RFC 5746 (TLS再ネゴシエーション指示拡張) を実装する
- 再ネゴシエーション要求を慎重に処理する
- 機密操作中は再ネゴシエーションを拒否することを検討する
11.7. サービス拒否 (Denial of Service)
TLSハンドシェイクは比較的高コストです (特に公開鍵操作)。サーバーは以下を行うべきです:
- レート制限を実装する
- 完全なハンドシェイクの数を減らすためにセッション再開の使用を検討する
- 異常なパターンを監視および検出する
11.8. 実装のセキュリティ (Implementation Security)
プロトコルレベルのセキュリティ考慮事項に加えて、実装は以下も行うべきです:
- バッファオーバーフローを防止する
- 機密データ (鍵、平文) を安全にクリアする
- タイミング攻撃を防ぐために定数時間比較を使用する
- エラー条件を適切に処理する
注意: 完全なセキュリティ分析については、RFC 5246のセクション11および付録Fを参照してください。