У меня есть служба .NET Windows, которая должна хранить секрет на машине и защищать этот секрет от локальных системных администраторов. Это нормально, если у администратора домена есть доступ.
Этот секрет не введен пользователем. Он создается во время установки, и установку можно автоматизировать.
Первой моей мыслью было использовать EFS. Если бы я запустил свою службу Windows как учетную запись домена и сохранил секрет в зашифрованном файле EFS, даже локальные системные администраторы не могли получить доступ к файлу, если они не были также администраторами домена и не использовали сертификат восстановления EFS.
Есть ли лучший вариант? Есть ли способ сделать это, не требуя, чтобы служба Windows запускалась как учетная запись домена?
Я думаю, что для этого подойдет криптография с открытым ключом.
Создайте секрет, а затем зашифруйте его открытым ключом. Сохраните его локально. Делитесь ею везде, всем кому небезразлично. Если ваше начальное шифрование достаточно хорошее, нет проблем с доступом локальных администраторов к зашифрованному секрету.
Это предполагает, конечно, что вы не передаете закрытый ключ для криптографии своим локальным администраторам :)
Реестр создан для этого. Вы можете указать разрешения на ключевом уровне.