DPAPI
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使用例
[編集]全てのマイクロソフト製品に共通して実装されているわけではないものの、マイクロソフト製品でのDPAPIの利用はWindowsのバージョンを経る毎に増えている。しかし、旧来のマイクロソフトやサードパーティー製メーカーの多くのアプリケーションは独自の保護機構を使うものが多かった。例えば、Internet Explorer 4.0-6.0、Outlook Express、MSN Explorerは旧来の保護ストレージ(Protected Storage ; PStore)APIでパスワードなどの認証情報を格納している。Internet Explorer 7になってDPAPIを使ってユーザー認証情報を格納するようになった。[3]
- 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 (December 8, 2006). “Password Management Concerns with IE and Firefox, part one”. SecurityFocus.com, Symantec.com. 2010年3月28日閲覧。
- ^ “CookieAuthenticationOptions.TicketDataFormat Property (Microsoft.Owin.Security.Cookies)”. 2015年1月15日閲覧。
外部リンク
[編集]- 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