¿Es seguro decirle a sus usuarios qué tipo de algoritmo de hashing utiliza?

46

Por ejemplo, en la página de registro de usuarios, es seguro decirle a la gente "Su contraseña se almacenará como un hash de una sola vía utilizando el algoritmo (cualquiera)".

    
pregunta user49637 20.06.2014 - 16:23
fuente

5 respuestas

74

Si no es seguro, entonces su función hash es basura pura, y no debe usarla.

En cualquier análisis de seguridad decente, se supone que el atacante ya conoce todo el software que está utilizando, porque:

  • No hay tantas posibilidades.
  • Se puede adivinar mucho en función del comportamiento y el resultado de la aplicación.
  • Un atacante que podría echar un vistazo a su base de datos también podría tener una copia de sus scripts PHP, y por lo tanto sabe .
  • Incluso en los casos en que el atacante no conoce su función hash, es muy difícil cuantificar tal falta de conocimiento: hasta ¿en qué medida no sabe el atacante?
  • En particular, el atacante también puede registrarse como usuario, con una contraseña que elija, y luego observar el hash resultante, lo que le permite probar rápidamente cualquier función de hash potencial.

Por otra parte, hacer que la función hash utilizada sea explícita puede darle una reputación de "propietario competente del sitio" que brindaría confianza a los clientes técnicamente interesados.

    
respondido por el Tom Leek 20.06.2014 - 16:37
fuente
15

En un sentido puramente técnico, sí, es seguro decirle a los usuarios qué algoritmo utiliza, siempre que el algoritmo sea bueno. Esto no es información secreta, y tratar de ocultarlo sería bastante tonto.

Sin embargo, si hace un gran anuncio que usa, por ejemplo, bcrypt, esto puede ser contraproducente. Sus usuarios podrían verse tentados a elegir contraseñas aún más débiles, suponiendo que su algoritmo de hash mágico los mantenga seguros de cualquier manera. De hecho, ha habido varias preguntas en este sitio donde las personas realmente creían que el uso de bcrypt hace que la seguridad de la contraseña sea completamente irrelevante. Esto es, por supuesto, no el caso. Por lo tanto, debe tener mucho cuidado de no dar a sus usuarios una falsa sensación de seguridad.

Breve historia corta: está bien decirle a cualquiera que esté interesado y (con suerte) entiende que todavía necesitan una buena contraseña. Pero no pondría un gran mensaje en el formulario de registro. La gente puede sacar conclusiones erróneas de ello.

    
respondido por el Fleche 21.06.2014 - 11:51
fuente
6

Yo diría que es seguro siempre y cuando el algoritmo de hash que usas sea seguro. De lo contrario, puede dar un incentivo para ir tras su base de datos.

Como usuario, debo admitir que no me importaría más la transparencia de los sitios en los que me registro, con respecto a cómo se almacenan las credenciales. Pero los usuarios menos orientados a la técnica pueden ser tomados por sorpresa y / o perder su punto, así que asegúrese de que su público objetivo se preocupa por esta información.

En cualquier caso, la fuerza de su esquema de contraseñas no depende en absoluto de que sea secreto: se basa en que la criptografía sea revisada por pares. Por lo tanto, no debería importar qué algoritmo usas.

    
respondido por el executifs 20.06.2014 - 16:32
fuente
1

Es seguro si los algoritmos de estiramiento de hash / clave son seguros, pero no es necesario y probablemente no sea una buena idea. Sugeriría decirles a los usuarios vagamente cómo se almacenan sus contraseñas (por ejemplo, "extensión de clave, que incluye varias iteraciones de una función unidireccional" ), pero no mencionar el algoritmo exacto.

Mantener en secreto el método de hashing (o incluso el método completo de autenticación) es una instancia de security through obscurity , que generalmente está mal visto. Sin embargo, la mayoría de las veces, el ceño fruncido proviene de un malentendido, al igual que la gente a menudo interpreta erróneamente la cita de Hoare sobre la optimización prematura como "no optimizar". La seguridad no debe depender de la oscuridad solo , sin embargo, la oscuridad en el lugar correcto puede agregarse a la seguridad.

Un algoritmo criptográfico debe funcionar de manera confiable incluso si el atacante conoce todos los detalles del algoritmo, y se supone que sí lo hace. Por esa razón, los algoritmos criptográficos generalmente se revelan completamente y nadie confiará en un algoritmo criptográfico "secreto".

Su estrategia de seguridad también debe asumir la revelación completa como el peor escenario, y su sistema aún debe funcionar de manera confiable en ese caso.
Pero eso no significa que usted necesite absolutamente revelar todos los detalles.

Decirle a sus usuarios de forma vaga, en un nivel alto, cuál es su estrategia de almacenamiento de contraseñas puede dar una buena impresión al usuario, pero no le permite identificar algo en particular (incluyendo posibles problemas de responsabilidad, como lo señala schroeder en un comentario encima). La oscuridad puede ser tanto una forma de disuadir como de retrasar a un atacante.

Un poco de oscuridad en el algoritmo exacto es ambos similar a poner un cerrojo de puerta grande y prominente en su puerta frontal con un ranura de bloqueo oculta, protegida , y para poner su dinero en la caja fuerte antes de salir de su habitación de hotel.
Un perno grande con una ranura oculta y protegida probablemente no sea mucho más seguro que una cerradura barata, ya que de todos modos puede golpear la puerta con un martillo o tirar una piedra por la puerta del jardín. Sin embargo, le dice a un posible ladrón que usted es cauteloso y que es probable que existan otras medidas de seguridad que él desconoce , y probablemente sea menos problemático entrar en otra casa. Puede que ni siquiera haya un perno debajo de ese candado protegido, y seguirá cumpliendo su propósito.
Una caja fuerte del hotel usualmente toma 4 números (y ocasionalmente el gerente del hotel olvidó cambiar el código de emergencia de 0000 ). Las huellas dactilares permiten al ladrón abrir la caja fuerte en menos de 3 minutos, por lo que no es muy seguro. Sin embargo, 3 minutos es una eternidad para el ladrón de una habitación de hotel, cada minuto adicional conlleva el riesgo de ser atrapado: rara vez permanecen en una habitación por más de 3 minutos en total. Lo que significa que unsafe safe es literalmente safe en comparación con tener su dinero y su rolex sobre la mesa, simplemente porque los objetos están algo ocultos y retenidos.

Es lo mismo con un atacante en línea. Si bien es poco probable que descubra la intrusión a medida que está ocurriendo, el intruso tiene menos tiempo disponible antes, ya que no solo necesita descargar la base de datos de contraseñas, sino que también debe descubrir el algoritmo de hashing "secreto" y las sales. . Puede que no sea mucho tiempo, pero es algo que no le cuesta nada. ¿Por qué regalarlo?

Si le dice a un atacante que usa MD5 para cifrar sus contraseñas, inmediatamente sabrá que puede descifrar toda su base de datos de usuarios en menos de 2 segundos, y lo más probable es que no esté muy actualizado con la seguridad En conjunto, lo que significa que eres un objetivo muy atractivo. Si le dice a un atacante que usa un "sistema de estiramiento de teclas con muchas iteraciones", puede darse cuenta de que probablemente sea una cantidad considerable de trabajo descifrar incluso una sola contraseña. Además, es un trabajo extra para averiguar qué algoritmo usa exactamente.
Si su sitio es solo uno en una lista de 20 objetivos interesantes para atacar, se acaba de mover al final de la lista.

    
respondido por el Damon 22.06.2014 - 14:05
fuente
0

Si el hash es seguro y, lo que es más importante, cómo se usa en el sitio / aplicación es seguro, entonces debería poder abrir el código completo que ejecuta el sitio / aplicación y no debería ser menos seguro.

Entonces, sí, SI la implementación es segura, la divulgación es segura. Eso es un gran SI .

    
respondido por el Lie Ryan 21.06.2014 - 15:29
fuente

Lea otras preguntas en las etiquetas