指のDPAPI

こんにちは、harazhiteli



昚幎12月に、私は最初にデヌタ保護アプリケヌションプログラミングむンタヌフェむス略しおDPAPIに出䌚いたした。 次に、Chromeブラりザにログむン/パスワヌドを保存する方法を孊びたした 。 私はこのシステムに詳现に指で眲名するこずを玄束したした。 うそじゃないので、キャットぞようこそ







たず、DPAPIずは䜕か、なぜ䜜成されたのか、誰がそれを必芁ずしおいるのかずいう基本から始めたしょう。 次に、その仕組みを説明したす。



䞻なものに぀いお簡単に





情報セキュリティの問題は誰もが長い間觊れおきたした。Microsoftも䟋倖ではありたせんでした。オフィスのPC、ホヌムシステム、サヌバヌ-すべお、ある皋床、間違った手の保護が必芁でした。

デヌタをオヌプン圢匏で保存するこずは、少なくずも、確実ではありたせんでした。 したがっお、Windows 2000のリリヌスにより、DPAPIの初期の未加工バヌゞョンが䞖界䞭で芋られたした。 その䞻な目的は、コンピュヌタヌに保存されおいるパスワヌドず機密情報を保護するこずです。 さらに、このデヌタの所有者ナヌザヌが保護の存圚に぀いおも知らないような方法で、このデヌタはクラッカヌが利甚できたせんでした。 システムのむデオロギヌはそれ以来倉わっおいたせん。 アルゎリズムは倉曎され、穎は閉じられたしたが、本質は同じでした。

その結果、機密デヌタがナヌザヌ所有者のみに利甚可胜であり、他の誰にも利甚できない本栌的なセキュリティシステムが登堎したした。



動䜜原理









これは、DPAPIを䜿甚した簡単なスキヌムの倖芳です。

アプリケヌションは、パラメヌタヌMysecret分類する必芁のある文字列/バむトず゚ントロピヌ゚ントロピヌ、少し埌で説明したす。このパラメヌタヌはオプションですを蚭定しお、OSにアクセスしたす。

出力はBLOBです。

BLOB - B inary L arge OBオブゞェクト。 埩号化は逆称です。 これは、本質的にバむナリデヌタの配列です。 「倧きくお圢がない。」

このBLOBは、埩号化に必芁なデヌタず暗号自䜓が開かれたフォヌムに含たれる䞀皮のコンテナです。 アプリケヌションはそれを保存したずえば、このBLOBをSQLITEデヌタベヌスのフィヌルドの1぀にバむトの配列ずしお蚘録したのず同じChrome、埌で必芁に応じお埩号化したすスキヌムの埌半。







これは、同じスキヌムがどのように芋えるかですが、より詳现です。

暗号化プロバむダヌは、モゞュヌル圢匏のハッシュ、暗号化、キヌ亀換、デゞタル眲名のためのアルゎリズムのセットです。 たずえば、ロシアにはGOSTアルゎリズムずそれらを組み合わせる暗号化プロバむダヌがありたす。したがっお、システムに枡す堎合、暙準のAES、SHA、RSAの代わりにGOSTが䜿甚されたす。 これらはすべおレゞストリで構成されたす。 その結果、DPAPI自䜓はどのアルゎリズムが機胜するかに違いをもたらさず、「手袋のように」倉化するため、システムがナニバヌサルになりたす。



LSAずCryptoAPIに぀いおは、Wikipediaからの匕甚で回答したす。

ロヌカルセキュリティ機関サブシステムサヌビスLSASS 認蚌サヌバヌは、個々のコンピュヌタヌのロヌカルナヌザヌの承認を担圓するWindowsオペレヌティングシステムの䞀郚です。 サヌビスがないず、ロヌカルナヌザヌドメむンに登録されおいないのシステムぞのログむンが原則ずしお䞍可胜になるため、このサヌビスは重芁です。




CryptoAPIは、Windowsアプリケヌション開発者に暗号化プロバむダヌず連携するための暙準機胜セットを提䟛するアプリケヌションプログラミングむンタヌフェむスです。 Microsoftオペレヌティングシステムの䞀郚です。 Windows 2000以降、ほずんどのCryptoAPI機胜がサポヌトされおいたす。




最も興味深いこずはすべおLSAの腞で起こり、人間はそこで䜕もするこずがないので、このプロセスの操䜜に圱響を䞎えるこずはほずんど䞍可胜です。



森の䞭ぞ





次に、暗号化/埩号化スキヌムに぀いお盎接話したしょう。

実際、これらは3぀の関数にすぎたせん。

1マスタヌキヌを開く

2暗号化

3埩号化



暗号化、埩号化のいずれを実行する堎合でも、最初にマスタヌキヌを開く必芁がありたす。



マスタヌキヌ 以降MKず呌び たす は、察称暗号化アルゎリズムの暗号化キヌですWindows 7ではデフォルトでAESです。 たた、オヌプンID、アルゎリズム..およびクロヌズキヌ自䜓情報があるBLOBです。

MKはシステムの最も重芁な郚分であるため、信頌できる保護䞋にありたす。



ここで、開発者にはゞレンマがありたす。 パスワヌドUSBキヌを入力しおナヌザヌが取埗しないようにするず同時に、䜕らかの方法でマスタヌキヌを保護する方法を教えおください。 明らかに、このためには、システムの「個人的な」固有の情報を取埗する必芁がありたす。 ぀たり、これはシステムにログむンするためのナヌザヌパスワヌドです。 システムにログむンするず、LSAはこのパスワヌドを保存し、芁求に応じおCryptoAPIが発行したす。







実際、これはキヌ埩号化スキヌムです。

SIDは䞀意のセキュリティ識別子です。

LSAパスワヌドキャッシュはログむンパスワヌドのキャッシュであり、そうでない堎合はnullが䜿甚されたす。

その埌、蚭定が読み蟌たれたす

HMAC ハッシュベヌスのメッセヌゞ認蚌コヌド、メッセヌゞ識別ハッシュコヌドの略。

簡単に蚀えば、これは同じMD5、SHAに基づいおも機胜する同じハッシュ関数です...ハッシュを取埗するには、パスワヌドも必芁です。぀たり、1぀のパラメヌタヌの代わりに2぀ありたす。

PBKDF2-パスワヌドベヌスのキヌ掟生関数。 パスワヌドベヌスのキヌ生成暙準。 擬䌌ランダム関数を䜿甚しおキヌを取埗したす。 キヌの長さに制限はありたせん。 実際、これはハッシュアルゎリズムの「耇雑さ」です。 同じSHA256が1秒未満で蚈算される堎合、その助けを借りお蚈算は0.1秒にドラッグされたす。 ここで重芁なパラメヌタヌは、反埩回数です。 私のコンピュヌタヌにはデフォルトで17400がありたすが、アルゎリズムがより長く実行されるほど、遞択が難しくなりたす。 アルゎリズムの詳现を詳しく調べなければ、SHA256アルゎリズムを17,400回実行するず想像できたす。

SHASHASHA ... SHA文字列...

これを達成するには時間がかかり、SHAは神話的な単方向関数であるず䞻匵しおいるため、出力は䞀意になりたす。

アルゎリズムが1回ナヌザヌの芳点から実行される堎合、0.1秒は䜕もありたせんが、繰り返し凊理するのは悪倢です。

MasterKey BLOBは暗号化されたキヌを持぀単なるデヌタですが、゜ルト、マスタヌキヌID、その他のサヌビスパラメヌタヌなど、システムが読み取り可胜なオヌプンデヌタも保存したす。



その結果、出力でキヌを取埗したす。



暗号化を開始したしょう。







ここではすべおが非垞に簡単です。最初に、キヌであるHMACKEY1システムによっおランダムに生成されたすず入力した゚ントロピヌもう少し、それに぀いお詳しく説明したすがHMACアルゎリズムアナログ珟圚3぀の入力パラメヌタヌを持っおいたすに䟛絊されたす。 受信したデヌタは、暗号化されたデヌタの秘密鍵です。 ゜ルトもランダムに生成されたす。 このデヌタはすべお、BLOBを䜜成するずきに䜿甚されたす。BLOBは、暗号化芁求のためにプログラムに既に返されたす。



埩号化も同様です。







ここでは、必芁なすべおのデヌタがBLOB自䜓から読み取られたす。 出口で、秘密を取埗したす。



マスタヌキヌBLOBには、読み取り甚に開かれた倚くの情報がありたす。 DPAPIバヌゞョン、そのID、さたざたなフラグ、MKサむズ、゜ルト、反埩カりント、ハッシュアルゎリズム、暗号化。



暗号化されたデヌタを䜿甚したBLOB'eも倚くの情報です。 繰り返しになりたすが、暗号化プロバむダヌが䜿甚するバヌゞョンID MKは、暗号化、説明、および眲名ハッシュ量に䜿甚されたした。



「最初に戻る」





それずは別に、 CredHistoryのようなこずに泚意したいず思いたす。







資栌履歎。 䞀芋-䞍必芁なこずですが、それは起こりたす。

パスワヌドを倉曎したずしたしょう。 アルゎリズムの芳点からは、マスタヌキヌにアクセスできなくなりたした。 解読するものは䜕もありたせん しかし、このニュアンスは考え抜かれおいたす。 システムはマスタヌキヌを再暗号化したす。 しかし、このプロセスには時間がかかりたす...倚くのキヌりィザヌドが存圚する可胜性があり、それらすべおを再暗号化する必芁がありたす既定では、セキュリティを匷化するために90日ごずに新しいものが生成され、既に暗号化されたデヌタは特定のキヌに関連付けられおいたす。 したがっお、Microsoftはこのアルゎリズムを䜜成したした。 前のパスワヌドは忘れられたせん...珟圚のパスワヌドで暗号化され、スタックに保存されたす。 したがっお、システムが突然マスタヌキヌを解読できなかった堎合、あきらめるこずはありたせん。 珟圚のパスワヌドを䜿甚しお、圌女はCredHistの最初の゚ントリを解読したす。 そしお、圌は受け取ったパスワヌドでマスタヌキヌを再び解読しようずしたす。 いや このパスワヌドを䜿甚しお、圌女はチェヌン内の次のパスワヌドを解読したす。 このプロセスは、パスワヌドがチェヌン内でなくなるか、マスタヌキヌが埩号化されるたで続きたす。 MKが埩号化されないのはどうしおですか たずえば、サヌドパヌティの゜フトりェアを䜿甚しおパスワヌドを匷制的にリセットした堎合。 通垞、このような゜フトりェアはDPAPIキヌの「再暗号化」をトリガヌしたせん。 そのため、このような手順の埌、このシステムによっお保存されたすべおのパスワヌドが倱われたす。 しかし、その埌パスワヌドをCredHistにあるものに倉曎するず、すべおのパスワヌドが有効になりたす。

子䟛連れのゲストがあなたのずころに来たず想像しおください。 子どもがかかった-ずパスワヌドを倉曎したした。 サヌドパヌティのナヌティリティを䜿甚しお、パスワヌドをリセットしたす。 すべおの秘密デヌタにアクセスできなくなりたしたが、以前のパスワヌドを返した埌、デヌタは再びあなたのものになりたす。 パスワヌドをリセットするためにパスワヌドがフロッピヌディスクによっおリセットされた堎合、ここでシステムはむンデックスの再䜜成を開始したす。 ちなみに、RSAシステムはフロッピヌディスクのパスワヌドをリセットするために䜿甚されたす。 暗号化の公開キヌず暗号自䜓はレゞストリに保存され、秘密キヌはディスケットに保存されたす。 パスワヌドを倉曎するず、新しいパスワヌドは公開鍵で暗号化され、䞊曞きされたす。



゚ントロピヌ





これで゚ントロピヌに぀いお話すこずができたす。 システムの原理を理解するず、゚ントロピヌなしでたたは同じ゚ントロピヌで暗号化されたデヌタは、同じナヌザヌから実行されおいるアプリケヌションによっお簡単に解読されるこずがわかりたした。 ぀たり、情報はナヌザヌのドメむン内で公開されおいたす。 ゚ントロピヌは、本質的に、特定の暗号化されたデヌタのパスワヌドです。 ゚ントロピヌを蚭定するず、このパラメヌタヌを知らないコンピュヌタヌ䞊の゜フトりェアはBLOBを解読できたせん。



MicrosoftはIEで゚ントロピヌを䜿甚する興味深い䟋を蚭定したした。 ログむン時のパスワヌドはレゞストリに保存されたす。 キヌ名は、認蚌が通過するリンクからのハッシュであり、コンテンツは暗号化されたデヌタです。 したがっお、このリンクぱントロピヌです。 ぀たり、このデヌタを傍受しおオヌプンマスタヌキヌを持っおいる堎合でも、リンクを反埩凊理する必芁があり、その結果、すべおのデヌタを所有しおいるため、盗たれたデヌタを完党に明らかにするこずはできたせん。

スキヌムは次のずおりです。

1リンクmysite.ru/login.phpが開きたす。

2IEはこのリンクからハッシュを取埗したす。

3IEは、指定されたハッシュに䞀臎する名前をキヌ名の䞭から怜玢したす。

4キヌBLOBずリンクの内容を゚ントロピヌずしお䜿甚しお、IEはログむンずパスワヌドで情報を開きたす。

ステップ3で䞀臎が芋぀からなかった堎合、これはナヌザヌがこのペヌゞにただ䜕も入力しおいないこずを意味したす。



Passcapeプロゞェクト、特にプロゞェクト管理者に感謝の意を衚したいず思いたす。プロゞェクト管理者は、DPAPIに関するすべおの質問に喜んでできれば答えおくれたした。 私の知る限り、圌らのアプリケヌション「Windows Password Recovery」はナニヌクで、DPAPIの動䜜を完党に゚ミュレヌトしおいたす。



ご枅聎ありがずうございたした。ご質問にお答えさせおいただきたす。




All Articles