2016-11-16 5 views
6

Ich verwende die Standard-Identity-Sachen von ASP.NET 4.5 MVC und Entity Framework. Ich kann Benutzer mit Passwörtern erstellen und das Hash-Passwort wird in der Datenbank angezeigt. Ich versuche herauszufinden, ob dieser Hash mit dem nicht mehr vertrauenswürdigen SHA1-Algorithmus oder dem SHA2-Algorithmus (sei es SHA256, SHA512, etc.) generiert wird.Verwendet ASP.NET SHA256 oder SHA1?

Artikel, die scheinen es standardmäßig SHA256 zu sagen:

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

Artikel, die es standardmäßig SHA1 zu sagen scheinen:

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

Wenn ich die Kette nach unten folgen, habe ich am Ende in der PasswordHasher.cs Klasse nach oben -> HashPassword() -> Crypto.HashPassword(), die ich sehen kann, ist Rfc2898DeriveBytes verwendet, die dann ein paar Sachen haben über HMACSHA1.

So werden meine Passwörter von SHA256 oder SHA1 gehackt? Einfacher Weg zum Standard zu SHA256?

Wenn es hilft, hier ist ein Dummy-Passwort aus meiner lokalen Umgebung genommen: AIPfkvy5v59jmVZdPpU9QfUMoToCQ + Rp3dBT7m9RwMKZai5/61REkN/0InCtxKPUOQ ==

+1

[Kommentare] (https://github.com/aspnet/Identity/blob/a8ba99bc5b11c5c48fc31b9b0532c0d6791efdc8/ src/Microsoft.AspNetCore.Identität/P asswordHasher.cs) auf den Quellcode sagt SHA1 in Version 2 und SHA256 in Version 3 – Thangadurai

+0

@Thangadurai und Version 3 ist nur in ASP.NET Core, nicht in ASP.NET 4.5 richtig? – scottndecker

+0

Der Standard-Hash-Algorithmus wurde ab .NET 4.0 in SHA256 geändert. Ich konnte keine offiziellen Dokumente finden, die über diese Veränderung sprechen. – Thangadurai

Antwort

2

So ist es wie die Antwort aussieht, ist weder genau:

Von der Kommentare in der ASP.Net Identity Source Code

Version 0: PBKDF2 mit HMAC-SHA1, 128-Bit-Salz, 256-Bit-Unterschlüssel, 1000 i terationen.

Siehe auch: SDL Krypto-Richtlinien v5.1, Teil III)

Format: {0x00, Salz, Unterschlüssel}

Letzten Endes der Hashing-algorithmus ist SHA1, aber es ist nicht ein Einfacher SHA1-Hash des Passworts oder sogar ein SHA1 + -Salz-Hash.

Es ist wert, darauf hinzuweisen, dass SHA1 für digitale Signaturen aufgrund eines mathematischen Angriffs als "gebrochen" gilt, was den Rechenaufwand für die Erzeugung einer Kollision auf gerade noch realisierbare Niveaus reduziert.

Dies gilt nicht für Hash-Passwörter.

Links für weitere Informationen.

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 und HMACSHA1

+0

Wenn SHA1 oder SHA1 tausendmal mit Salz verwendet wird, wird immer noch SHA1 verwendet. Ich bin auf der Suche nach einer Möglichkeit, es zu verwenden, um SHA256 zu verwenden, ohne die gesamte Anwendung auf ASP.NET Core zu portieren. – scottndecker

+0

@scottndecker Warum? –

+0

Weil SHA1 nicht mehr als sicher gilt und voraussichtlich in den nächsten ein oder zwei Jahren sehr anfällig sein wird. – scottndecker