21

小さな道具を作ろうと思っていました。ツールが何をするかは重要ではありません。重要なことは、ツールが機密情報をユーザーの HDD に保存する必要があることです。編集: 保存される情報はユーザーの情報です。アプリで配布する自分のコンテンツを保護しようとしているわけではありません。

この情報を暗号化する必要があることを理解しています。しかし、暗号化パスワードをどこに安全に保管すればよいのでしょうか? それは一種の無限再帰です...

では、Windows 上の情報を暗号化し、Windows でパスワードを安全に管理する方法はありますか? Windows と言うときは、Windows XP SP2 以降を意味します。

また、同じシステム上のユーザーが他のユーザー情報にアクセスしてはならないことに注意してください (両方が私のアプリケーションを実行している場合でも)。

この問題に対する .NET 2.0 (C#) とネイティブ (C/C++) の両方のソリューションを探しています。

4

7 に答える 7

23

Windows 上の情報を暗号化し、Windows でパスワードを安全に管理する方法はありますか?

CryptProtectData: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

.NET からの使用: http://msdn.microsoft.com/en-us/library/aa302402.aspx

歴史的に、保護されたストレージ (XP で利用可能、vista+ では読み取り専用): http://msdn.microsoft.com/en-us/library/bb432403%28VS.85%29.aspx

于 2009-01-14T10:15:05.850 に答える
6

この目的でDPAPIの使用を検討する必要があります。ユーザーごとの特別な(内部)対称鍵を使用してデータを暗号化します。この場合、システム上のユーザーごとに異なるキーが割り当てられるため、パスワードを要求する必要はありません。

欠点は、ユーザーが削除された場合やWindowsが再インストールされた場合にデータを回復できないことです(これは事実だと思いますが、よくわかりません)。その場合、パスワードから派生した「自己生成」キーを使用してデータを暗号化し、DPAPIを使用して暗号化されたレジストリ/ファイルにパスワードを保存します。

于 2009-01-14T10:36:08.693 に答える
4

ネイティブの暗号化機能を使用できます。フォルダーまたはファイルに暗号化属性を設定します (プロパティ ページから [詳細] ボタンをクリックします)。次に、ファイルにアクセスできるユーザーを設定できます (デフォルトでは、これにはファイルの作成者のみが含まれます)。このソリューションの大きな利点は、アプリケーションとユーザーの観点から完全に透過的であることです。

プログラムで行うには、Win32 API を使用して、EncryptFile()ユーザーごとの機密データを保存するディレクトリを呼び出します。今後、このディレクトリ内に新しく作成されたすべてのファイルは暗号化され、作成者 (アプリの現在のユーザー) のみが読み取り可能になります。FILE_ATTRIBUTE_ENCRYPTEDまたは、作成時に個々のファイルにフラグを使用できます。ファイルのプロパティ ページでエクスプローラーから暗号化情報を確認し、アプリで作成されたファイルが正しく暗号化され、それぞれのユーザーに制限されていることを確認できます。保存または使用するパスワードはなく、すべてが透過的です。

すべてのユーザーからデータを隠したい場合は、特別なアプリ固有のユーザーを作成して、アプリから偽装することができます。これは、ACL とともに、Windows のシステム サービスに適した手法です。

于 2009-01-14T09:57:50.097 に答える
3

アプリケーションごとのデータに設定やその他のデータを自動的に保存する方法である分離ストレージを検討することをお勧めします。MSDNを参照してください。

これは、通常の設定をレジストリに保存する代わりの方法であり、多くの場合はより良い方法です...データがどのようにファイルに保存されるかはわかりませんが、確認する必要があります。暗号化されていても、他のユーザーがアクセスできるようにします。メモリのみからアプリ。ストレージを作成した人はそれを開くことができますが、確認が必要です。

編集:

これを最後に使用したときの記憶から、アプリのすべての設定などを処理する「設定」クラスを作成することをお勧めします。このクラスには、Serialize メソッドと DeSerialize メソッドに相当するものがあり、すべてのデータを IsolatedStorage ファイルに書き込んだり、それらを再度ロードしたりできます。

この方法で実装することのさらなる利点は、属性を使用してソースのビットをマークアップし、プロパティ グリッドを使用して、設定のユーザー編集コントロールをすばやく提供できることです (プロパティ グリッドは、リフレクションを使用して実行時にクラス プロパティを操作します)。 .

于 2009-01-14T09:59:07.880 に答える
0

Enterprise Library Cryptography Application Block を参照することをお勧めします。このブログ投稿を確認してください。Windows には、データを暗号化するためのデータ保護 API が組み込まれていますが、Crypto Application Block を使用すると、より簡単になります。

于 2009-01-14T10:14:26.973 に答える
-4

ええと、あなたが達成しようとしているのは、まさに DRM が達成しようとしたことです。何かを暗号化し、ユーザーにキー (ただし難読化されています) と暗号を提供します。彼らはDVDでそれをしました。彼らはBlu-Rayでそれをしました。彼らはiTunesでそれをしました。

あなたがやろうとしていることは決して安全ではありません。あなたの平均的な素人はおそらくそれを理解することはできませんが、十分に動機付けられた攻撃者はそれを解決し、鍵、アルゴリズムを発見し、データを復号化します.

ユーザーデータを暗号化するだけの場合は、ユーザーにパスワードを尋ねてください。アプリケーションを実行しているユーザーから内部データを保護しようとしている場合は、SOL です。

于 2009-01-14T10:31:13.960 に答える
-5

ええと、パスワードをハッシュしますか? ハッシュ化されたパスワード(おそらくソルトも)だけで、マシンのどこかに実際の取引を保存する必要はありません。次に、ユーザーがパスワードを入力すると、それに対して同じ操作を実行し、ディスクに保存したハッシュ化されたものと比較します。

于 2009-01-14T10:07:19.313 に答える