Es BCrypt un buen algoritmo de hash para usar en C#?Donde lo puedo encontrar?[cerrado]

StackOverflow https://stackoverflow.com/questions/481160

  •  20-08-2019
  •  | 
  •  

Pregunta

He leído que cuando hash de una contraseña, muchos programadores recomiendan el uso de la BCrypt algoritmo.

Estoy programando en C# y se está preguntando si alguien sabe de una buena aplicación para BCrypt?He encontrado esta página, pero yo no sé realmente si es falso o no.

¿Qué debo tener en cuenta al elegir una contraseña esquema de hashing?Es BCrypt una 'buena', la aplicación?

¿Fue útil?

Solución

En primer lugar, algunos términos que son importantes:

Hash - El acto de tomar una cuerda y la producción de una secuencia de caracteres que no se puede revertir a la cadena original.

Cifrado Simétrico - (Generalmente conocido como "codificación") - El acto de tomar una cuerda y la producción de una secuencia de caracteres que puede ser descifrada a la cadena original a través del uso de la misma clave de cifrado que cifró.

Rainbow Table - una tabla de búsqueda que contiene todas las variaciones de los caracteres de hash en un determinado algoritmo de hash.

Sal - una conocida cadena aleatoria anexa a la cadena original antes de que se fragmenta.

Para el .NET Framework, Bcrypt aún no tiene una verificado implementación de referencia.Esto es importante porque no hay manera de saber si hay graves fallas en una implementación existente.Usted puede obtener una implementación de BCrypt para .RED aqui.No sé lo suficiente acerca de la criptografía para decir si es una buena o mala aplicación.La criptografía es un muy profundo de campo. No intente construir su propio algoritmo de cifrado.En serio.

Si se va a implementar su propia contraseña de seguridad (suspiro), entonces usted necesita para hacer varias cosas:

  1. El uso de un relativamente algoritmo de hash seguro.
  2. Sal cada una contraseña antes de que el algoritmo hash.
  3. El uso de un único y largo de sal para cada contraseña, y la tienda de la sal con la contraseña.
  4. Requieren contraseñas seguras.

Por desgracia, incluso si puedes hacer todo esto, una determinada hacker todavía potencialmente podría averiguar las contraseñas, que acaba de tomar de él un tiempo muy largo.Esa es su principal enemigo: Tiempo.

El bcrypt algoritmo funciona, porque toma cinco órdenes de magnitud más de hash de una contraseña que MD5;(y aún mucho más de AES o SHA-512).Las fuerzas de la hacker a pasar mucho más tiempo para crear un arco iris de la tabla a la búsqueda de sus contraseñas, lo que es mucho menos probable que las contraseñas estarán en peligro de ser hackeado.

Si eres de salazón y el hash de las contraseñas, y la sal es diferente, a continuación, un posible hacker tendría que crear un arco iris de tabla para cada variación de la sal, con el fin de tener un arco iris mesa para uno salado+hash de la contraseña.Esto significa que si usted tiene 1 millón de usuarios, un hacker ha de generar 1 millón de tablas rainbow.Si estás utilizando la misma sal por cada usuario, entonces el hacker sólo tiene que generar 1 arco iris tabla con éxito hackear su sistema.

Si usted no está de salazón sus contraseñas, entonces todo lo que un atacante tiene que hacer es abrir una existente arco iris tabla para cada aplicación hay (AES, SHA-512, MD5) y ver si alguna de ellas coincide con el hash.Este ya se ha hecho, un atacante no es necesario el cálculo de estas tablas de arco iris sí mismos.

Aún con todo esto, tienes que ser el uso de buenas prácticas de seguridad.Si pueden usar otro vector de ataque (XSS, SQL Injection, CSRF, et.al.) en su sitio, buena seguridad de la contraseña no importa.Eso suena como una polémica declaración, pero piense en esto:Si puedo obtener toda la información del usuario a través de un ataque de inyección de SQL, o me puede conseguir sus usuarios para que me dé sus cookies a través de XSS, no importa cómo es bueno es su contraseña de seguridad es.

Otros recursos:

  1. Jeff Atwood: .RED de Cifrado Simplificado (ideal para una visión general de la mezcla)
  2. Jeff Atwood: Acabo de iniciar sesión como usted
  3. Jeff Atwood: Usted probablemente almacenar contraseñas de forma incorrecta
  4. Jeff Atwood: La Velocidad De Hash

Nota: Por favor recomendar otros buenos recursos.He deberá haber leído una docena de artículos por decenas de autores, pero algunos de escritura como claramente sobre el tema como Jeff.Por favor editar en artículos como usted los encuentra.

Otros consejos

Usted no debe usar BCrypt en .NET. Debe usar PBKDF2 tal como está con la implementación del marco .NET incorporado. Es la única implementación verificada criptográficamente disponible de forma gratuita en .NET junto con ser algoritmo recomendado por NIST .

StackId usó anteriormente BCrypt y se mudó a PBKDF2 por esta misma razón:

  

Para aquellos curiosos, & # 8217; estamos cambiando las contraseñas con PBKDF2. Código relativo   es aquí (    http://code.google.com/p/ stackid / source / browse / OpenIdProvider / Current.cs # 1135   ), a través de algunas capas de indirección. En una iteración anterior, nosotros   estaban usando BCrypt; pero se mudó a PBKDF2 ya que está integrado en .NET   framework, mientras que BCrypt requeriría que verifiquemos una implementación   (no es una empresa pequeña).

Kevin Montrose, 27 de mayo de 2011

(Enlace actualizado en GitHub)

Editar: El significado de verificado en términos criptográficos parece no entenderse fácilmente, una implementación verificada significa que se ha demostrado criptográficamente que se implementa sin error. El costo de esto puede llegar fácilmente a $ 20,000 o más. Recuerdo esto cuando estaba investigando sobre OpenSSL y leí donde decían que no habían completado todo el proceso de verificación, pero si es necesario verificarlo completamente, pueden indicarle el camino correcto para ello y mencionar los costos asociados. Ciertos requisitos gubernamentales incluyen mandatos para algoritmos de cifrado verificados.

Las implementaciones de bcrypt en .NET no se han verificado. Al usar una implementación de cifrado no verificada, no puede estar absolutamente seguro de que no haya fallas intencionales maliciosas, como permitir una puerta trasera a lo que es cifrado o fallas de implementación no intencionales que resultan en datos criptográficamente inseguros.

edición de 2014: Para cualquiera que cuestione la necesidad de utilizar algoritmos criptográficos verificados, mire la devastación provocada por hack de heartbleed explotado en OpenSSL. Ese es el costo de usar una implementación no verificada. Es seguro ... hasta que descubra que cualquier persona puede leer todo el contenido de la memoria de su servidor.

  

El autor del cambio que introdujo Heartbleed, Robin Seggelmann, declaró que & "; no pudo validar una variable que contenía una longitud &"; y negó cualquier intención de presentar una implementación defectuosa. Tras la divulgación de Heartbleed, Seggelmann sugirió centrarse en el segundo aspecto, afirmando que OpenSSL no es revisado por suficientes personas.

Esta es la definición de una implementación no verificada. Incluso el defecto más pequeño puede provocar la invalidez de toda la seguridad.

Edición de 2015: Se eliminó el lenguaje basado en recomendaciones y se reemplazó por absolutos. Comentario original integrado de Kevin Montrose para la posteridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top