Esta es una muy buena pregunta y me gustaría ver más respuestas buenas. Estos son los que yo conozco:
- Codifique la (s) contraseña (s) en la aplicación.
- Mantener la (s) contraseña (s) en un archivo.
- Almacene la contraseña en un sistema externo y recupérela al inicio.
De estos, el primero es el más común y, a menudo, la contraseña es 'password' o 'changeit', etc. La segunda opción puede parecer mejor a primera vista, pero es difícil explicar exactamente cómo. La última opción es probablemente la única que tiene la esperanza de hacer algo significativo. Sé de soluciones de proveedores que hacen este tipo de cosas y pretenden mejorar la seguridad.
El problema fundamental aquí es que si un atacante está en el host con suficiente acceso para ver el espacio de la aplicación, realmente no hay nada que pueda hacer para evitar que obtengan esta contraseña. En algún momento debe estar en la memoria a la vista.
Tal como lo veo, la contraseña en el almacén de claves lo protege principalmente en la situación de que el propio almacén de claves se haya recuperado de la máquina sin tener acceso a esa máquina directamente. Con ese archivo, un atacante puede martillarlo a voluntad para obtener los secretos. Si no tienes una contraseña segura, termina el juego. Si el atacante puede extraer ese archivo, entonces es probable que puedan extraer otros archivos en los que se pueda almacenar la contraseña. Esto pone en duda las opciones 1 y 2.
En cuanto a la tercera opción, el problema ahora se mueve a cómo autenticar a los clientes para recuperar la contraseña. Sé que hay una serie de esquemas para hacer esto, como depender del host / red y usar firmas en los binarios. Podría tener una discusión completa sobre cómo hacer esto y qué nivel de protección ofrece.