2013-01-08 99 views
8

我正在使用每個用戶的Win32加密密鑰容器(通過.Net RSACryptoServiceProvider類)來存儲用於解密存儲在口令管理器中的密碼的私鑰。Windows加密容器有多安全?

私鑰存儲的安全性如何?很明顯,從同一用戶帳戶運行的任何程序都可以訪問它。但實際上是基於用戶密碼加密的密鑰?

我可以假設私鑰可訪問只有一旦用戶登錄?或者服務(或其他帳戶)是否仍然可以提取密鑰?計算機管理員可以不知道用戶的密碼解壓縮它嗎?可以通過使用管理帳戶重置用戶密碼來提取密鑰嗎?如果計算機被盜,攻擊者可以訪問硬盤(但不知道用戶的密碼),他可以提取私鑰嗎?如果用戶鎖定了會話,攻擊者是否可以使用管理帳戶/內核驅動程序從內存中提取密鑰?

P.S.我知道「主密鑰」模式,但在我的情況下這是不可接受的,所以我需要以最安全的方式存儲密碼。

+0

當確定聽起來像要加密密碼時,看到如何加密密鑰有點困難。在任何地方調用RSA.ExportParameters(true)來解密密碼需要物理安全性來保護私鑰。只有通過存儲和比較密碼的散列才能實現登錄。 –

回答

2

用戶的私鑰只能在用戶登錄後訪問,並且不能簡單地通過重置用戶密碼然後使用重置密碼登錄來訪問(事實上,在重置用戶密碼之前,有警告用戶將失去對加密數據的訪問等)。請參閱:http://support.microsoft.com/kb/290260

但是,一旦用戶登錄,其他用戶的進程就有可能在同一臺計算機上擁有足夠的權限(通常只授予管理/系統帳戶)訪問存儲的密鑰,例如通過將代碼注入將運行的用戶進程中,我是用戶的上下文,因此能夠執行用戶可以對該密鑰執行的任何操作(使用它來解密,簽名或導出密鑰等)。

啓用強大的私鑰保護可以通過要求用戶在密鑰使用時輸入密碼來緩解其中一些問題。即使如此,惡意代碼仍然可能攔截密鑰的密碼。