C # PasswordDeriveBytes Verwirrung

7

Ich habe folgenden Code in C #

%Vor%

Ich verwende den Hash-Algorithmus "SHA1".

Gemäß der SHA1-Definition generiert er einen Schlüssel mit 160 Bits (20 Bytes). Meine Frage ist, wie die GetBytes-Methode 32 Bytes von DerivedPassword bekommt, welcher Algorithmus hinter der GetBytes-Methode?

    
Siddiqui 10.02.2012, 17:07
quelle

3 Antworten

11

Microsofts Implementierung des ursprünglichen PKCS # 5 (aka PBKDF1) enthält unsichere -Erweiterungen, um mehr Bytes zur Verfügung zu stellen, als die Hash-Funktion bereitstellen kann (siehe Fehlerberichte hier und hier ).

Auch wenn es nicht fehlerbehaftet ist, sollten Sie undokumentierte, proprietäre Erweiterungen von Standards vermeiden (oder Sie könnten Ihre Daten in Zukunft möglicherweise nicht entschlüsseln - zumindest nicht außerhalb von Windows).

Ich stark empfehle Ihnen, das neuere Rfc2898DeriveBytes zu verwenden, das PBKDF2 (PKCS # 5 v2) implementiert, das seit .NET 2.0 verfügbar ist.

    
poupou 10.02.2012, 19:22
quelle
4
  

Welcher Algorithmus wird hinter der GetBytes-Methode verwendet?

Es verwendet den Algorithmus PBKDF1, der leicht modifiziert wird, um eine beliebige Schlüssellänge zu ermöglichen. Eine Ersatzklasse, Rfc2898DeriveBytes verwendet PBKDF2.

Sie können den Wikipedia-Artikel auf PBKDF2 lesen, um eine allgemeine Vorstellung davon zu erhalten, welche zugrunde liegenden Konzepte das funktionieren lassen.

    
vcsjones 10.02.2012 17:12
quelle
4

Die Schlüsselableitungsfunktion verwendet eine Funktion namens Key Stretching . (Schauen Sie nicht auf Wikipedia nach, weil der aktuelle Artikel das Konzept mit Key Strengthening verwechselt, was etwas völlig anderes ist.)

Das Key-Stretching wird üblicherweise durch Anwenden einer PRF (wie einer Hash-Funktion oder einer Chiffre) im CTR-Modus oder durch Iterieren und Verketten der Zwischenausgaben durchgeführt.

Wenn Sie beispielsweise die CTR-Prozedur SHA-1 als PRF verwenden und 32 Byte pseudozufällige Ausgabe wünschen, verketten Sie SHA1 (keymaterial, 0) mit den ersten 12 Byte von SHA1 (keymaterial, 1).

    
Henrick Hellström 10.02.2012 18:47
quelle

Tags und Links