現在、私はPHPをいじっているだけですが、拡張したいアイデアに出くわし、あなたの意見でそれがどれほど安全であるか、実用に耐えられるように改善するにはどうすればよいかを知る必要があります.
これは、パスワードをデータベースに保存する方法です。
プレーンテキストパスワード -> ハッシュパスワード (私はワールプールを使用しますが、実際にはどの方法でも機能します) -> ハッシュされたパスワードをシャッフル/スクランブルします (str_shuffle() 関数を使用)。
ユーザーのパスワードをこのようにデータベースに保存することで、データベースが侵害された場合に、攻撃者がデータベース内の壊れたパスワード ハッシュを元に戻せないようにします。(ある意味で、ハッシュであるランダムなテキストをどのように逆にすることができるのでしょうか?-同じ文字を共有するハッシュのリストを比較することで、可能性のリストを作成できると確信しています。)
ログインフォームに入力したユーザーのパスワードが正しいかどうかを確認する方法 (データベース内の壊れたハッシュと比較して) は、両方の文字列/パスワードで個々の文字 + 数字 (af & 0-9) を数えて、一致する場合は、正しくログインしていると思います。
繰り返しになりますが、これがあなたの意見でどの程度安全であるか、また実用に耐えられるようにするにはどうすれば改善できるかを知りたいです。(可能であれば。)また、「可逆」ハッシュを回避するために最善を尽くしたいと思います。(つまり、パスワードが一致することを保証する独自の方法を作成するというアイデアです。攻撃者がデータベース内のパスワードを元に戻すことが不可能になることを完全に保証するために、最善の推測の仮定に近づけたいと考えています。
& はい、これがばかげていることはわかっています。セキュリティ上の欠陥を修正するのではなく、さらに多くの欠陥を引き起こす可能性が高いからです。しかし、これは私がふざけているだけであり、おそらくそれを実用的にしたいと考えています。
他の情報:
1) パスワードは一意のソルトで保存されます (1 つのアカウントが同じソルトを共有するわけではありません)。
2) パスワード ソルトは常に変更されます (ユーザー アカウントでログインが成功するたびに、データベース内のユーザー ソルトが変更されます。データベース内のハッシュを変更するためにこれを行い、パスワードの衝突の頻度を減らします (願わくば) ) & また、不要なユーザーが同じ間違ったパスワードを何度も使用してログインするのを防ぐためです (パスワードを見つけた場合、これを達成する唯一の方法は、ログイン システムが脆弱であるブルートフォースまたは「推測」することです)。
パスワードの衝突とは、「hello」と「blue」という単語がまったく同じ文字数を共有している可能性がわずかにあることを意味します (説明したように、個々の文字と数字を数えて比較し、正しいパスワードであると想定します) .)
3) また、ハッシュ化されたパスワードの最初の 3 文字/数字を str_shuffle の影響を受けないようにして、パスワードが正しいことを確認するのにも役立つかもしれません。(2 つのチェックを作成することにより、1) 両方の文字列が同じ FIRST 3 CHARS/Numbers & 2 を共有しているかどうかをチェックし、2) 次に、各文字列の文字数を比較します。(パスワードの衝突が頻繁に発生しないことを願っています)。
4) 明らかに、他のセキュリティ対策が追加されます (つまり、最大ログイン試行数、captcha など。自動化されたブルートフォース攻撃から保護し、ハッカーが可能なパスワードまたは実際のパスワードを見つけるのを困難にします)。
私はこれの PoC を成功させました。パスワード衝突の可能性を確認するために、辞書攻撃/ブルート フォース攻撃に対して PoC をまだテストしていませんが、それは魅力のように機能します。& それらの頻度。
「役に立たない」情報をたくさん述べた場合は、無視してください。私はこれを合理的に説明するために最善を尽くしています。