Сгенерированный BCrypt + жестко закодированная соль: это больше безопасности? - PullRequest
0 голосов
/ 21 декабря 2018

Я нашел сообщение в блоге о BCrypt, и я не уверен, что является преимуществом добавления жестко закодированной соли «^ Y8 ~ JJ» к паролю?

«hashToStoreInDatabase», содержащая сольи зашифрованный пароль, но не жестко запрограммированная соль Y8 ~ JJ.Итак, если кто-то украдет базу данных, для хакера бесполезно сгенерировать собственную радужную таблицу с солью (содержащейся в базе данных) и хешированным паролем, потому что они никогда не получат жестко запрограммированную соль '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 голосов
/ 21 декабря 2018

На самом деле это называется перец .Соль хранится в БД, но перец хранится где-то еще, а не в БД.

Википедия гласит:

Перец выполняет сравнимую роль с солью, но пока сольне является секретным (просто уникальным) и может храниться вместе с хешированным выводом, перец является секретным и не должен храниться с выводом .Хеш и соль обычно хранятся в базе данных, , но перец должен храниться отдельно (например, в файле конфигурации), чтобы предотвратить его получение злоумышленником в случае взлома базы данных.

Когда база данных взломана, злоумышленник не может получить доступ к перцу, в результате чего поиск пароля будет невозможен даже для слабых паролей.

Короче говоря, да, рекомендуется.

Тем не менее, Bcrypt стар.В качестве победителя конкурса хеширования паролей следует использовать Argon2.

...