La forma ideal de manejar los escenarios en los que necesita la autorización de un usuario sería usar algo como Oauth, pero dado que OAuth no se aplica a SFTP, sí, desearía almacenarlos en un formato cifrado, y Los desciframos en tiempo de ejecución. El cifrado es increíblemente difícil de hacer correctamente. Muchos expertos que lo han hecho durante años todavía cometen errores. Si bien no puedo explicar específicamente cómo debería funcionar su aplicación, puedo dar algunas pautas.
- Asegúrese de que está siguiendo los protocolos criptográficos adecuados. Esta será la parte más difícil. Necesitarás estudiar un poco para esto.
- Asegúrese de usar una biblioteca conocida como NaCl o BouncyCastle. Son bibliotecas agradables y de alto nivel que hacen más difícil cometer errores.
- Elija el algoritmo adecuado. Usted querrá elegir un cifrado de bloque simétrico como AES-256. El cifrado asimétrico o los cifrados de flujo no están diseñados para la tarea que intenta realizar.
- Almacene sus claves de cifrado en un almacén de datos separado de sus datos cifrados. Si su base de datos que contiene sus textos cifrados es violada por un ataque de inyección de SQL, no desea que la clave de descifrado se incluya junto con eso.
- Asegúrese de tener en cuenta a las personas que tienen contraseñas duplicadas. El cifrado es determinista, es decir, si utiliza la misma clave de cifrado y el mismo texto sin formato, obtendrá el mismo resultado. Esto puede solucionarse de varias maneras diferentes: ya sea utilizando una clave de cifrado única para cada cliente (probablemente no sea práctico), asegurándose de usar un IV único (y eligiendo un modo de operación que admita IV), o agregando un valor único al frente del texto plano (nuevamente, asegurándose de elegir el modo de operación correcto).
Esto no pretende ser una lista definitiva de cómo implementar el cifrado de forma segura, pero al menos puede hacer que apunten en la dirección correcta.