1

Rijndael を使用して、ユーザーが選択したパスワードを使用してファイル/フォルダーを暗号化および復号化するプログラムを作成しています。現在、ユーザーが何かを暗号化したい場合、パスワードを入力する必要があります。そのパスワードは暗号化に使用され、ユーザーがファイル/フォルダーを復号化する準備ができたら.

ただし、ユーザーがプログラムの「設定」部分で一度だけパスワードを入力できるようにする「マスターパスワード」が必要です。その後、プログラムはすべての暗号化/復号化にそのパスワードを自動的に使用します。これにより、暗号化/復号化するたびにパスワードを入力する必要がなくなります。

さて、このようなプログラムはさまざまな種類の攻撃を受けやすいため、ユーザーの「マスター パスワード」を安全に保存して、誰かがそれを取得できないようにするにはどうすればよいでしょうか? プレーンテキストでプログラムに保存することは明らかに良い考えではないため、私が選択してプログラムに保存したのパスワードでパスワードを暗号化/復号化できます。

ただし、マスターパスワードを暗号化/復号化するために私が選択したパスワードに誰かがアクセスした場合、マスターパスワードを復号化することができますが、これは良くありません。

それで!プログラムはどのようにしてこれを安全に行うのですか?

現在、「マスターパスワード」を、自分で選択したパスワードを使用して暗号化し、ユーザースコープの設定に保存することで保存しています。これが良い考えではないと思われる場合は、その理由を教えてください。また、私が現在実装しているプロセスについて何を変更しますか?

ありがとうございました!

4

5 に答える 5

3

これを確認してください: http://www.redkestrel.co.uk/Articles/StoringSecrets.html

オプションについての素晴らしい記事です。

そうは言っても、あなたのユースケースは、EFSを介してWindows自体によってすでにかなりネイティブにカバーされていると思います.... http://technet.microsoft.com/en-us/library/cc700811.aspx

1 つ付け加えておきたいことがあります。マシンに物理的にアクセスできる人から「秘密」を守ることは基本的に不可能です。これは、ネイティブの暗号化方式をサポートするハード ドライブでも何度証明されています。

あなたができることは、彼らが何をしているのかわからない人にとっては、やや難しくすることだけです.

根本的な問題は、何かが復号化キーにアクセスできる必要があるということです。それがマシンの BIOS であろうと、ハードドライブのファームウェアであろうと、あるいは DPAPI によって隠されたフォルダに保存されていようと. つまり、唯一の効果的な方法は、ファイルを暗号化/復号化するときに、必要な資格情報をユーザーに提供させることです。

これらの認証情報が十分に短い場合、ブルート フォースを使用してアクセスすることが可能です。現時点では、128 ビット以上の最小キー長を使用することをお勧めします。もちろん、一般的な文字の使用に制限されている場合は、テストするビット数が大幅に減少します。また、ハッキング辞書に見られるような値を許可すると、クラックにかかる時間はさらに短縮されます。

もう 1 つの問題は、キーロガーです。インストールされている場合 (そしてほとんどのユーザーから隠すことができる場合)、攻撃者がしなければならないことは、ユーザーが復号化パスワードを入力し、それを関係者に転送するのを待つことだけです。

本当に偏執狂的な人のために、キーボードが入力したときに発する音だけに基づいて、入力したものを検出できるデバイスがあります。他の人にとっては、マシンがシャットダウンされた後でも、RAM は一定期間状態を維持します...

それで、これはどういう意味ですか?まず、暗号化/復号化リクエストごとに資格情報を提供するように依頼する必要があります。次に、キーロガーがインストールされていないことを確認する必要があります。第 3 に、資格情報は簡単に覚えられるものであってはなりません。第 4 に、コンピューターを物理的にアクセス可能な場所に置くことはできません。第 5 に、キーボードも固定する必要があります...

これらすべてが、コンピューター上にある場合、他の誰かがそれを入手できるという状況になります。

于 2011-07-10T21:41:01.773 に答える
0

SecureStringクラスを使用してマスターパスワードをメモリに保存することを検討してください。

于 2011-07-10T21:35:00.670 に答える
0

ユーザーのパスワードを永続化しないでください。ハッシュを取得し、必ずソルトしてください。ハッシュを使用して、ファイルを暗号化および復号化します。ユーザーがパスワードを忘れた場合、パスワードを回復することはできませんが、ファイルを復号化することはできます。これは、パスワードを提供せずにファイルを復号化するために、誰かがアプリをハッキング/パッチすることに対してアプリが脆弱になることも意味します。

暗号化方法が標準的で、文書化されており、明らかであり、よく知られている場合、ハッカーがハッシュを読み取ってそれを使用してファイル自体を復号化するのを防ぐために、次のようにすることができます。保存されたハッシュを他の情報とともに使用して、ファイルの暗号化/復号化に使用し、永続化しない新しいハッシュ。他の情報は、ファイルのサイズ、作成日などで構成されている可能性があります。ハッカーはこの情報を使用できますが、アプリが必要であることに気付く前に、アプリをハッキング/リバース エンジニアリングする必要があります。技術的には、これらのキーは見えないように隠されているため、隠蔽によるセキュリティです。

于 2011-07-10T22:10:58.007 に答える
0

これについて率直に言います。セキュリティはセキュリティの専門家に任せましょう。セキュリティは簡単ではなく、その分野の専門家であると思われる人々にとっても、正しく理解することは非常に困難です。

ユーザーが安全であることを期待している機密データを本当に保存する必要がある場合、SO でその方法を尋ねることは、間違いなく良い兆候ではなく、進むべき道ではありません。専門的なガイダンスを求めるか、市場または Windows 自体で入手可能な十分にテストされた実装の使用を検討する必要があります。

于 2011-07-10T21:51:40.593 に答える
0

パスワードを紛失したときに Web サイトがパスワードを教えず、新しいパスワードを要求する理由を知っていますか?
彼らはそれを知らないからです。はい、彼らはそれを知りません。彼らはそれをハッシュし、それを適切にハッシュして、データベース内のハッシュに対して入力パスワードのハッシュのみをチェックできるようにします。

なんでそんなこと?
安全に保管できないからです。
安全に暗号化することはできません。

これは同様のケースです。
最善の方法は、マスター パスワードを使用しないことです。

ファイルを暗号化するときは、パスワードを要求し、パスワードのハッシュで暗号化します。
復号化するときは、パスワードを要求して復号化を試みてください
失敗したらダメです。
大丈夫ならそれが正解です。

キーを確認するために使用できるファイルの内容の前に、いくつかの (短い) ダミー データを追加できます。


これを使用してマスター パスワードを保存しようとすると、セキュリティの無限ループに陥ることになります。これはお勧めできません。
パスワードを暗号化し、使用するキーを暗号化し、最初のキーの暗号化に使用するキーを暗号化します。

編集:この回答の落胆した性質については申し訳ありませんが、あなたがする必要があることは本当に不可能です。

于 2011-07-10T22:25:53.123 に答える