Declaración de problema:
Quiero que las claves privadas / contraseñas / secretos criptográficos de algún tipo estén disponibles para un proceso automatizado desatendido, pero dificultan que un atacante con acceso al sistema pueda robarlos. Haciendo todo esto en software, no tarjetas inteligentes o HSMs.
Por lo que sé, este es un problema difícil y no resuelto. Por ejemplo, AFAIK, Tomcat ni siquiera se molesta y solo almacena la clave privada TLS del servidor de forma clara. También hay esta pregunta:
con la respuesta aceptada:
Lo que estás pidiendo es imposible.
En el kit de herramientas criptográficas y en las bases de código de producto con las que trabajo todos los días (que permanecerán sin nombre) tenemos una solución aceptada, como describí en esta respuesta o iot.stackexchange.com :
Con los servidores tradicionales, la única solución real que conozco es derivar una clave AES de algún tipo de "huella digital de hardware" creada combinando números de serie de todos los dispositivos de hardware. Luego use esa clave AES para cifrar las credenciales. Un proceso que se ejecuta en el mismo servidor puede reconstruir la clave AES y descifrar las credenciales, pero una vez que extrae el archivo del servidor, es esencialmente descifrable.
@Gilles se opuso a mi respuesta, de ahí que haga esta pregunta para intentar aprender algo.
Soy consciente de que esto es una ofuscación en el mejor de los casos y no estoy diciendo que sea una gran solución, pero no estoy al tanto de una mejor. Soy consciente de:
- Windows DPAPI, que AFAIK hace esencialmente lo mismo mediante la huella digital de su cuenta de usuario en lugar de hardware.
- Llaveros del SO, aunque pensé que necesitaban un humano en el teclado para ingresar una contraseña en el arranque.
¿Me estoy perdiendo algo?