En el caso que ha descrito, está almacenando información en nombre del usuario y no la está utilizando para autenticar al usuario. Por lo tanto, si bien el contenido de lo que está almacenando incluye contraseñas (casi exclusivamente), no está realmente "almacenando contraseñas" en el sentido tradicional. Estás almacenando secretos .
Ajusta tu estrategia en consecuencia.
Ambos de estos problemas están resueltos; Solo necesitas aplicar la solución correcta. Al "almacenar contraseñas" (es decir, autenticar al usuario), se realiza el hashing, la sal, la extensión de la clave, etc., con los que está familiarizado. Pero ¿qué pasa con el almacenamiento de secretos .
En primer lugar, evita el problema si es posible . Es por esto que existen conceptos como tokens de acceso a la API. No necesitas mi contraseña de Facebook porque no puedes usarla. Necesitas un token de acceso que Facebook esté dispuesto a darte con mi permiso.
La siguiente mejor solución es vincular el acceso al inicio de sesión del usuario . La información se cifra mediante una clave derivada de la contraseña que utiliza para iniciar sesión, que no sé y no almaceno. Por lo tanto, yo (el propietario del servidor) no puedo acceder a sus datos a menos que escriba su contraseña.
Esto es popular porque es poderoso. De hecho, Windows ha estado haciendo esto durante mucho tiempo, por lo que cambiar su contraseña puede hacer que los archivos cifrados se vuelvan inaccesibles. También es la razón por la que su contraseña de Windows se almacena en texto sin formato en la memoria mientras está conectado. Un error de implementación que le recomendaría evitar.
A continuación, en nuestra lista, puede separar sus procesos , de modo que los datos sin cifrar nunca estén disponibles en las máquinas que se encuentran en el exterior. Puntos extra si hay un HSM involucrado. Lo esencial aquí es que el usuario proporciona sus secretos al servidor web, que se encriptan rápidamente mediante la clave pública de un dispositivo criptográfico secreto que es totalmente inaccesible porque no está conectado. Los secretos simples se olvidan de inmediato, y los datos encriptados se envían a algún lugar de almacenamiento en frío en algún lugar.
Finalmente, los secretos se descifran en otro lugar con la ayuda de ese dispositivo de cifrado y se utilizan. Sólo, el punto donde esto sucede NO TIENE ACCESO A INTERNET. O al menos no hay camino desde el exterior hacia adentro.
Finalmente, puedes probar la solución anterior, pero fallar miserablemente. Solo menciono esto porque en realidad todas las demás soluciones son simplemente malas variantes de las anteriores: cifrado en la base de datos, usando una contraseña de aplicación , almacenando la contraseña en otro servidor, almacenando los datos en otro servidor, compartiendo su clave de cifrado con [ idea tonta aquí ], y así sucesivamente.
Y finalmente, mi advertencia estándar para preguntas como esta se aplica. Lo escribiré realmente grande:
El hecho de que esté haciendo esta pregunta significa que no debe hacerlo
En serio. ¿Almacenar las credenciales bancarias de las personas? Si no entiende a qué tipo de problemas se está metiendo, si está pidiendo a Internet sugerencias sobre cómo hacer esto, si todas las soluciones que mencioné no fueran YA YA lo más importante para usted como las únicas opciones viables, entonces no debería implementar esto .
La gente confía en que hagas esto bien. Y no vas a hacer esto bien. No porque no hiciste las preguntas correctas, sino porque no ha resuelto este problema con la frecuencia suficiente para comprender qué trampas ocultas habrá pasado por alto. Esto es difícil: no es difícil hacer , pero sí es difícil no cometer errores.
No traicione la confianza de sus clientes metiéndose de cabeza.