it-swarm.com.de

Verwendung von SHA1 oder MD5 in C # (Welche Leistung und Sicherheit ist für die Authentifizierung besser)?

Wie können wir in C # SHA1 automatisch verwenden?
Ist SHA1 besser als MD5? (Wir verwenden Hashing für Benutzername und Kennwort und benötigen Geschwindigkeit für die Authentifizierung.)

25
Sajad Bahmani

Sie sind sich nicht sicher, was Sie automatisch meinen, aber Sie sollten SHA256 und höher verwenden. Auch alwaysbenutze einen Salt ( code ) mit deinen Hashes. Eine Randbemerkung, nach der Zeit, ist die Verwendung von gehärteten Hashes weitaus besser als die Verwendung einer einfachen Geschwindigkeits-basierten Hashfunktion. I.e .: Hashing über einige hundert Iterationen oder Verwendung bereits bewährter Hashfunktionen wie bcrypt (was ich glaube, wird unten erwähnt). Ein Codebeispiel für die Verwendung einer SHA256-Hashfunktion in .NET lautet wie folgt:

byte[] data = new byte[DATA_SIZE];
byte[] result;

using(SHA256 shaM = new SHA256Managed()) {
    result = shaM.ComputeHash(data);
}

Wird mit SHA256 den Trick für Sie tun und befindet sich unter MSDN .


Randnotiz zum "Reißen" von SHA1: Das Reißen von SHA-1 in Perspektive setzen

35
Kyle Rozendo

SHA1 ist stärker als MD5. Wenn Sie die Wahl haben, ist es besser, es zu verwenden. Hier ist ein Beispiel:

public static string CalculateSHA1(string text, Encoding enc)
{
    byte[] buffer = enc.GetBytes(text);
    SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
    return BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "");
}
29
Darin Dimitrov

Beide sind zu schnell, um zumindest direkt verwendet zu werden. Verwenden Sie die Tastenanhebung, um das Passwort-Hashing-Verfahren zu verlangsamen. Geschwindigkeit ist der Feind der Passwortsicherheit.

Wie langsam ist langsam genug? Wenn Sie einen Passwort-Hash von ~ Mikrosekunden auf Hunderte von Millisekunden verlangsamen, wirkt sich dies nicht nachteilig auf die wahrgenommene Leistung Ihrer Anwendung aus. Er macht jedoch das Knacken von Passwörtern buchstäblich hunderttausendmal langsamer.

Weitere Informationen finden Sie in diesem Artikel: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-Rainbow-tables-what-you-need-to-know-about -s.html

Das Problem ist, dass MD5 schnell ist. Dies gilt auch für die modernen Konkurrenten SHA1 und SHA256. Geschwindigkeit ist ein Entwurfsziel eines modernen sicheren Hashes, da Hashes ein Baustein für fast jedes Kryptosystem sind und in der Regel auf Paket- oder Nachrichtenbasis nach Bedarf ausgeführt werden.

Geschwindigkeit ist genau das, was Sie bei einer Passwort-Hash-Funktion nicht wollen.

... schnipsen ... 

Das Passwort-Angriffsspiel wird nach der Zeit berechnet, die erforderlich ist, um das Passwort X zu knacken. Bei Rainbow-Tischen hängt die Zeit davon ab, wie groß Ihr Tisch sein muss und wie schnell Sie ihn suchen können. Bei inkrementellen Crackern hängt die Zeit davon ab, wie schnell die Passwort-Hash-Funktion ausgeführt werden kann.

Das heißt, verwenden Sie BCrypt. SCrypt wurde vor kurzem entwickelt, aber ich bezweifle, dass es bereits stabile (oder produktionsbereite) Bibliotheken gibt. Theoretisch behauptet SCrypt, BCrypt zu verbessern. "Eigenes Bauen" ist nicht zu empfehlen, aber MD5/SHA1/SHA256 tausendmal zu durchlaufen, sollte den Trick ausführen (dh: Key Strengthing).

Und falls Sie nichts davon wissen, lesen Sie auf Rainbow Tables nach. Grundlegendes Sicherheitsmaterial.

11
Dragontamer5788

Von MSDN

byte[] data = new byte[DATA_SIZE];
byte[] result; 

SHA1 sha = new SHA1CryptoServiceProvider(); 
// This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data);
10
Ahmed Said

Ich möchte diese Dinge verwenden.

MD5, SHA1/256/384/512 mit einem optionalen Encoding-Parameter.

Anderes HashAlgorithms Danke an Darin Dimitrov.

public static string MD5Of(string text)
{
    return MD5Of(text, Encoding.Default);
}
public static string MD5Of(string text, Encoding enc)
{
    return HashOf<MD5CryptoServiceProvider>(text, enc);
}
public static string SHA1Of(string text)
{
    return SHA1Of(text, Encoding.Default);
}
public static string SHA1Of(string text, Encoding enc)
{
    return HashOf<SHA1CryptoServiceProvider>(text, enc);
}

public static string SHA384Of(string text)
{
    return SHA384Of(text, Encoding.Default);
}
public static string SHA384Of(string text, Encoding enc)
{
    return HashOf<SHA384CryptoServiceProvider>(text, enc);
}

public static string SHA512Of(string text)
{
    return SHA512Of(text, Encoding.Default);
}
public static string SHA512Of(string text, Encoding enc)
{
    return HashOf<SHA512CryptoServiceProvider>(text, enc);
}

public static string SHA256Of(string text)
{
    return SHA256Of(text, Encoding.Default);
}
public static string SHA256Of(string text, Encoding enc)
{
    return HashOf<SHA256CryptoServiceProvider>(text, enc);
}

public static string HashOf<TP>(string text, Encoding enc)
    where TP: HashAlgorithm, new()
{
    var buffer = enc.GetBytes(text);
    var provider = new TP();
    return BitConverter.ToString(provider.ComputeHash(buffer)).Replace("-", "");
}
1
wener

sHA1 oder SHA2 verwenden Der MD5-Algorithmus ist problematisch.

http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html http://msdn.Microsoft.com/de-de/library/system.security.cryptography.md5 % 28v = vs.85% 29.aspx

1

MD5 bietet eine bessere Leistung und SHA1 ist besser für die Sicherheit. Sie können aus diesem Vergleich eine Vorstellung bekommen 

 enter image description here

0