DPAPI

DPAPI (、データ保護API) はシンプルな暗号化APIで、Windows 2000およびそれ以降のWindowsオペレーティングシステムに組み込みコンポーネントとして搭載されている。データ保護APIは様々な種類のデータについて対称暗号化（共通鍵暗号）を可能にする。Windowsオペレーティングシステムでの実際の主な用途は、非対称秘密鍵の対称暗号化を実施することで、ユーザーまたはシステムの機密情報をエントロピーの重要な寄与として扱うことである。

ほぼ全ての暗号システムにとって最も困難な試みは「鍵（キー）の管理」、特にどうやって復号鍵を安全に格納するかということである。もし鍵が平文で格納されているなら、他のユーザーは暗号化データのアクセスに使う鍵へ容易にアクセスできてしまう。もし鍵を暗号化するなら、他の鍵が必要になる、といったことなど。DPAPIはユーザーのログオン機密、あるいはシステム暗号化に関してシステムのドメイン認証機密から対称鍵を生成し、ソフトウェア開発者に暗号化手順を提供する。

DPAPI鍵は %APPDATA%\Microsoft\Protect\{SID} に記憶されているユーザーのRSA鍵を暗号化するのに使われる。SIDはそのユーザーのセキュリティ識別子である。DPAPI鍵はユーザーの秘密鍵を保護するマスター鍵として同じファイルに格納される。それは通常64バイトのランダムなデータである。

2010年にエリー・バーステイン () とジーン・マイケル・ピコッド () はBlack Hat DC 2010において  というタイトルでその仕組みの分析についてプレゼンテーションを行った。その発表によると、バーステインとピコッドがリリースしたDPAPlckはDPAPIで暗号化されたデータのオフライン復号を可能にする。2012年にはブログでDPAPIの内部ロジックについてより詳細な記事を掲載し、完全なDPAPIオフライン復号・解析ツールを公表した。これは先に挙げたものと異なり、いくつかの古いWindowsのバグ（例えば、Windows 2000 DPAPIの鍵を所有者のログオンパスワードを知ること無く復号できる）を利用していて、Windows 8 DPAPIデータ構造と完全に互換性がある。Windows 8ではマイクロソフトはDPAPIの処理ロジックを変更した。現在、使用されているユーザーのマスター鍵を復号するために複数のユーザー鍵が暗号鍵の生成に使われ、単一のDPAPIバッファを復号する。

セキュリティ特性
DPAPIはそれ自身ではデータを格納せず、単純に平文を受け取って暗号文を返す（またはその逆を行う）役割のみを持つ。

DPAPIのセキュリティはWindowsオペレーティングシステムのマスター鍵やRSA秘密鍵を解読から守る能力に依る。多くの攻撃シナリオでは、エンドユーザーの資格情報のセキュリティ度合いに依る。メインの暗号化・復号キーはユーザーパスワードからPBKDF2ファンクションによって作られる。特に大規模なオブジェクトのバイナリデータはソルト（ハッシュ化に用いる追加のデータ）やユーザー入力による外部のパスワードを必要とする方法によって暗号化されることがある。

デリゲートアクセスはCOM+オブジェクトの使用を通してのみキーが与えられる。これはIISウェブサーバーでDPAPIを使用することを可能にする。

マイクロソフト製ソフトウェアでのDPAPI使用例
全てのマイクロソフト製品に共通して実装されているわけではないものの、マイクロソフト製品でのDPAPIの利用はWindowsのバージョンを経る毎に増えている。しかし、旧来のマイクロソフトやサードパーティー製メーカーの多くのアプリケーションは独自の保護機構を使うものが多かった。例えば、Internet Explorer 4.0-6.0、Outlook Express、MSN Explorerは旧来の保護ストレージ（）APIでパスワードなどの認証情報を格納している。Internet Explorer 7になってDPAPIを使ってユーザー認証情報を格納するようになった。

Windows 8の画像パスワード、PIN、指紋情報
Windows 2000以降の暗号化ファイルシステム (Encrypting File System ; EFS)
SQL Server 透過データ暗号化 () サービスマスター鍵暗号化
Internet Explorer 7
WindowsメールおよびWindows Live メール
IISにおけるSSL/TLS
Windows 2000およびそれ以降のEAP/TLS（VPN認証）とIEEE 802.1X（Wi-Fi認証）
Windows XP以降のユーザー名とパスワードの保管（資格管理マネージャー）
.NET Framework 2.0以降のSystem.Security.Cryptography.ProtectedDataクラス
Microsoft.Owin (Katana) Cookie認証（自己ホスト時）

脚注

外部リンク
 DPAPI (データ保護 API) のトラブルシューティング - MSDN
 ASP.NET と Enterprise Services から DPAPI (ユーザー ストア) を使用する方法 - MSDN
 Windows Data Protection API (DPAPI) white paper by NAI Labs
 Data encryption with DPAPI
 Use DPAPI to encrypt and decrypt data
 System.Security.Cryptography.ProtectedData in .NET Framework 2.0 and later
 Discussion of the use of MS BackupKey Remote Protocol by DPAPI to protect user secrets

マイクロソフトのAPI
セキュリティソフト
パスワード管理
Windows NT系
Windowsのセキュリティ技術