BCrypt生成+硬编码的Salt:这样更安全吗?

时间:2018-12-21 17:38:41

标签: cryptography bcrypt salt

我找到了一篇有关BCrypt的博客文章,我不确定将硬编码的Salt“ ^ Y8〜JJ”添加到密码中会带来什么好处?

“ hashToStoreInDatabase”包含盐和加密的密码,但不包含硬编码盐“ Y8〜JJ”。因此,如果有人窃取了数据库,则黑客用盐(包含在数据库中)和哈希密码生成自己的Rainbowtable毫无用处,因为他们从未获得硬编码的盐“ Y8〜JJ”。

(我知道保存盐和密码散列图已经很安全了,因为彩虹表很容易生成)

建议使用BCrypt吗?

引用来自:https://www.codeproject.com/articles/475262/useplusbcryptplustoplushashplusyourpluspasswords

private void SetPassword(string user, string userPassword)
{
   string pwdToHash = userPassword + "^Y8~JJ"; // ^Y8~JJ is my hard-coded salt
   string hashToStoreInDatabase = BCrypt.HashPassword(pwdToHash, BCrypt.GenerateSalt());
   using (SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(...)
   {
     sqlConn.Open();
     SqlCommand cmSql = sqlConn.CreateCommand();
     cmSql.CommandText = "UPDATE LOGINS SET PASSWORD=@parm1 WHERE USERNAME=@parm2";
     cmSql.Parameters.Add("@parm1", SqlDbType.Char);
     cmSql.Parameters.Add("@parm2", SqlDbType.VarChar);
     cmSql.Parameters["@parm1"].Value = hashToStoreInDatabase;
     cmSql.Parameters["@parm2"].Value = user;
     cmSql.ExecuteNonQuery();
   }
 }

private bool DoesPasswordMatch(string hashedPwdFromDatabase, string userEnteredPassword)
{
    return BCrypt.CheckPassword(userEnteredPassword + "^Y8~JJ", hashedPwdFromDatabase);
}

1 个答案:

答案 0 :(得分:1)

它实际上称为pepper。盐存储在DB中,而胡椒粉存储在DB中。

Wikipedia声明为;

  

胡椒的作用与盐相当,但是盐不是秘密的(仅是唯一的),可以与哈希输出一同存储,而胡椒是秘密的,因此必须不要与盐一起存储强>。哈希和盐通常存储在数据库中,但但必须将胡椒单独存储(例如在配置文件中),以防止攻击者在数据库遭到破坏时获取它们。

数据库被黑客入侵时,攻击者无法访问Pepper,结果,即使是弱密码也无法进行密码搜索。

简而言之,是的。

但是,Bcrypt很老。应该使用Argon2作为password hashing competition.

的赢家
相关问题