HMAC SHA1 использует одно и то же значение для ключа и сообщения - PullRequest
0 голосов
/ 20 января 2012

Я работаю над кодом безопасности C # и собирался заменить его, когда увидел, что он использует класс HMACSHA1.Код используется для хеширования пароля для хранения в базе данных.Я обратил внимание на то, что в качестве ключа HMAC он использует пароль, для которого и рассчитывается хэш.Итак, все ли в порядке с данными и ключом, и хэшем?Это делает безопасность сильнее или слабее?

код psuedo:

string pwd = "My~!Cra2y~P@ssWord1#123$";

using (HMACSHA1 hasher = new HMACSHA1())
{
    hasher.Key = encoding.GetBytes(pwd); // using password for the key
    return BytesToHex(hasher.ComputeHash(encoding.GetBytes(pwd))); // computing the hash for the password
}

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Он такой же сильный, как несоленый хеш SHA1 с двумя итерациями. то есть довольно слабый.

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

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

Вы должны добавить соль и использовать более медленный метод хеширования, такой как PBKDF2 и bcrypt. Класс .net Rfc2898DeriveBytes реализует PBKDF2, поэтому я рекомендую использовать его.

1 голос
/ 20 января 2012

Я бы не рекомендовал HMACSHA1 для хранения паролей базы данных, но установка ключа, совпадающего с паролем, ослабляет полезность ключа для этой цели.Предполагается, что ключ является секретным и используется для определения того, изменились ли базовые хешированные данные.

Для паролей следует использовать комбинацию SALT + Password для повышения безопасности алгоритмов HASH.Я обычно использую соль, уникальную для пользователя, но не совпадающую с паролем, например, номер пользователя или IP-адрес начальной регистрации.

Кроме того, имейте в виду, что SHA1 больше не рекомендуется в качествеалгоритм хэширования.

Для более ясного понимания можно ссылаться на MSDN .

Это свойство является ключом для алгоритма хеширования с ключами.

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

HMAC можно использовать с любой итеративной криптографической хеш-функцией, такой как MD5 или SHA-1, в сочетаниис секретным общим ключом.Криптографическая стойкость HMAC зависит от свойств базовой хэш-функции.

Любое изменение данных или значения хеш-функции приводит к несоответствию, поскольку знание секретного ключа требуется для изменения сообщения и воспроизведенияправильное хэш-значение.Поэтому, если исходные и вычисленные значения хеша совпадают, сообщение аутентифицируется.

...