DPAPI (英語: Data Protection Application Programming Interface、データ保護API) はシンプルな暗号化APIで、Windows 2000およびそれ以降のWindowsオペレーティングシステムに組み込みコンポーネントとして搭載されている。データ保護APIは様々な種類のデータについて対称暗号化(共通鍵暗号)を可能にする。Windowsオペレーティングシステムでの実際の主な用途は、非対称秘密鍵の対称暗号化を実施することで、ユーザーまたはシステムの機密情報をエントロピーの重要な寄与として扱うことである。
ほぼ全ての暗号システムにとって最も困難な試みは「鍵(キー)の管理」、特にどうやって復号鍵を安全に格納するかということである。もし鍵が平文で格納されているなら、他のユーザーは暗号化データのアクセスに使う鍵へ容易にアクセスできてしまう。もし鍵を暗号化するなら、他の鍵が必要になる、といったことなど。DPAPIはユーザーのログオン機密、あるいはシステム暗号化に関してシステムのドメイン認証機密から対称鍵を生成し、ソフトウェア開発者に暗号化手順を提供する。
DPAPI鍵は %APPDATA%\Microsoft\Protect\{SID} に記憶されているユーザーのRSA鍵を暗号化するのに使われる。SIDはそのユーザーのセキュリティ識別子である。DPAPI鍵はユーザーの秘密鍵を保護するマスター鍵として同じファイルに格納される。それは通常64バイトのランダムなデータである。
2010年にエリー・バーステイン (Elie Bursztein) とジーン・マイケル・ピコッド (Jean-Michel Picod) は ⇒Black Hat DC 2010において Reversing DPAPI and Stealing Windows Secrets Offline というタイトルでその仕組みの分析についてプレゼンテーションを行った。その発表によると、バーステインとピコッドがリリースしたDPAPlckはDPAPIで暗号化されたデータのオフライン復号を可能にする。2012年にPasscape SoftwareはブログでDPAPIの内部ロジックについてより詳細な記事を掲載し、完全なDPAPIオフライン復号・解析ツールを公表した[1]。これは先に挙げたものと異なり、いくつかの古いWindowsのバグ(例えば、Windows 2000 DPAPIの鍵を所有者のログオンパスワードを知ること無く復号できる)を利用していて、Windows 8 DPAPIデータ構造と完全に互換性がある。Windows 8ではマイクロソフトはDPAPIの処理ロジックを変更した。現在、使用されているユーザーのマスター鍵を復号するために複数のユーザー鍵が暗号鍵の生成に使われ、単一のDPAPIバッファを復号する。 DPAPIはそれ自身ではデータを格納せず、単純に平文を受け取って暗号文を返す(またはその逆を行う)役割のみを持つ。 DPAPIのセキュリティはWindowsオペレーティングシステムのマスター鍵やRSA秘密鍵を解読から守る能力に依る。多くの攻撃シナリオでは、エンドユーザーの資格情報のセキュリティ度合いに依る。メインの暗号化・復号キーはユーザーパスワードからPBKDF2ファンクションによって作られる[2]。特に大規模なオブジェクトのバイナリデータはソルト(ハッシュ化に用いる追加のデータ)やユーザー入力による外部のパスワードを必要とする方法によって暗号化されることがある。 デリゲートアクセスはCOM+オブジェクトの使用を通してのみキーが与えられる。これはIISウェブサーバーでDPAPIを使用することを可能にする。 全てのマイクロソフト製品に共通して実装されているわけではないものの、マイクロソフト製品でのDPAPIの利用はWindowsのバージョンを経る毎に増えている。しかし、旧来のマイクロソフトやサードパーティー製メーカーの多くのアプリケーションは独自の保護機構を使うものが多かった。例えば、Internet Explorer 4.0-6.0、Outlook Express、MSN Explorerは旧来の保護ストレージ(Protected Storage ; PStore)APIでパスワードなどの認証情報を格納している。Internet Explorer 7になってDPAPIを使ってユーザー認証情報を格納するようになった。[3]
セキュリティ特性
マイクロソフト製ソフトウェアでのDPAPI使用例
Windows 8の画像パスワード、PIN、指紋情報
Windows 2000以降の暗号化ファイルシステム (Encrypting File System ; EFS)
SQL Server 透過データ暗号化 (Transparent Data Encryption : TDE) サービスマスター鍵暗号化
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認証(自己ホスト時)[4]
脚注^ “ ⇒DPAPI Secrets. Security analysis and data recovery in DPAPI (Part 1)”. Passcape Software (2012年12月3日). 2016年7月3日閲覧。
^ “ ⇒Windows Password Recovery - DPAPI Master Key analysis”. 2013年5月6日閲覧。
^ Mikhael Felker (2006年12月8日). “ ⇒Password Management Concerns with IE and Firefox, part one”. SecurityFocus.com
^ “ ⇒CookieAuthenticationOptions.TicketDataFormat Property (Microsoft.Owin.Security.Cookies)”. 2015年1月15日閲覧。
外部リンク
DPAPI (データ保護 API) のトラブルシューティング - MSDN
ASP.NET と Enterprise Services から DPAPI (ユーザー ストア) を使用する方法 - MSDN
表
話
編
歴
マイクロソフトのAPIとフレームワーク
グラフィック
Desktop Window Manager
Direct2D
Direct3D (拡張)
GDI / GDI+
WPF
Silverlight
WinUI
Windows Color System
Windows Image Acquisition
Windows Imaging Component
オーディオ
DirectMusic
DirectSound
DirectX plugin
XACT
Speech API
マルチメディア
DirectX (Media Objects
Video Acceleration)
DirectInput
DirectPlay
DirectShow
Image Mastering API
Managed DirectX
Media Foundation
XNA
Windows Media
Video for Windows
ウェブ
MSHTML
EdgeHTML
RSS Platform
JScript
VBScript
BHO
XDR
SideBar Gadgets
データアクセス
Data Access Components
Extensible Storage Engine
ADO.NET
ADO.NET Entity Framework
Sync Framework
Jet Engine
MSXML
OLE DB
OPC
ネットワーク
Winsock (LSP)
Winsock Kernel
Filtering Platform
Network Driver Interface Specification
Windows Rally
BITS
P2P API
MSMQ
MS MPI
コミュニケーション
Messaging API
Telephony API
WCF
管理
Win32 console
Windows Script Host
WMI
PowerShell
Task Scheduler
Offline Files
Shadow Copy
Windows Installer
Error Reporting