我有一個基於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的存在。這是否比對稱更好? (在我的情況下,不是對稱與不對稱完全對稱)
謝謝!
除非你有很好的理由,否則你應該使用Rijndael,而不是TripleDES。 – SLaks