Soy un novato en arquitectura de sistemas y seguridad, así que solo quiero comprobar que este plan tiene sentido. Estoy creando una aplicación web y necesito almacenar una contraseña para cada usuario. Ya he leído mucho sobre algoritmos de hash, sal, etc. Voy a usar Argon2 ya que parece ser la recomendación actual. Mi pregunta se refiere a cómo se almacenan y verifican los hashes en términos de la arquitectura general.
Como el hashing con Argon2 es intencionalmente bastante costoso, quiero crear un servicio en un módulo / proceso separado para que se pueda mover fácilmente a una o más máquinas separadas si es necesario. Incluso si viviera en la misma máquina que el servidor de aplicaciones principal, sería trivial monitorear el uso de la CPU y la memoria para ajustar los factores de costo del algoritmo de hash.
Mi aplicación enviará solicitudes POST de HTTPS al servicio para crear, actualizar, eliminar o verificar una contraseña. Todos los detalles estarán en el cuerpo de la solicitud, incluida la contraseña en texto sin formato. La conexión será encriptada. La respuesta será simplemente una indicación de éxito o fracaso.
El servicio manejará la lógica de las operaciones de la base de datos, las contraseñas de hash y la comparación de hashes para la igualdad. Las contraseñas vivirán en una base de datos separada de los usuarios, de modo que incluso si un atacante vuelca toda la base de datos de contraseñas, aún no conocen la contraseña de nadie y viceversa. Además, si alguna vez migro a una solución de almacenamiento diferente para mis otros datos, habrá menos migración ya que las contraseñas pueden permanecer como están.
¿Eso suena bien? ¿O de alguna manera abre más puntos débiles de los que no estoy enterado?