Tengo una aplicación empresarial interna que, como parte de su funcionalidad, se conecta a una aplicación de terceros utilizando credenciales de inicio de sesión específicas para el usuario de mi propia aplicación. Estas contraseñas se almacenan en una base de datos central. Actualmente, son de texto simple (esto se justificó en base a un alto nivel de seguridad de primera línea en nuestra LAN corporativa), pero un ataque reciente contra la red de nuestra nueva empresa matriz (afortunadamente no entraron) me ha llevado para echar otro vistazo a eso.
Contraseñas para la aplicación interna principal, podemos cifrarlas con un salt, no hay problemas allí. El problema es cifrar las credenciales de la aplicación de terceros. Como todos sabemos, a los usuarios les gusta mantener la misma contraseña para múltiples aplicaciones, así que no importa lo que haga con la contraseña interna de la aplicación para su custodia, no hará ninguna diferencia si las credenciales de terceros se encuentran allí en texto sin formato. justo al lado.
Aquí está el kicker; sea cual sea el método utilizado, debe ser reversible dentro de la aplicación , porque la aplicación de terceros # $% ^ & * requiere la transmisión de credenciales de texto sin formato del proceso de la aplicación interna a un servicio SOAP (afortunadamente, lo hace a través de HTTPS), y , la aplicación interna les permite a los usuarios mantener estas credenciales de terceros almacenadas (ahorrando al departamento de desarrollo la molestia de mantener el contenido de la base de datos). Entonces, lo mejor que puedo hacer es cifrar, no hash.
Entonces, me doy cuenta de que cualquier método que emplee aquí será menos que ideal; si el atacante obtiene tanto la aplicación como las credenciales, obtendrá las contraseñas de texto simple y no hay mucho en lo que pueda pensar para evitarlo. Solo estoy tratando de hacer que un atacante trabaje un poco más difícil para obtener las credenciales, con suerte dándome el tiempo suficiente para al menos alertar al tercero para que pueda inhabilitar nuestros inicios de sesión, si no forzar a cada usuario del sistema a cambiar su credenciales de terceros antes de que el atacante pueda descifrar una.
Entonces, ¿qué sugieres? AES (no puedo imaginar que RSA sea de mucha utilidad, ya que la aplicación tiene tanto para cifrar como para descifrar). ¿Algún truco inteligente para mantener la llave fuera del alcance de alguien que logra obtener tanto la base de datos como los binarios de la aplicación?