我使用每用户Win32加密密钥容器(通过.Net RSACryptoServiceProvider
类)来存储用于在密码管理器中解密存储密码的私钥。
私钥存储的安全性如何?显然,从同一个用户帐户运行的任何程序都可以访问它。但是密钥是否实际上是根据用户的密码加密的?
用户登录后,我可以假设私钥只能 吗?或者服务(或其他帐户)是否仍然可以提取密钥?计算机管理员可以不知道用户的密码提取它吗?可以通过使用管理帐户重置用户密码来提取密钥吗?如果计算机被盗并且攻击者可以访问硬盘(但不知道用户的密码),他可以提取私钥吗?如果用户已锁定会话,攻击者是否可以使用管理帐户/内核驱动程序从内存中提取密钥?
P.S。我知道'主密钥'模式,但在我的情况下这是不可接受的,所以我需要以最安全的方式存储密码。
答案 0 :(得分:2)
只有在用户登录后才能访问用户的私钥,并且只能通过重置用户密码然后使用重置密码登录来访问用户的私钥(实际上,在重置用户密码之前,有警告说用户将无法访问加密数据等。)请参阅:http://support.microsoft.com/kb/290260
但是,一旦用户登录,则同一台计算机上的其他用户进程可能具有足够的权限(通常仅授予管理/系统帐户)来访问存储的密钥,例如,通过将代码注入到将运行的用户进程中我是用户的上下文,因此能够执行用户可以对密钥执行的任何操作(使用它来解密,签名或导出密钥等)。 / p>
启用强私钥保护可以通过要求用户在使用密钥时输入密码来缓解其中的一些问题。即便如此,恶意代码仍有可能拦截密钥的密码。