ねえ、最初に、私はmd5(md5(...、それについてのトピックはすでにあります)のようなものについて尋ねていません。
私の質問はこれです:
クライアントがパスワードをローカルに保存できるようにします。当然、プランテキストに保存したくないので、保存および/または送信する前に、ローカルでhmacを実行します。さて、これは問題ありませんが、これがすべての場合、サーバーにはhmacが保存され、クライアントはプレーンテキストのパスワードではなくhmacを送信するだけでよいため、攻撃者はサーバーから保存されたハッシュを使用できます。誰かのアカウントにアクセスするため(もちろん、誰かがデータベースへのそのようなアクセスを取得するという壊滅的なシナリオで)。
したがって、私たちのアイデアは、hmacを介してクライアントでパスワードを1回エンコードし、サーバーに送信し、そこで2回目にhmacを介してエンコードし、保存されている2回のhmacのパスワードと照合することでした。これにより、次のことが保証されます。
- クライアントは、パスワードをプレーンテキストとして保存しなくてもローカルに保存できます
- クライアントは、他のネットワークパーティについて(あまり)心配することなくパスワードを送信できます
- サーバーは、誰かがサーバーからパスワードを盗んだり、それを使用してログインしたりすることを心配することなく、パスワードを保存できます。
当然、他のすべてのもの(強力なパスワード、複塩など)も適用されますが、質問にはあまり関係ありません。
実際の質問は、これは堅実なセキュリティ設計のように聞こえますか?この方法で物事を行うことの欠陥を見落としましたか?このようなもののセキュリティパターンはありますか?
補遺:パスワードをプレーンテキストでクライアントにローカルに保存したくない理由は、悲しいことに、多くの人が依然として複数のサービスに同じパスワードを使用しているため、「実際の」パスワードを取得する方が大きくなるためです。ハッシュを盗まれるよりも、ユーザーのセキュリティ違反。