hash - Sistemas de contraseñas que solicitan cartas individuales: ¿qué almacenan?
passwords banking (1)
Como nota correctamente, los esquemas estándar de hash de contraseñas no funcionarán si la autenticación se realiza utilizando solo una subcadena de la contraseña. Hay varias formas en que dicho sistema podría implementarse:
Almacene la contraseña en forma simple:
- Simple y fácil de implementar.
- Inseguro si la base de datos está comprometida.
- Es posible que no cumpla con las reglamentaciones que exigen el almacenamiento de contraseñas cifradas o cifradas (pero el uso de cifrado de base de datos de bajo nivel podría evitarlo).
Almacene la contraseña encriptada, descifre para verificar:
- No es más seguro que almacenarlo en claro si la clave de cifrado también está comprometida.
- Puede cumplir con las regulaciones que prohíben el almacenamiento de contraseñas en forma simple.
- Podría hacerse más seguro mediante el uso de un módulo de seguridad de hardware dedicado o un servidor de autenticación separado, que almacenaría la clave y proporcionaría una interfaz de caja negra para la verificación de encriptación y subcadena.
Almacenar hashes de todas (o suficientes) posibles subcadenas:
- Necesita mucho más espacio de almacenamiento que otras soluciones.
- La contraseña todavía se puede recuperar con bastante facilidad mediante la fuerza bruta si la base de datos se ve comprometida, ya que cada subcadena se puede atacar por separado.
Use el intercambio secreto de umbral de k -out-of- n :
- Necesita menos espacio que el almacenamiento de hashes múltiples, pero más que almacenar la contraseña sin cifrar o usar encriptación reversible.
- No es necesario descifrar la contraseña para la verificación de subcadenas.
- Todavía susceptible de ataque de fuerza bruta si la base de datos está en peligro: cualquiera que adivine k letras de la contraseña puede recuperar el resto. (De hecho, con algunas implementaciones, las letras k -1 podrían ser suficientes).
En última instancia, todos estos esquemas sufren de debilidad contra los ataques de fuerza bruta si la base de datos se ve comprometida. La razón fundamental de esto es que simplemente no hay mucha entropía en una subcadena de tres letras de una contraseña típica (o, incluso, de una especialmente fuerte), por lo que no se necesitarán muchas conjeturas para descifrar.
¿Cuál de estos es el mejor? Eso es difícil de decir. Si tuviera que elegir uno de estos esquemas, probablemente utilizaría el almacenamiento cifrado mediante un fuerte cifrado simétrico (como AES), con un servidor o HSM aparte para manejar el cifrado y la verificación. De esta forma, al menos, un atacante que ponga en peligro un servidor de aplicaciones para el usuario no podría copiar la base de datos y atacarlo fuera de línea (aunque aún podría montar un ataque de fuerza bruta contra el HSM si no implementara una limitación de velocidad efectiva) )
Sin embargo, diría que la idea de usar solo una parte de la contraseña para la autenticación es muy defectuosa: en realidad no ofrece los beneficios de seguridad que se supone que debe, excepto en algunos escenarios de ataques particularmente restringidos (como un espía que solo puede observar un evento de autenticación y no puede seguir intentándolo hasta obtener el mismo desafío), pero fundamentalmente debilita la seguridad al reducir la cantidad de información necesaria para una autenticación exitosa. Existen soluciones mucho mejores, como las TAN , para las preocupaciones de seguridad que se supone que debe abordar la autenticación parcial de contraseñas.
Algunos sistemas de contraseñas (especialmente los bancos) requieren que ingrese tres (especificadas) letras de su contraseña para iniciar sesión. Esto se supone que debe vencer a los registradores de pulsaciones de teclas, y posiblemente a los ataques de repetición de detección de cables (para sesiones no encriptadas).
Claramente, no hay forma de que un esquema así pueda funcionar usando hashing de contraseña ordinario, ya que necesitaría saber la contraseña completa para calcular el hash.
¿Qué almacenan estos sistemas comúnmente en el lado del servidor para que esto funcione?
¿Almacenan la contraseña en texto plano, o tal vez un hash separado de cada letra, o qué?