PasswordDeriveBytes
implementa la funzione di derivazione chiave PBKDF1. Un KDF è una funzione che trasforma un pezzo di dati segreti (qui, una "password", cioè il tipo di dati che si adatta a un cervello umano e può essere digitato con le dita umane) in una sequenza di bit adeguata per algoritmi che necessitano di un chiave simmetrica (es. crittografia simmetrica). Un KDF non è pensato per nient'altro, in particolare per l'archiviazione di password.
È possibile utilizzare una funzione di hash come KDF, a condizione che la chiave simmetrica necessaria non sia più lunga della dimensione dell'output della funzione hash. Tuttavia, un tale KDF sarebbe molto grezzo. Una caratteristica che il buon KDF dovrebbe fornire è sufficientemente lenta . Questo perché le "password" sono, per loro natura, vulnerabili alla ricerca esaustiva (nota anche come "attacco al dizionario": gli utenti tendono a scegliere come password parole piuttosto semplici o combinazioni che possono essere indovinate con solo pochi milioni o miliardi di tentativi). In un dato sistema, solitamente è possibile tollerare un KDF relativamente lento: un utente che cerca di autenticare non vedrà la differenza tra un ritardo di 1 μs e un ritardo di 1ms per la funzione di derivazione della chiave; ma un rallentamento di 1000x è mortale per l'aggressore: converte uno sforzo di rottura di un giorno in uno sforzo di tre anni anni .
PBKDF1 include un "conteggio di iterazioni" che è un parametro inteso esattamente per questo: per rendere la derivazione della chiave adeguatamente lenta, in un modo configurabile. Una semplice funzione di hash è troppo veloce per quello. L'utilizzo come KDF è esattamente dove preferiresti PBKDF1 su una funzione hash. In realtà, PBKDF1 non è raccomandato; PBKDF2, dallo stesso standard , dovrebbe essere più robusto.
Le funzioni di hash sono oggetti molto più generici di KDF e hanno molti altri usi, che KDF non soddisfa.
Quello che vuoi fare non è chiaro: usi il termine "firma", che normalmente significa "firma digitale asimmetrica" come con RSA o ECDSA; ci sono alcune persone che tendono ad usare il termine "firma" per designare un controllo di integrità simmetrico, come un MAC (chiamata una "firma" è impropria, ma diffusa). Tuttavia, questo comporta un po 'di segreto ad un certo punto, una chiave e una funzione di hash è senza chiave.