2010-03-05 51 views
4

我有一個基於Windows.Forms的.NET桌面應用程序,它將特權信息存儲在磁盤上的一個文件中(不使用.NET配置文件),使用對稱加密算法(如使用MS的CryptoAPI的TripleDES)進行加密。該文件必須在多個程序運行/機器重新啓動週期內讀取/寫入,也就是說,每次都使用相同的密鑰/ IV。這裏最明顯的問題是如何保護密鑰(也可能是IV),並且這裏的幾個問題簡單地說「使用DPAPI」,並給出一個往返加密/解密的簡單例子。使用DPAPI保護加密密鑰:明顯的漏洞?

我知道如何使用DPAPI,但似乎有一個明顯的問題,用它來保護密鑰/ IV被饋送到另一個加密方案。請看下面的代碼:

TripleDESCryptoServiceProvider^ cryptoprov = gcnew TripleDESCryptoServiceProvider; 
cryptoprov->Key = ProtectedData::Unprotect(encryptedKey, salt, DataProtectionScope::CurrentUser); 
cryptoprov->IV = ProtectedData::Unprotect(encryptedIV, salt, DataProtectionScope::CurrentUser); 

由於您必須將事實SymmetricAlgorithm派生類的密鑰和IV,不能攻擊者只是設置在這一點上一個斷點,並輕鬆地找出密鑰/ IV是什麼?

我的問題如下:

  • 我錯過了點使用DPAPI來保護密鑰?你會怎麼做?
  • 我應該只使用DPAPI來加密我的文件嗎?因此,不需要密鑰/ IV存儲。
  • 我注意到了非對稱加密的CspParameters的存在。這是否比對稱更好? (在我的情況下,不是對稱與不對稱完全對稱)

謝謝!

+3

除非你有很好的理由,否則你應該使用Rijndael,而不是TripleDES。 – SLaks

回答

2

DPAPI的目標是保護持久數據免受窺探和篡改,它不提供任何保護應用程序內存中的祕密數據。

3

如果攻擊者能夠設置斷點,那麼您已經丟失了。
攻擊者可以在解密數據並讀取明文後簡單地設置斷點。

你害怕什麼樣的攻擊者?

如果你願意,你可以寫if (Debugger.IsAttached) Environment.FailFast(),但攻擊者可以使用Reflexil刪除檢查。

+0

是的,好點,誰會關心解密後的密鑰,如果他們可以看到它後解密... 我想我試圖挫敗休閒/好奇的用戶誰想要找到敏感信息,但試圖保護一個專門的人似乎是一個巨大的浪費時間。 –

+0

攻擊者是誰?系統上的管理員?有人在網絡上?其他人? – SLaks

+0

某人可以在軟件正在運行的情況下物理訪問機器,並且用戶仍然登錄。可以說合法用戶已經離開,並且沒有鎖定系統,並且一些即興表演步驟即可實現。它們與運行我們軟件的用戶具有相同的憑據。 –