この文書は2016年以降更新されていません
鍵管理に関するチートシート
ドラフト版チートシート - 編集中
はじめに
この鍵管理に関するチートシートでは、暗号鍵管理を安全な方法でアプリケーションに実装するためのガイダンスを開発者に提供します。以下のような項目について、組織全体で整合性の取れたルールと実践を文書化することが重要です。
- 鍵ライフサイクル管理 (生成、配布、廃棄)
- 鍵の危殆化、回復、およびゼロ化
- 鍵保管
- 鍵共有
鍵管理の一般的なガイドラインと考慮事項
さまざまなアプリケーションに携わる開発者の指針となる、組織全体の暗号方針を策定し、各アプリケーションの暗号機能が最低必要条件とベストプラクティスを満たすことを確保します。アプリケーションに必要な暗号および鍵管理の必要条件を特定し、暗号鍵マテリアルを処理または保存するすべてのコンポーネントにマッピングします。
適切に保守、更新され、サードパーティ組織 (NIST / FIPS など) によるテストと検証が行われた定評のある暗号ライブラリだけを使用します。
鍵の選択
特定のアプリケーション内で使用する暗号および鍵管理のアルゴリズムを選択するには、まず、アプリケーションの目的を理解する必要があります。たとえば、アプリケーションでデータを安全に保存する必要がある場合は、保存データ (DAR, Data-At-Rest) のセキュリティという目的に対応したアルゴリズムスイートを選択します。データの送受信が必要なアプリケーションでは、転送中のセキュリティという目的に対応したアルゴリズムスイートを選択します。アプリケーション内で使用する暗号スイートの、アプリケーションとセキュリティの目的に応じた選択について、推奨事項をまとめました。
多くの場合、アプリケーション開発者は暗号および鍵管理機能を開発するとき、ライブラリの内容を調べることから始めます。しかし、最適な鍵管理方式を判断するには、アプリケーションに実際に何が必要かを分析する必要があります。まず、アプリケーションのセキュリティ目的を理解することから始めてください。これが、使用すべき暗号プロトコルの判断につながります。
たとえば、アプリケーションの目的としては、 - 保存データの機密性 - 使用中データの機密性 - データ発信元の信頼性 - 端末デバイスの信頼性 - 転送中データの完全性 - 転送中データの機密性が考えられます。
アプリケーションのセキュリティ要件を理解することで、開発者は、どのプロトコルとアルゴリズムが必要かを判断できます。プロトコルとアルゴリズムを理解すれば、アプリケーションの目的に合った各種の鍵の定義を開始できます。考慮する鍵の種類と証明書には、次のようにさまざまなものがあります。
暗号化: - 対称暗号鍵 - 非対称暗号鍵 (公開鍵とプライベート鍵)
端末デバイスの認証: - 事前共有対称鍵 - 信用できる証明書 - 信用できるアンカー
データ発信元認証 - HMAC
完全性保護 - メッセージ認証コード (MAC)
鍵暗号鍵
鍵の強度
特定のアルゴリズムの実装に必要な鍵強度についての推奨ガイドラインは、NIST SP 800-57 (Recommendation for Key Management) を参照してください。また、以下のベストプラクティスも考慮してください。
1.アプリケーションに最低限必要な計算上の攻撃耐性を設定します。計算上の最小攻撃耐性を把握するには、敵対者の知識レベルや、どのくらいの期間にわたってデータを保護する必要があるか、データがどこに保存されるか、データが公開されているかどうかを考慮する必要があります。計算上の攻撃耐性が明確になれば、データをその存続期間にわたって保護するために必要な暗号鍵の最小長がわかります。選択したアルゴリズムに適した鍵の長さを求めるための追加ガイダンスについては、NIST SP 800-131a を参照してください。
2.保管または配布する鍵を暗号化するときは、必ず同等以上の暗号強度を持つ別の鍵を使用して暗号鍵を暗号化します。
3.楕円曲線ベースのアルゴリズムに移行するときは、システム内で使用している他のアルゴリズムの比較強度を満たすか、それを超える鍵の長さを選択します。NIST SP 800-57 の表 2 を使用してください。
さまざまなアプリケーションに携わる開発者の指針となる、組織全体の暗号方針を策定し、各アプリケーションの暗号機能が最低必要条件とベストプラクティスを満たすことを確保します。
メモリ管理に関する考慮事項
Perfect Forward Secrecy
プロキシの操作
鍵管理ライフサイクルのベストプラクティス
生成
配布
エンドポイント認証
アルゴリズムとプロトコル
完全性と機密性
保存
- 開発者は、暗号鍵がアプリケーション内のどこに保存されるかを理解する必要があります。どのメモリデバイスに鍵が保存されるかを理解してください。
- 鍵は、揮発性メモリと永続メモリの両方で保護する必要があります。理想的には、安全な暗号モジュール内で処理します。
- 鍵は、絶対にプレーンテキスト形式で保存しないでください。
- 鍵をオフラインデバイス / データベースに保存する予定の場合は、鍵マテリアルをエクスポートする前に、鍵暗号鍵 (KEK) を使用して鍵を暗号化します。KEK の長さ (とアルゴリズム) は、保護する鍵と同じか、それ以上の強度であることが必要です。
- 保存中の鍵に完全性保護が適用されることを確保します (暗号化とメッセージ認証コード (MAC) に対応した二重目的のアルゴリズムを検討)。
預託とバックアップ
紛失した暗号鍵で暗号化されたデータは、二度と復元できなくなります。そのため、特に長期データストアの保存データ暗号化をサポートするアプリケーションについては、安全な鍵バックアップ機能を実装することが不可欠です。鍵をバックアップする際には、鍵の保存に使用するデータベースが FIPS 140-2 認証済みモジュールを使用して暗号化されていることを確認してください。
鍵マテリアルを預託しておくと、鍵の紛失時や破損時に調査に使用したり、鍵マテリアルをユーザーに再供給したりできて便利な場合があります。デジタル署名の実行に使用される鍵は、絶対に預託してはいけませんが、暗号化をサポートする鍵を預託する必要性について検討してください。多くの場合、預託は、証明書と鍵を供給する認証局 (CA) または鍵管理システムによって実行できます。ただし、場合によっては、システムでアプリケーションに預託の実行を許可するには、別途 API の実装が必要になることもあります。
追跡と監査
鍵の危殆化と回復
信頼ストア
- サードパーティルート証明書のインジェクションに対して信頼ストアをセキュリティ保護するための制御を設計します。アクセス制御は、エンティティおよびアプリケーションごとに管理し、強制します。
- 信頼ストアに保存するオブジェクトに対して完全性制御を実施します。
- 信頼ストアに格納された鍵を認証や認可なくエクスポートできないようにしてください。
- 鍵マテリアルをアプリケーションからネットワークアプリケーションやその他のコンポーネントにエクスポートする際の厳格なポリシーと手続きを策定します。
- 信頼ストアを更新するための安全なプロセスを導入します。
暗号モジュールに関するトピック
暗号鍵管理ライブラリ
この資料は、アプリケーションセキュリティテスト技術者に、暗号鍵の管理を支援するガイドを提供することに重点を置いています。
Authors and Primary Editors
Brian Russell - russellbri[at]leidos.com
Drew Van Duren - drew.f.van.duren[at]leidos.com
Vanessa Amador - vanessa.c.amador[at]leidos.com
Other Cheatsheets
OWASP Cheat Sheets Project Homepage
Developer Cheat Sheets (Builder)
- Authentication Cheat Sheet (Spanish)
- Choosing and Using Security Questions Cheat Sheet
- Clickjacking Defense Cheat Sheet
- C-Based Toolchain Hardening Cheat Sheet
- Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet
- Cryptographic Storage Cheat Sheet
- DOM based XSS Prevention Cheat Sheet
- Forgot Password Cheat Sheet
- HTML5 Security Cheat Sheet
- Input Validation Cheat Sheet
- JAAS Cheat Sheet
- Logging Cheat Sheet
- .NET Security Cheat Sheet
- OWASP Top Ten Cheat Sheet
- Password Storage Cheat Sheet
- Pinning Cheat Sheet
- Query Parameterization Cheat Sheet
- Ruby on Rails Cheatsheet
- REST Security Cheat Sheet
- Session Management Cheat Sheet
- SAML Security Cheat Sheet
- SQL Injection Prevention Cheat Sheet
- Transaction Authorization Cheat Sheet
- Transport Layer Protection Cheat Sheet
- Unvalidated Redirects and Forwards Cheat Sheet
- User Privacy Protection Cheat Sheet
- Web Service Security Cheat Sheet
- XSS (Cross Site Scripting) Prevention Cheat Sheet
Assessment Cheat Sheets (Breaker)
- Attack Surface Analysis Cheat Sheet
- XSS Filter Evasion Cheat Sheet
- REST Assessment Cheat Sheet
- Web Application Security Testing Cheat Sheet
Mobile Cheat Sheets
OpSec Cheat Sheets (Defender)
Draft Cheat Sheets
- Access Control Cheat Sheet
- Application Security Architecture Cheat Sheet
- Business Logic Security Cheat Sheet
- PHP Security Cheat Sheet
- Secure Coding Cheat Sheet
- Secure SDLC Cheat Sheet
- Threat Modeling Cheat Sheet
- Grails Secure Code Review Cheat Sheet
- IOS Application Security Testing Cheat Sheet
- Key Management Cheat Sheet
- Insecure Direct Object Reference Prevention Cheat Sheet
- Content Security Policy Cheat Sheet
このプロジェクトは、OWASP Builders コミュニティの一部です。 Defenders、Builders、および Breakers コミュニティ内の他のプロジェクトをお気軽にご覧ください。 |