Necesito crear algunas clases de hashing (C #) para un servicio de inicio de sesión donde (desafortunadamente) las contraseñas deben almacenarse en la base de datos del servidor SQL. En el pasado he estado usando BCrypt o PBKDF2, pero hay algunas preocupaciones. Esto es para una solución de nivel empresarial que se ejecuta en los Estados Unidos. Veo 3 rutas válidas que me gustaría que comentaras.
BCrypt: no es un estándar de NIST y probablemente sea necesario para algunos clientes. También soy reacio a usar BCrypt para el software de nivel empresarial porque necesito algo que esté respaldado por una gran empresa o algunos desarrolladores dedicados. Todo lo que puedo encontrar son algunas implementaciones (antiguas) que son mantenidas por un individuo en su tiempo libre. ¿No debería eso causar algunas preocupaciones? Me refiero a que mientras que algo es grande, la implementación podría no serlo. Y seguramente hay que mantenerlo.
¿Cuáles son las recomendaciones de iteración (factor de trabajo) de 2016 - 12?
PBKDF2: La única solución que puedo encontrar para C # es Microsofts "PasswordHasher" (o una implementación similar de Rfc2898DeriveBytes). La versión lanzada está usando HMAC SHA1 con 1000 iteraciones. Esto parece inválido en el 2016. Hay una versión más reciente
SHA1 + AES: Un enfoque alternativo sería simplemente ir con Rfc2898DeriveBytes estándar usando HMAC SHA1 y luego usar AES para cifrar los valores de la base de datos: almacenar la clave AES en el disco. Me gusta este enfoque, el mejor en realidad, pero si buscas estas cosas, esa solución nunca surge, por lo que podría faltar algo ...
¿Qué recomiendan ustedes? ¿Qué hace cuando se trata de proteger software de nivel empresarial?