Sto cercando un modo per memorizzare un segreto su un computer Windows in modo che anche l'amministratore non possa accedervi.
Ma gli eseguibili firmati con un certificato di firma del codice specifico dovrebbero poter accedere a quel segreto senza l'interazione dell'utente.
Stavo pensando di utilizzare il seguente approccio:
- Crea un nuovo utente Windows "SecretKeeper" con una password casuale che non è nota a nessun utente.
- Installa un servizio Windows in esecuzione con l'account utente SecretKeeper. (Il servizio può essere avviato automaticamente da Windows senza che nessun altro conosca la password di SecretKeeper)
- Dai il segreto a quel servizio, fallo archiviare il file sul file system e crittografalo utilizzando l'API di crittografia file di Windows (in modo che solo l'utente specifico SecretKeeper possa leggere il file)
- Quando un'applicazione ha bisogno del segreto, può comunicare con il servizio in modo tale che il servizio possa controllare la firma del codice dell'eseguibile prima di inviare il segreto.
Il problema con questo approccio è che un amministratore può scambiare il servizio eseguibile con il proprio eseguibile che viene quindi avviato come SecretKeeper e può decrittografarlo.
C'è un modo per assicurarti che l'eseguibile per un servizio Windows installato non venga scambiato nemmeno dall'amministratore o esiste forse un approccio completamente diverso per raggiungere l'obiettivo di nascondere un segreto anche dall'amministratore?
Nota: sono consapevole che un amministratore locale di un computer Windows ha altri mezzi per accedere alla memoria di processo dei processi in esecuzione o controllare la comunicazione tra i processi e che ci dovrebbero essere altri meccanismi per impedirlo.
Questa domanda è simile alle seguenti domande: