tipos porque los longitud informatica funciones funciona ejemplos diferente crean como algoritmo .net security encryption hash

.net - porque - sha 256



¿Cuál es el algoritmo de hashing más seguro en.NET Framework? (3)

Creo que SHA512 sería tu mejor apuesta con los algoritmos hash incorporados. Es la forma de hash más grande de un algoritmo muy seguro.

Además, no olvides usar una sal para ayudar a proteger el hash contra ataques de diccionario .

El tamaño del hash generado y la velocidad del algoritmo no son importantes. Realmente solo estoy interesado en que sea la opción más segura. No quiero usar ninguna biblioteca de terceros tampoco.

La versión del framework .NET que estoy usando es 3.5 si eso hace la diferencia.


Usted declara que la velocidad del algoritmo no es importante, pero en realidad es esencial.

Mucho depende de la definición de ''seguro'', SHA512 es (casi) imposible de revertir, pero en realidad es bastante fácil atacarlo con la fuerza bruta .

Esto se debe a que es rápido ; podría considerarse como un defecto de diseño fundamental de la ''familia'' de SHA, ya que están diseñados para ser muy rápidos.

Este es un problema: SHA512 logra su objetivo de diseño de ser muy rápido (no es mucho más lento que SHA1 ) pero si eres un hacker que intenta contraseñas de fuerza bruta es más fácil de descifrar. Hace 10 o incluso 5 años, un serio ataque de fuerza bruta hubiera estado fuera de discusión, ahora son un par de elegantes tarjetas gráficas o algún tiempo en la nube.

Aquí es donde entran en juego los algoritmos de estiramiento de teclas: hacen que el proceso de creación de un hash de contraseñas sea deliberadamente lento . Lo suficientemente lento para que los usuarios que comprueban un hash individual no se den cuenta, pero un ataque de fuerza bruta llevará demasiado tiempo.

Un buen ejemplo de un algoritmo de extensión de clave es RFC2898 o PBKDF2: utiliza una sal larga y ejecuta un algoritmo SHA miles de veces para crear un hash que tarda en reproducirse.

.Net tiene una implementación nativa de esto: Rfc2898DeriveBytes

Lo usan para System.Web.Crypto.HashPassword , pero puede revisar fácilmente su fuente para usarla en otro lugar.

En mi máquina ahora (una vieja laptop bastante basura), una sola .Net Rfc2898DeriveBytes hash con 1000 iteraciones (el valor predeterminado) toma alrededor de 50ms, mientras que puedo usar fuerza bruta alrededor de 250,000 hashes SHA512 en un segundo.

Entonces, en .Net, la opción más segura es usar Rfc2898DeriveBytes .

Sin embargo, RFC2898 / PBKDF2 tiene una debilidad, mientras que la lentitud de la computación paralela es cada vez más barata y menos costosa, y no se necesita mucha memoria para construir cada hash. En este momento es bastante brutal, pero en 5 o 10 años?

Así que la próxima generación son algoritmos como bcrypt / scrypt que están diseñados para usar mucha memoria para cada hash, lo que hace costosas las ejecuciones paralelas. Si bien hay implementaciones de .Net, aún no hay una nativa (y aún así) y sería cauteloso con el uso hasta que las haya - usarlas afectará un montón de cosas como los inicios de sesión concurrentes (si se usan para contraseñas) y así introducir un gran riesgo para los primeros usuarios.


El usuario preguntó cuál es el algoritmo hashing más seguro en .NET, PBKDF2 no es un algoritmo hash, es un método para derivar claves de cifrado y sí, la función pseudo aleatoria subyacente PUEDE ser un algoritmo hash, sin embargo, en Rfc2898DeriveBytes es HMACSHA1 sobre x pases cada byte de cada valor hash de cada pase XORed con el siguiente (conocido como key stretching).

Entonces, para responder a la pregunta, actualmente HMACSHA512 es el algoritmo de hashing más seguro en .NET actualmente.

Si desea contraseñas "hash", (Y digo hash porque no es una salida de función hash directa) aquí hay una API que toma PBKDF2 y usa HMACSHA512 para derivar bytes en lugar de la MS Rfc2898DeriveBytes implementada usando HMACSHA1: https: // sourceforge.net/projects/pwdtknet