Windows 7 эквивалент OS X System Keychain - PullRequest
1 голос
/ 20 января 2012

Я хотел бы безопасно хранить общий секретный ключ в Windows, но сделать этот ключ доступным для приложений, работающих под потенциально разными учетными записями пользователей. В OSX решение состоит в том, чтобы поместить ключ в системную связку ключей с соответствующим списком ACL, чтобы ограничить доступ к ключу только для различных приложений, которым требуется использование ключа.

В Windows безопасное хранилище (CryptProtectData() и CryptUnprotectData()) позволяет мне хранить секрет, зашифрованный для конкретного пользователя, но, похоже, не позволяет ограничить доступ к ключу для определенных процессов. Более того, невозможно использовать CryptProttectData для защиты данных для доступа разных пользователей.

Кажется, мой единственный вариант - это служба Windows, которая (1) надежно хранит данные ключа, используя CryptProtectData(), и (2) предоставляет данные ключа через конечную точку WCF, обрабатывая аутентификацию / авторизацию в моей службе. Это кажется довольно тяжелым (и подверженным ошибкам, чтобы получить право). Это мой единственный вариант?

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Ну ... вы можете настроить CryptProtectData() для шифрования, чтобы данные могли расшифровываться / получать доступ к различным пользователям, указав флаг CRYPTPROTECT_LOCAL_MACHINE при выполнении шифрования; это позволит любой учетной записи пользователя на том же компьютере дешифровать данные, используя CryptUnprotectData().

Что касается конкретных приложений против конкретных пользователей, то в Windows нет простого способа сделать это. Модель безопасности Windows основана на использовании учетных записей пользователей для управления доступом к ресурсам, так что вы действительно останетесь с этим.

Я не знаю, какие у вас есть варианты использования, но вы можете рассмотреть возможность запуска приложений, которым необходим доступ к этим данным, под одной общей учетной записью пользователя (использовать возможность запуска от имени), а затем ограничить доступ к защищенным данным этой учетная запись пользователя.

2 голосов
/ 20 января 2012

Лучшим вариантом будет сохранить его в файле (возможно, в зашифрованном виде) и установить ACL для файла. Проблема в том, что вы не можете контролировать доступ для каждого приложения (только для каждого пользователя). Поэтому, если вам нужен точный контроль, вам потребуется либо реализовать веб-сервис, либо создать виртуальную файловую систему с контролем доступа и предоставить ключ через эту виртуальную файловую систему (для этого также требуется управляющее приложение, очень похожее на сервис ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...