2016-11-16 2 views
6

Я использую данные по умолчанию, предоставленные ASP.NET 4.5 MVC и Entity Framework. Я могу создать пользователей с паролями, и хешированный пароль появится в базе данных. Я пытаюсь выяснить, генерируется ли этот хеш с использованием алгоритма SHA1 с более длительным доверием или алгоритма SHA2 (будь то SHA256, SHA512 и т. Д.).Использует ли ASP.NET SHA256 или SHA1?

Статьи, которые, кажется, говорят, что по умолчанию SHA256:

https://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770148

http://kosmisch.net/Blog/DotNetEssential/Archive/2015/2/1/aspnet-membership-default-password-hash-algorithms-in-net-4x-and-previous-versions.html

статей, которые, кажется, говорят, что по умолчанию в SHA1:

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/consumer-apis/password-hashing

https://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

Когда я по цепочке вниз, я в конечном итоге внутри класса PasswordHasher.cs -> HashPassword() -> Crypto.HashPassword(), который я могу видеть, использует Rfc2898DeriveBytes, который затем имеет кучу вещей, о HMACSHA1.

Могут ли мои пароли получать хэшированные SHA256 или SHA1? Легкий способ по умолчанию SHA256?

Если это помогает, вот фиктивный пароль берется из моей локальной среды: AIPfkvy5v59jmVZdPpU9QfUMoToCQ + Rp3dBT7m9RwMKZai5/61REkN/0InCtxKPUOQ ==

+1

[Комментарии] (https://github.com/aspnet/Identity/blob/a8ba99bc5b11c5c48fc31b9b0532c0d6791efdc8/ SRC/Microsoft.AspNetCore.Identity/Р asswordHasher.cs) в исходном коде говорит SHA1 в версии 2 и SHA256 в версии 3 – Thangadurai

+0

@Thangadurai и версия 3 доступна только в ASP.NET Core, а не в ASP.NET 4.5 правильно? – scottndecker

+0

Похоже, что хэш-алгоритм по умолчанию был изменен на SHA256 с .NET 4.0 и далее. Я не мог найти официальных документов, в которых говорится об этом изменении. – Thangadurai

ответ

2

Так это выглядит как ответ не является ни точно:

С комментарии в ASP.Net Identity Source Code

Версия 0: PBKDF2 с HMAC-SHA1, 128-битная соль, 256-битный подключ, 1000 я terations.

Смотрите также: SDL криптографические принципы v5.1, часть III)

Формат: {0x00, соль, подключ}

В конечном счете хеширования algorithim является SHA1, но это не простой SHA1 хэш пароля или даже SHA1 + соль хэш.

Стоит отметить, что SHA1 считается «сломанным» для цифровых подписей из-за математической атаки, уменьшая вычислительное усилие генерации столкновения до практически допустимых уровней.

Это не относится к хэшированным паролям.

Ссылки для дальнейшего чтения.

Is SHA-1 secure for password storage?

https://www.schneier.com/blog/archives/2005/02/sha1_broken.html

https://en.wikipedia.org/wiki/PBKDF2

https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

Rfc2898DeriveBytes и HMACSHA1

+0

Если он использует SHA1 или использует SHA1 тысячу раз с солью, он все еще использует SHA1. Я ищу способ по умолчанию использовать SHA256 без переноса всего приложения на ASP.NET Core – scottndecker

+0

@scottndecker Почему? –

+0

Поскольку SHA1 больше не считается безопасным и, как ожидается, будет уязвимым в ближайшие год или два. – scottndecker

Смежные вопросы