そのため、最近、パスワードを保護する方法について多くの研究を行っています. 基本的なことは理解できたと思います。そのため、php でパスワードを保護する独自の関数を作成しようとしています。
しかし、パスワードのソルト化に関しては、私はやや混乱しています。ランダムな一意のソルトを作成し、それをパスワードに追加してハッシュし、最終的にハッシュされていないソルトとハッシュされたパスワード/ソルトの組み合わせをデータベースに一緒に保存します。これにより、ハッカーがデータベースとハッシュ化されたパスワードへのアクセスを取得した場合、ハッカーの検索スペースが増加します.
したがって、これはセキュリティの完全なやり過ぎのように思えますが、ソルトは常にパスワードの前または後ろに追加されています。SINGLE ユーザーのパスワードを見ると、この一意のソルトは検索スペースに影響しませんか? 各ユーザーは独自のソルトを持っているため、すべてのユーザーの全体的な検索スペースが劇的に増加します.
ユーザー名/2の長さなど、パスワード内の予測可能な半ランダムな場所にソルトを挿入するアルゴリズムを作成する方が安全ではないでしょうか? たとえば、私が提案したセキュリティ機能の手順は次のとおりです。
Create a random salt
take username length %(mod) password length
insert the salt at the spot determined
hash
実行例:
random salt = 12345
len("imauserwithalongname") % len("mypass") = 2
valueToHash = my12345pass
これで、クラッカーは php/source を見ずにソルトをどこに置くべきかわかりません (間違っていたら訂正してください)。
また、セキュリティはアルゴリズムの秘密性ではなくキーのセキュリティに依存する必要があることも知っていますが、システム全体がアルゴリズムの秘密性に依存しない限り、それに基づいてレイヤーを追加しても問題はないと思います。
編集:これを行うと、クラッカーの検索スペースが劇的に増加しますか?
また、パスワードの長さに依存する場所にソルトを配置すると、たとえユーザーごとであっても、辞書攻撃を使用する目的が損なわれるのではないでしょうか?