知識マップ: Windowsアプリの機密情報保存 - DPAPIで平文設定を避ける
記事「Windowsアプリの機密情報保存 - DPAPIで平文設定を避ける」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事はDPAPI(ProtectedData)を使ってWindowsデスクトップアプリの秘密情報(接続文字列やAPIトークンなど)を平文設定より安全に保存する方法を扱います。平文保存や鍵を暗号文と同じ場所に置く自前暗号は設定ファイル単体の流出でそのまま秘密が漏れますが、DPAPIは復号主体をWindowsユーザーまたはコンピューターに結び付けることでこれを軽減します。通常のデスクトップアプリはCurrentUserスコープを基本にし、LocalMachineは信頼された単一用途のWindowsサービスなど用途を絞るべきです。ただしパスワードリセットやプロファイル再作成、暗号文だけの別PCへのコピーは復号失敗の原因になり、逆にローミングプロファイルなら鍵材料も一緒に移動するため別PCでも復号できます。ユーザー名とパスワードの組を保存したい場合や複数マシンでの秘密共有が必要な場合は、DPAPIよりCredential LockerやCredential Managerの方が適しています。
flowchart LR
accTitle: DPAPIによるWindowsアプリ秘密情報保護の知識マップ
accDescr: DPAPIがCurrentUserとLocalMachineのスコープで復号主体を切り替えられること、平文保存や自前暗号がもたらす漏えいリスクをDPAPIが軽減すること、Credential LockerやCredential Managerとの使い分け、復号失敗を招く運用上の落とし穴の関係を示す図
dpapi["DPAPI"]
app_secrets["アプリの秘密情報"]
plaintext_secret_storage["秘密情報の平文保存"]
secret_config_file_leak["設定ファイル単体の流出による秘密漏えい"]
colocated_key_encryption["鍵を暗号文と同じ場所に置く自前暗号"]
common_client_secret["全クライアント共通の長期秘密"]
dpapi_currentuser_scope["DataProtectionScope.CurrentUser"]
dpapi_localmachine_scope["DataProtectionScope.LocalMachine"]
desktop_app["対話ユーザーのデスクトップアプリ"]
windows_service["Windowsサービス"]
dpapi_decryption_failure["DPAPI復号失敗"]
credential_pair["ユーザー名とパスワードの組"]
credential_locker["Credential Locker(PasswordVault)"]
credential_manager_api["Credential Manager(CredWrite/CredRead)"]
microsoft_account["Microsoftアカウント"]
cross_machine_secret_sharing["複数マシン・複数ユーザーでの秘密共有"]
admin_password_reset["管理者によるパスワードのリセット"]
profile_recreation["プロファイルの再作成"]
ciphertext_cross_pc_copy["暗号文だけの別PCへのコピー"]
roaming_user_profile["ローミングプロファイル"]
plaintext_secret_storage -->|"原因になり得る"| secret_config_file_leak
dpapi -.->|"軽減する"| secret_config_file_leak
colocated_key_encryption -->|"原因になり得る"| secret_config_file_leak
dpapi -->|"用いるのは非推奨"| common_client_secret
dpapi -->|"で構成できる"| dpapi_currentuser_scope
dpapi -->|"で構成できる"| dpapi_localmachine_scope
dpapi_currentuser_scope -->|"推奨される対応"| desktop_app
dpapi_localmachine_scope -->|"推奨される対応"| windows_service
dpapi_localmachine_scope -->|"用いるのは非推奨"| desktop_app
windows_service -.->|"原因になり得る"| dpapi_decryption_failure
dpapi -->|"推奨される対応"| app_secrets
dpapi -->|"用いるのは非推奨"| credential_pair
credential_locker -->|"推奨される対応"| credential_pair
credential_manager_api -->|"推奨される対応"| credential_pair
credential_locker -.->|"前提とする"| microsoft_account
dpapi -.->|"両立しない"| cross_machine_secret_sharing
credential_locker -.->|"推奨される対応"| cross_machine_secret_sharing
admin_password_reset -.->|"原因になり得る"| dpapi_decryption_failure
profile_recreation -->|"原因になり得る"| dpapi_decryption_failure
ciphertext_cross_pc_copy -->|"原因になり得る"| dpapi_decryption_failure
roaming_user_profile -.->|"防止する"| dpapi_decryption_failure
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 秘密情報の平文保存は設定ファイル単体の流出による秘密漏えいの原因になることがあります。
- DPAPIは設定ファイル単体の流出による秘密漏えいを軽減します。
- 鍵を暗号文と同じ場所に置く自前暗号は設定ファイル単体の流出による秘密漏えいの原因になることがあります。
- DPAPIを全クライアント共通の長期秘密に用いることは推奨されません。
- DPAPIはDataProtectionScope.CurrentUserで構成できます。
- DPAPIはDataProtectionScope.LocalMachineで構成できます。
- DataProtectionScope.CurrentUserは対話ユーザーのデスクトップアプリに対する本記事の推奨です。
- DataProtectionScope.LocalMachineはWindowsサービスに対する本記事の推奨です。
- DataProtectionScope.LocalMachineを対話ユーザーのデスクトップアプリに用いることは推奨されません。
- WindowsサービスはDPAPI復号失敗の原因になることがあります。
- DPAPIはアプリの秘密情報に対する本記事の推奨です。
- DPAPIをユーザー名とパスワードの組に用いることは推奨されません。
- Credential Locker(PasswordVault)はユーザー名とパスワードの組に対する本記事の推奨です。
- Credential Manager(CredWrite/CredRead)はユーザー名とパスワードの組に対する本記事の推奨です。
- Credential Locker(PasswordVault)はMicrosoftアカウントを前提とします。
- DPAPIは複数マシン・複数ユーザーでの秘密共有と両立しません。
- Credential Locker(PasswordVault)は複数マシン・複数ユーザーでの秘密共有に対する本記事の推奨です。
- 管理者によるパスワードのリセットはDPAPI復号失敗の原因になることがあります。
- プロファイルの再作成はDPAPI復号失敗の原因になることがあります。
- 暗号文だけの別PCへのコピーはDPAPI復号失敗の原因になることがあります。
- ローミングプロファイルはDPAPI復号失敗を防ぎます。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。