2011-09-06 8 views
5

WINAPIを使用しているWindowsマシンのログインユーザーのパスワードを使用して、特定のデータを暗号化します。私はトークン(またはそのようなもの)を使用する関数を探していましたが、見つけられませんでした。ユーザーのパスワードを使用した暗号化

誰でもその方法を知っていますか?

ありがとうございます! :-)

+1

ただ、これを明確にする:あなたは最終的にあなたが正しい暗号化しているデータを回復することができるようにしたいですか?あなたはユーザーのパスワードを保存しようとしていませんが、それを使って暗号化キーを派生させようとしていますよね? –

+0

絶対に正しく! – TCS

答えて

3

私が前にDPAPIを聞いたことがなかったので、私は、以前にこの答えを書かれたが、その後再検討していました。しかし、さらに検討すると、私は以下の意見を述べたいと思います。ここでの重要な序文は、すべてあなたのニーズに依存するということです。二つの相反する可能性が頭に浮かぶ:

  1. あなたはあなたのユーザー完全な保護と利用者が唯一の彼女は関係なく、状況を復号化しないことができるようになります信頼できる暗号化を提供したいと考えています。

  2. あなたはエンタープライズITマネージャーであり、すべての従業員が緊密につながっています。ワークフローの一部としてビジネスデータを暗号化して、お互いのデータを見ることができないようにしたいと考えていますが、管理者はすべてのデータを喜んで読むことができます。

状況(2)にいる場合は、今すぐ読んでから、そのケースに適したDPAPIをお試しください。シナリオ(1)を好むなら、下の私の元の答えをお読みください。


これはおそらく良い考えではありません。理由は次のとおりです。

実際のパスワードは、Windows 3.11などがない限り、システムに保存されません。代わりに、パスワードのハッシュだけが保存され、ログイン時にユーザーが入力したパスワードがハッシュされ、保存されたハッシュと比較されます。

システムから保存されたハッシュを取得することができます(たとえば、管理者権限を持っている場合)。ただし、これが唯一のデータであれば、実際のパスワードではなく、その暗号化キーがそのハッシュから派生します。したがって、システムへのアクセス権を持つ誰もが格納されたハッシュに到達し、そこから比較的簡単に暗号化キーを導き出すことができます。

要するに、しないでください。ユーザーにデータのための専用の新しいパスワードを要求し、そのパスワードのみに使用します。

+0

DPAPIを使用しても、ユーザーに専用のパスワードを要求することができます。これがCryptProtectDataのオプションのエントロピーパラメータです。 –

+0

はい、OPはログインパスワードを特に使いたいと思われます。あなたは、(1)の実装としてDPAPIを使うことができます。 –

+0

合意。あなたの最後の段落にいくつか重点を置いてみましょう:ログオンパスワードではなく専用の**パスワードを求めて、それを明確にしてください。パスワードを入力するようにユーザーに指示してください。 –

7

Windows Data Protection APIはあなたの必要とするように聞こえる。 CryptProtectData and CryptUnprotectData関数は、現在のユーザーのログオン資格情報を使用して暗号化を実行します。

+0

私は疑問に思っています:システム上の管理者は、システム上のどのユーザーによっても保護されていたデータを「保護しない」ために十分な情報を回復できますか?この記事では、資格情報は本質的に単なるパスワードハッシュであると述べています。 –

+0

@Kerrek:ログオン資格情報を使用します。オプションのエントロピーパラメータは、オプションである。管理者は誰にもなりすますことができますが、DPAPIは偽装の下では機能しません(私は前にこれを使用することをあきらめる必要がありました)。それは働くために寛大であるかもしれないが、それはいくらか努力を要する。 –

+0

私はもう少し低レベルを意味します:暗号化は、パスワードハッシュをキーとして使用する既知の暗号であるため、管理者はシステムからすべてのハッシュを取り出し、ブロブを直接復号化できますか? –

0

独自のログインアルゴリズムを設計する代わりに、Kerberos(Linuxベースの認証サーバー、またはKerberosを使用する他のサーバー)/ LDAPフレームワーク(Windowsサーバー)を使用します。

WindowsプラットフォームSDK &サードパーティライブラリには、これらのフレームワークを持つコネクタがあります。 KerberosについてのMSDNで

詳細情報:http://msdn.microsoft.com/en-us/library/ff649429.aspx

関連する問題