8

我正在使用每用户 Win32 加密密钥容器(通过 .NetRSACryptoServiceProvider类)来存储用于在密码管理器中解密存储密码的私钥。

该私钥存储的安全性如何?显然,任何从同一用户帐户运行的程序都可以访问它。但是密钥实际上是根据用户的密码加密的吗?

我可以假设只有在用户登录后才能访问私钥吗?或者服务(或另一个帐户)仍然可以提取密钥吗?不知道用户密码的电脑管理员可以解压吗?可以通过使用管理帐户重置用户密码来提取密钥吗?如果计算机被盗,攻击者可以访问硬盘(但不知道用户密码),他能提取私钥吗?如果用户已锁定会话,攻击者能否使用管理帐户/内核驱动程序从内存中提取密钥?

PS我知道“万能钥匙”模式,但在我的情况下这是不可接受的,所以我需要以最安全的方式存储密码。

4

1 回答 1

2

用户的私钥应该只有在用户登录后才能访问,并且不能简单地通过重置用户密码然后使用重置密码登录来访问(实际上,在重置用户密码之前,有警告说用户将丢失访问加密数据等)请参阅:http: //support.microsoft.com/kb/290260

但是,一旦用户登录,同一台机器上的其他用户进程就有可能具有足够的权限(通常只授予管理/系统帐户)来访问存储的密钥,例如通过将代码注入到用户进程中将运行我是用户的上下文,因此能够执行用户可以使用密钥执行的任何操作(使用它来解密、签名或导出密钥等)。

启用强私钥保护可以通过要求用户在使用密钥时输入密码来缓解其中一些问题。即使这样,恶意代码仍有可能截获密钥的密码。

于 2013-01-08T19:07:35.240 回答