Estoy buscando una manera de almacenar un secreto en una computadora con Windows para que ni siquiera el administrador pueda acceder a él.
Pero los ejecutables que están firmados con un certificado de firma de código específico deben poder acceder a ese secreto sin la interacción del usuario.
Estaba pensando en usar el siguiente enfoque:
- Crea un nuevo usuario de Windows "SecretKeeper" con una contraseña aleatoria que ningún usuario conoce.
- Instale un servicio de Windows que se ejecuta bajo la cuenta de usuario de SecretKeeper. (Windows puede iniciar el servicio automáticamente sin que nadie más sepa la contraseña de SecretKeeper)
- Dé el secreto a ese Servicio, haga que almacene el archivo en el sistema de archivos y lo cifre utilizando la API de cifrado de archivos de Windows (de modo que solo ese usuario específico SecretKeeper puede leer el archivo)
- Cuando una aplicación necesita el secreto, puede comunicarse con el servicio de manera que el servicio pueda verificar la firma del código del ejecutable antes de enviar el secreto.
El problema con este enfoque es que un administrador puede intercambiar el ejecutable del servicio con su propio ejecutable que luego comienza a ejecutarse como SecretKeeper y puede descifrar el archivo.
¿Hay alguna forma de asegurarse de que el administrador de un servicio de Windows instalado no sea intercambiado ni siquiera por el administrador o tal vez haya un enfoque completamente diferente para lograr el objetivo de ocultar un secreto incluso del administrador?
Nota: soy consciente de que un administrador local de una computadora con Windows tiene otros medios para acceder a la memoria de proceso de los procesos en ejecución o ver la comunicación entre procesos y que tendría que haber otros mecanismos para evitarlo.
Esta pregunta es similar a las siguientes preguntas: