2012-01-20 40 views
1

我想在Windows上安全地存储共享密钥,但是让这个密钥可以通过在潜在不同用户帐户下运行的应用程序访问。在OSX上,解决方案是使用合适的ACL将密钥放入系统密钥链中,以便将密钥的访问限制为仅需要使用该密钥的各种应用程序。Windows 7相当于OS X系统钥匙串

在Windows上,安全存储(CryptProtectData()CryptUnprotectData())允许我存储为特定用户加密的密钥,但似乎不允许将密钥限制为特定进程。此外,使用CryptProttectData无法保护数据以供不同用户访问。 (1)使用CryptProtectData()安全地存储密钥数据;(2)通过WCF端点公开密钥数据,处理我的服务中的认证/授权。我的唯一选择是Windows服务。这看起来很重(并且容易出错)。这是我唯一的选择吗?

回答

2

那么......您可以配置CryptProtectData()进行加密,以便您可以在执行加密时通过指定CRYPTPROTECT_LOCAL_MACHINE标志来解密/访问不同用户的数据;这将允许在同一台计算机上的任何用户帐户使用CryptUnprotectData()解密数据。

对于特定应用程序与特定用户,在Windows中没有一种简单的方法来执行此操作。 Windows的安全模型基于使用用户帐户来控制对资源的访问,所以你真的离开了这个。

我不知道你有什么用处,但可以考虑在一个普通用户帐户下运行需要访问这些数据的应用程序(使用run-as功能),然后限制对受保护数据的访问一个用户帐户。

2

您的更好的选择是将其存储在文件中(可能以加密形式)并在文件上设置ACL。问题是您无法控制每个应用程序的访问权限(仅限于每个用户帐户的基础上)。因此,如果您需要细粒度控制,那么您需要实现Web服务,或者创建一个具有访问控制的虚拟文件系统,并通过该虚拟文件系统公开该密钥(这也需要一个控制应用程序,与服务非常相似)。