¿Es este el sistema de cifrado / hashing más seguro? [cerrado]

-1

He estado investigando sobre la seguridad de las contraseñas y después de leer varios temas y el principio de Kerckhoff. Se me ocurrió lo que creo que es un sistema realmente seguro con respecto a la seguridad en línea:

Un servidor de cifrado / hashing local / offline. Imagínese esto: un usuario se registra en el sitio web, pero en lugar del hashing del sitio actual y el almacenamiento de la contraseña, el sitio envía una solicitud al servidor de hashing (que contiene el algoritmo de hashing y el salt). Todavía no he descubierto la forma más segura de comunicación entre servidores .

El servidor de hash luego responde con la contraseña que el sitio almacena en la base de datos. De esta forma, incluso si el pirata informático conoce el sistema según cómo configuró el servidor de hash ( también me falta información sobre la configuración de los servidores ), el pirata informático no podrá descubrir su hash / sal.

Apreciaría cualquier comentario o crítica con respecto a mi llamado 'sistema'

    
pregunta onur sagir 24.03.2015 - 11:32
fuente

2 respuestas

2

TL; DR Sí, si se hace correctamente, el sistema que ha diseñado debería proporcionar una pequeña ganancia de seguridad, pero probablemente no sea la mejor opción.

La versión expandida:

Cuando diseñamos la seguridad en un sistema, primero desarrollamos un modelo de amenaza y luego descubrimos cómo nuestro sistema mitigará esas amenazas específicas. Entonces, la pregunta para usted es: "¿De qué amenaza está tratando de proteger el sistema, y este diseño mitiga razonablemente esa amenaza?" donde "razonablemente" significa reducir efectivamente la amenaza a un nivel aceptable de riesgo sin agregar un costo o complejidad excesivos.

Por lo tanto, me parece que la amenaza específica contra la que está tratando de protegerse es que un atacante descarte hashes y sales de contraseña de la base de datos de la aplicación web.

Si queremos estipular que un atacante tiene la capacidad de consultar la base de datos en el contexto de la aplicación, esta es una preocupación válida. Sin embargo, en general, sugiero que no de hecho lo estipulemos. Eso hace que el atacante pueda acceder a una amplia variedad de datos potencialmente privilegiados, y agregar complejidad al sistema para proteger este objetivo (hashes y sales) sin agregar complejidad para proteger los otros datos privilegiados no tiene sentido ... A menos que estos datos sean significativamente más valiosos que cualquier otro dato en la base de datos. En cambio, generalmente queremos que nuestro modelo de amenaza enumere la amenaza más genérica de un atacante que acceda ilegítimamente a la base de datos y la proteja contra ella en su totalidad.

Sin embargo, avancemos y agreguemos esto a nuestro modelo de amenaza como una amenaza válida que necesita mitigación, ya que su mecanismo de mitigación es de lo que realmente tenía una pregunta.

Entonces, ¿mover la verificación de contraseña a un sistema separado, y tener ese sistema solo para exponer una API que proporciona una contraseña de Oracle es una forma válida de defenderse contra esta amenaza? Sí. Es. El aislamiento de datos confidenciales en sistemas reforzados para fines especiales es un patrón estándar en seguridad de la información, como la forma en que almacenamos claves secretas en módulos de seguridad de hardware. Sin embargo, en este caso, es mucho más costoso y complejo agregar una amenaza bastante estrecha, por lo que no sé si generalmente lo recomendaría, pero sin duda tiene algunas ventajas de seguridad potenciales (pequeñas).

Sin embargo, este no es el único mecanismo que tiene disponible para reducir esta amenaza. Dependiendo de su motor de base de datos, puede usar algo como procedimientos almacenados para verificar las contraseñas, y al menos denegar el acceso de la aplicación a los hashes de contraseñas, por lo que no se pueden volcar, y las sales solo se pueden recuperar individualmente. Potencialmente, incluso podría hacer que la base de datos calcule la verificación por usted, y no permita que la aplicación acceda a hashes o sales, logrando efectivamente los mismos objetivos que usted estableció, sin la complejidad de un sistema adicional.

O, podría ir por la popular ruta de la federación de identidad y autenticación, y eliminar el almacenamiento de hashes y sales de contraseña. En un entorno empresarial, puede tener un proveedor de federación que puede permitirle delegar la autenticación y, en cambio, tratar con algo como un token SAML, y en el mundo web, puede usar OAUTH y dejar que compañías como Google y Facebook se preocupen por la administración de credenciales y autenticación, y no necesita tener contraseñas, eliminando esta amenaza en particular por completo.

    
respondido por el Xander 24.03.2015 - 19:45
fuente
0
  

Un servidor de cifrado / hashing local / offline. Imagina que un usuario se registra él mismo > en el sitio web, pero en lugar del hash del sitio actual y el almacenamiento de la contraseña.

Esto expone la contraseña a un servidor desconocido, con seguridad desconocida para la propia contraseña. Es mejor NUNCA enviar una contraseña a través del cable en absoluto. podrías usar un script de hashing de java para esto.

  

El sitio envía una solicitud al servidor de hashing (que contiene el algoritmo de hashing > y el salt). Todavía no he descubierto la forma más segura de comunicación de > entre servidores.

2 conexiones significa 2 líneas para escuchar a escondidas. por lo que siempre será menos seguro que 1 conexión. (y ambos darían credenciales de inicio de sesión, por lo que ambos son interesantes)

  

El servidor de hash luego responde con la contraseña de hash que el sitio luego > almacena en la base de datos. De esta forma, incluso si el pirata informático conoce el sistema según > cómo configuró el servidor de hash (también me falta información sobre los servidores de configuración >) el pirata informático no podrá descubrir su hashing / salt.

Esto también podría abordarse simplemente volviendo a lavar el hash con un hash salado. (básicamente, agregar una sal al hash antes de validarlo para que un hash robado de la base de datos no genere un token de acceso).

No es una mala idea. pero su idea no agrega mucha seguridad en mi humilde opinión.

Tal vez alguien más tenga una vista / punteros diferentes.

    
respondido por el LvB 24.03.2015 - 11:59
fuente

Lea otras preguntas en las etiquetas