2011-12-29 10 views
4

ユーザーパスワードを保存する方法については、スタックオーバーフローに関する多くの質問があります。もちろん、パスワードをハッシュしてハッシュを比較するのが一般的なアドバイスです。ハッシング時にパスワードをデータベースに保存する

しかし、人が自分の環境に展開するシュリンクラップイントラネットアプリケーション(SharePointなど)を構築しているとします。また、HTTP経由で外部サービスにアクセスするためにユーザー名とパスワードの組み合わせが必要であるとします(APIキーまたは連携セキュリティに依存するソリューションはサポートされていません)。

この場合、私たちが呼び出したWebサービスに元のパスワードを渡す必要があるため、パスワードをハッシュできません。暗号化は2番目に優れたソリューションですが、暗号化キーにはどのようなものが使用されますか?攻撃者がデータベースを侵害した場合、おそらく最初にデータを暗号化するために使用される鍵にアクセスできますか?

保存されたパスワードのプレーンテキストバージョンを取得することが本当に必要な場合は、どのようにして問題を最も安全に解決しますか?

答えて

2

これは実際には本当に興味深い質問です。私は参加します。

あなたはそれを格納するときに暗号化する必要があります。どのように見ても、プレーンテキストで保存するよりも優れています。攻撃者がSQLインジェクション広告がdbをダンプしたと判断した場合、彼はまだ暗号化キーを保持していないとしましょう。一方、彼がサーバにアクセスすると、おそらく暗号化キーが見つかるでしょう。

これを少し改善するには、暗号化キーをサーバー構成に保存します。 Apacheを使用していると仮定すると、SetEnvを使用できます。

私の環境では、Apacheの起動時に暗号化キーを入力する必要があります。これはen環境変数として保存されるため、キーは実際に自分のサーバーのどこにも格納されません。

パスワードを解読して100%安全になるようにユーザーがキーを入力する必要がない限り、方法はありません。

1

質問が逆転しました。問題は、消費者がパスワードを「見る」ようにする方法ではない。問題は、消費者に認証を確認させる方法です。

お客様の実装では、消費者がパスワードとユーザー名を提供し、「はい」または「いいえ」のいずれかを指定できる手段を提供します。その後、暗号化された(ハッシュされていない)パスワードをデータベースに格納し続けます。

+0

アプリケーションにパスワードが表示されません。 Webサービスを呼び出すときにパスワードを基本的なHTTP資格情報として送信します。アプリケーションにWebサービスを「追加」すると、ユーザーは一度パスワードを入力します。 –

2

ユーザーのパスワードから暗号化キーを生成できます。 (外部サービスのパスワードではなく、サービスのパスワード)平文でパスワードを保存していないので、データベースを侵害した攻撃者はパスワードを解読できません。欠点は、外部パスワードが必要なときはいつでも、パスワードを(サービスのために)尋ねなければならないことです。

+0

悲しいことに、この場合は毎回ユーザーにパスワードを入力させることはできませんが、本当に良いアイデアでした! –

関連する問題