OK、これは奇妙な質問に聞こえるかもしれません。私に飛びつく前によく読んでください。;-)
次の状況を想像してください。
- サーバーとクライアントがあります。
- それらは SSL を使用して接続します。
- クライアントはパスワードを使用してサーバー上にアカウントを作成します。
- しかし、彼が実際にネットワーク経由でサーバーに渡すのは、パスワードのハッシュ (+salt) です (パスワードではありません)。
- サーバーは、この受信したパスワードのハッシュをDBに保存します(ソルトで再度ハッシュされます)
- ログオン時に、認証のために、ユーザーはパスワードのハッシュを再送信します (パスワードではありません!)。
わかりました、はい、これは奇妙に聞こえると思います。はい、会話全体が SSL で行われるため、パスワードのプレーンテキストを送信するだけでかまいません。はい、プレーンテキストのパスワードをハッシュ形式で安全に保存できることはわかっています。
私が推進しているポイントは次のとおりです。「あなたのパスワードを知ることはありません」と正直に言うことは、私たちのビジネスにとって有益です。
「パスワードをプレーンテキストで保存しない」と言っているわけではありませんが、実際には、決して、決してそれを知りません。あなたはそれを私たちに決して与えません。
(これが必要な理由は関係ありません。ユーザーのパスワードは、ファイルの暗号化などの他のものに使用されていると言えます)。
はい、これを行う通常の方法では、「ハッシュを行っている間、パスワードはメモリ内のプレーンテキストで5ミリ秒しか保持されない」と言うかもしれませんが、これは否定可能性に関するものです。つまり、100% パスワードを受け取っていないと言えます。
では、質問は次のとおりです。
この種のことを以前に行ったり聞いたりしたことのある人はいますか?
これを行うことの安全性への影響は何ですか?
マイナス面が見えず困っています。例えば:
- リプレイ攻撃なし (会話は SSL を使用して暗号化されているため、攻撃者はハッシュを見ることができません)
- ハッシュ自体がハッシュ化されているため、DB を参照できません。
OK、あなたは今私に飛び乗ってもいいです:)
感想、コメント大歓迎です。
ありがとう、
ジョン
更新: 明確にしたかっただけです: これが認証プロセスのセキュリティの何らかの形での改善であるとは提案していません。ただし、代わりに、サーバーからでも、ユーザーの「実際の」パスワードを秘密のままにすることができます。したがって、たとえばファイルの暗号化に実際のパスワードが使用されている場合、サーバーはそれにアクセスできません。
これが必要な理由には完全に満足しています。問題は、それが認証プロセスのセキュリティを妨げるかどうかです。