PasswordDeriveBytes
implementiert die PBKDF1-Schlüsselableitungsfunktion. Ein KDF ist eine Funktion, die ein geheimes Datenelement (hier ein "Passwort", dh die Art von Daten, die in ein menschliches Gehirn passen und mit menschlichen Fingern eingegeben werden können) in eine Folge von Bits umwandelt, die für Algorithmen geeignet sind, die a benötigen symmetrischer Schlüssel (zB symmetrische Verschlüsselung). Ein KDF ist für nichts anderes gedacht, insbesondere für die Kennwortspeicherung.
Eine Hash-Funktion kann als KDF verwendet werden, vorausgesetzt, der von Ihnen benötigte symmetrische Schlüssel ist nicht länger als die Ausgabegröße der Hash-Funktion. Ein solches KDF wäre jedoch sehr grob. Ein Merkmal, das eine gute KDF bieten sollte, ist, ausreichend langsam zu sein. Dies liegt daran, dass "Passwörter" von Natur aus für eine umfassende Suche anfällig sind (auch als "Wörterbuchangriff" bezeichnet): Benutzer wählen als Passwörter eher einfache Wörter oder Kombinationen, die mit nur wenigen Millionen oder Milliarden Versuchen erraten werden können. In einem gegebenen System kann man normalerweise eine relativ langsame KDF tolerieren: Ein Benutzer, der versucht, sich zu authentifizieren, sieht keinen Unterschied zwischen einer Verzögerung von 1 us und einer Verzögerung von 1 ms für die Schlüsselableitungsfunktion; Eine 1000-fache Verlangsamung ist für den Angreifer jedoch tödlich: Sie wandelt einen eintägigen Bruchaufwand in einen dreijährigen Bruchaufwand um.
PBKDF1 enthält eine "Iterationszahl", die a ist Parameter genau dafür gedacht: um die Schlüsselableitung auf konfigurierbare Weise ausreichend langsam zu machen. Eine einfache Hash-Funktion ist dafür einfach zu schnell. Die Verwendung als KDF ist genau dort, wo Sie PBKDF1 einer Hash-Funktion vorziehen würden. Eigentlich wird PBKDF1 nicht empfohlen; PBKDF2 aus dem gleichen Standard soll robuster sein.
Hash-Funktionen sind viel allgemeinere Objekte als KDF und haben viele andere Verwendungen, die KDF nicht erfüllt.
Was Sie tun möchten, ist unklar: Sie verwenden den Begriff "Signatur", was normalerweise "asymmetrische digitale Signatur" bedeutet, wie bei RSA oder ECDSA. Es gibt einige Leute, die dazu neigen, den Begriff "Signatur" zu verwenden, um eine symmetrische Integritätsprüfung zu bezeichnen, wie z. B. einen MAC (die Bezeichnung "Signatur" ist unangemessen, aber weit verbreitet). Dies bringt jedoch irgendwann ein Geheimnis mit sich, einen Schlüssel und eine Hash-Funktion ohne Schlüssel.