Ho bisogno di creare alcune classi di hashing (C #) per un servizio di login in cui (sfortunatamente) le password devono essere archiviate nel database del server SQL. In passato ho utilizzato BCrypt o PBKDF2 ma ci sono alcune preoccupazioni. Questo è per una soluzione di livello enterprise in esecuzione negli Stati Uniti. Vedo 3 percorsi validi su cui vorrei che tu commentassi.
BCrypt: non è uno standard NIST e probabilmente sarebbe richiesto per alcuni clienti. Sono anche riluttante a utilizzare BCrypt per i software di livello enterprise perché ho bisogno di qualcosa che sia supportato da una grande azienda o da alcuni sviluppatori dedicati. Tutto quello che posso trovare sono alcune (vecchie) implementazioni che vengono mantenute da un ragazzo nel suo tempo libero. Questo non dovrebbe causare qualche preoccupazione? Intendo che mentre l'algo stesso è grande, l'implementazione potrebbe non esserlo. E sicuramente deve essere mantenuto.
Quali sono le raccomandazioni per l'iterazione del 2016 (fattore di lavoro) - 12?
PBKDF2: l'unica soluzione che riesco a trovare per C # è Microsofts "PasswordHasher" (o simile implementazione Rfc2898DeriveBytes). La versione rilasciata utilizza HMAC SHA1 con 1000 iterazioni. Ciò sembra non valido nel 2016. Esiste una versione più recente qui , ma sembra essere un prerelease in Nuget. In ogni caso è anche solo usando HMAC SHA256 con un conteggio di iterazione statico di 10000. Dove mi aspetto che questo sia almeno 256000 nel 2016. Inoltre, se si guarda al codice, l'implementazione chiama alcuni Win8Pbkdf2Provider dietro le quinte che tendono ad essere Derivato da BCrypt (rendendo comunque necessario il mio requisito NIST)
SHA1 + AES: Un approccio alternativo sarebbe semplicemente andare con Rfc2898DeriveBytes standard utilizzando HMAC SHA1 e quindi utilizzando AES per crittografare i valori del database - memorizzando la chiave AES sul disco. Mi piace molto questo approccio in realtà ma se cerchi queste cose, quella soluzione non emerge mai, quindi potrei essermi perso qualcosa ...
Che cosa raccomandi? Che cosa fai quando cerchi di proteggere il software a livello aziendale?