2012-02-15 41 views
2

パスワードを暗号化する方法、symetricとasymetricの暗号化などについて多くの脅威があります。アプリケーションにパスワードを保存

私は単純なprobemを持っています。ユーザーがsqliteデータベースに接続するたびにパスワードを入力する必要がある場合は、すべて問題ありません。

問題は、アプリケーションにパスワードを保存して、sqliteデータベースに接続するたびに入力する必要がないことです。

私はパスワードを暗号化してどこにでも暗号化されたパスワードを保存できることは知っています。しかし、それは、他のどこかでそのパスワードを解読するために第2のパスワードを保存する必要があることを意味します。

このプロセスを繰り返して、2番目のパスワードを暗号化できますが、そのパスワードを暗号化解除するために必要な暗号化されていないパスワードを再度残します。

私の質問はどこですか?私は他のパスワードを暗号解除するために必要な最終パスワードをどこに保存する必要がありますか?そのパスワードを置く最も安全な場所はどこですか?あなたが最後の部分を理解しない場合


は、ここで私は最後の部分で説明しようとしたものの一例である:

さんが言ってみましょう:データベースをオープンする

パスワードは次のとおりです。1234

私はそのパスワードをsomeKeyというキーで暗号化し、そのパスワードはabcd

私は、キーsomeKeyabcd暗号化を解除場合、私は、私は、キーsomeKeyで再びabcdを暗号化することができ、私はxy#8をunencryptingによって1234パスワードを取得することができます場合、私はついにxy#8

を得ることができます1234

を取得する必要がありますその後、キーsomeKeyと私は1234

を得るために abcdが、私はその後、同じキー someKeyとその暗号化を解除します取得します

このプロセスを何回繰り返すかは関係ありませんが、暗号化されていない鍵someKeyがアプリケーションのどこかで終わることになります。私がその鍵を保管する必要がない唯一の方法は、ユーザーがデータベースに接続するたびにパスワードを要求することです。

文字列someKeyをできるだけ隠してアプリケーションに保存するのが最も安全な場所はどこですか?

+1

http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx – SLaks

+0

なぜデータベースに最初にパスワードが設定されているのですか? – SLaks

+0

私は、アプリケーションを使用するユーザーに柔軟に対応したいと考えています。私は、データベースがパスワードを持っていること、パスワードを持っていないこと、パスワードを持っていることをプログラムに覚えさせて、誰かがdata.dbファイルを盗むと開くことができないようにする必要があります。 –

答えて

3

ProtectedDataクラスを使用してパスワードを暗号化する必要があります。
これは、Windowsがあなたのために鍵を保管します。

ユーザー単位の暗号化を指定し、ユーザーにログインパスワードがある場合、Windowsはログインパスワードを使用して暗号化キーを作成します。

詳細については、DPAPIを参照してください。

関連する問題