複数のアルゴリズムを使用すると、パスワードがより安全になりますか?(以下?)
明確にするために、私はこのようなことをすることについて話しているのではありません:
key = Hash(Hash(salt + password))
私は2つの別々のアルゴリズムを使用し、両方を一致させることについて話しています:
key1 = Hash1(user_salt1 + password)
key2 = Hash2(user_salt2 + password)
次に、認証時に両方を一致させる必要があります。これは衝突の一致を排除する方法として提案されているのを見てきましたが、「最も弱いリンク」シナリオを作成したり、ユーザーデータベースを解読しやすくする情報を提供したりするなど、意図しない結果について疑問に思っています。この方法では、より多くのデータが提供されるためです。単一のキーが行います。たとえば、情報をハッシュで組み合わせて、より簡単に見つけることができます。また、衝突が本当に排除された場合、理論的には、一致するパスワードだけでなく、実際のパスワードを総当たり攻撃する可能性があります。実際、システムを総当たり攻撃するためには、そうする必要があります。
私は実際にこれを実装する予定はありませんが、これが実際にシングルの標準的な方法よりも改善されているかどうかに興味がありkey = Hash(user_salt + password)
ます。
編集:
多くの良い答えがあるので、ここで推測すると、これは振り返ってみると明らかなはずですが、2つのアルゴリズムの弱い方の一致を他方に対して試すことができるため、両方を使用して最も弱いリンクを作成します。たとえば、弱い(速い)MD5とPBKDF2を使用した場合、最初にMD5をブルートフォースし、次に他の一致を試します。したがって、MD5(またはその他)を使用すると、実際に状況が悪化します。また、両方がより安全なセット(bcrypt + PBKDF2など)の中にある場合でも、どちらかが壊れることへの露出が2倍になります。