知識マップ: Windowsアプリの機密情報保存 - DPAPIで平文設定を避ける

記事「Windowsアプリの機密情報保存 - DPAPIで平文設定を避ける」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事はDPAPI(ProtectedData)を使ってWindowsデスクトップアプリの秘密情報(接続文字列やAPIトークンなど)を平文設定より安全に保存する方法を扱います。平文保存や鍵を暗号文と同じ場所に置く自前暗号は設定ファイル単体の流出でそのまま秘密が漏れますが、DPAPIは復号主体をWindowsユーザーまたはコンピューターに結び付けることでこれを軽減します。通常のデスクトップアプリはCurrentUserスコープを基本にし、LocalMachineは信頼された単一用途のWindowsサービスなど用途を絞るべきです。ただしパスワードリセットやプロファイル再作成、暗号文だけの別PCへのコピーは復号失敗の原因になり、逆にローミングプロファイルなら鍵材料も一緒に移動するため別PCでも復号できます。ユーザー名とパスワードの組を保存したい場合や複数マシンでの秘密共有が必要な場合は、DPAPIよりCredential LockerやCredential Managerの方が適しています。

DPAPIによるWindowsアプリ秘密情報保護の知識マップDPAPIがCurrentUserとLocalMachineのスコープで復号主体を切り替えられること、平文保存や自前暗号がもたらす漏えいリスクをDPAPIが軽減すること、Credential LockerやCredential Managerとの使い分け、復号失敗を招く運用上の落とし穴の関係を示す図原因になり得る軽減する原因になり得る用いるのは非推奨で構成できるで構成できる推奨される対応推奨される対応用いるのは非推奨原因になり得る推奨される対応用いるのは非推奨推奨される対応推奨される対応前提とする両立しない推奨される対応原因になり得る原因になり得る原因になり得る防止するDPAPIアプリの秘密情報秘密情報の平文保存設定ファイル単体の流出による秘密漏えい鍵を暗号文と同じ場所に置く自前暗号全クライアント共通の長期秘密DataProtectionScope.CurrentUserDataProtectionScope.LocalMachine対話ユーザーのデスクトップアプリWindowsサービスDPAPI復号失敗ユーザー名とパスワードの組Credential Locker(PasswordVault)Credential Manager(CredWrite/CredRead)Microsoftアカウント複数マシン・複数ユーザーでの秘密共有管理者によるパスワードのリセットプロファイルの再作成暗号文だけの別PCへのコピーローミングプロファイル

概念間の関係(全21件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

DPAPI
実行中のマシン上でアプリの秘密情報を保護するWindowsのデータ保護API。
アプリの秘密情報
業務アプリが扱う接続文字列・APIキーなどの秘密情報。ログオン済みマシンではドライブ暗号化では守れない。
秘密情報の平文保存
APIキーや接続文字列などの秘密情報を設定ファイルにそのまま平文で保存すること。ファイルを読まれた時点で秘密がそのまま漏えいする。
鍵を暗号文と同じ場所に置く自前暗号
AES等で自前暗号化しつつ、復号鍵を同じ設定ファイルやバイナリに置く実装。鍵管理をアプリ自身が担うため平文に近い強度しか得られない。
DataProtectionScope.CurrentUser
DPAPIで保護したデータの復号主体をそのWindowsユーザーに限定するスコープ指定で、通常のデスクトップアプリで基本となる。
DataProtectionScope.LocalMachine
DPAPIで保護したデータを同じマシン上で動く任意のプロセスから復号可能にするスコープ指定で、共用端末では危険になりやすい。
Windowsサービス
ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。
Credential Locker(PasswordVault)
ユーザー名とパスワードの組をOSが管理する形で保存するWinRTの資格情報保管APIで、1アプリあたり20件まで、かつMicrosoftアカウントで端末間ローミングされる。
Credential Manager(CredWrite/CredRead)
wincred.hのWin32 APIで資格情報をOSが管理するストアへ保存・取得する仕組みで、ローミングはせず現在のトークンのログオンセッションに紐づく。
管理者によるパスワードのリセット
管理者がユーザーのWindowsパスワードをリセットする操作。DPAPIの保護に使われる鍵材料への紐付けが外れ、保護済みデータへアクセスできなくなることがある。
プロファイルの再作成
Windowsのユーザープロファイルが削除され新規に作り直されること。新しいプロファイルは別の鍵材料を持つため、以前のDPAPI暗号文は復号できない。
暗号文だけの別PCへのコピー
DPAPIで保護した暗号文だけを、鍵材料のあるユーザープロファイルを伴わずに別のPCへコピーすること。CurrentUserスコープでは復号に必要な鍵材料が元のプロファイル側にあるため読めない。
ローミングプロファイル
ユーザーのプロファイルをネットワーク上に保持し、ログオンした別のコンピューターでも同じプロファイルとして読み込まれる仕組み。鍵材料もプロファイルと一緒に移動する。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。