私は bcrypt を使用してソルトとハッシュ パスワードを生成していますが、それが非常に安全に行われているとは思いません。次のコードを使用すると:
bcrypt.genSalt(10, function(err, salt) {
user.salt = salt;
bcrypt.hash(password, salt, function(err, hash) {
user.hashed_password = hash;
console.log(user.salt);
console.log(user.hashed_password);
user.save(function(err) {
if (err) console.log(err);
console.log("saved");
});
});
});
一例では、salt は次$2a$10$mFFjRpY1Vrq7Fy1fFp0fMO
のとおりです。hashed_password は次のとおりです。$2a$10$mFFjRpY1Vrq7Fy1fFp0fMOVnlv9cKgAFdCQ5xdtlP6UoKz90i1FMu
ハッシュされたパスワードの先頭はソルトとまったく同じです。攻撃者がソルトにアクセスできる場合、ハッシュされたパスワードからソルトを削除し、ブルート フォースまたは所定のハッシュ値のテーブルを使用してパスワードを決定することはできませんか?
私はいつも、これがパスワードをハッシュする順序であるべきだと思っていました:
hash(salt + password)
いいえ:
salt + hash(password)