2010-02-27 42 views
3

我正在使用一個listview控件,它將使用AES加密的數據保存到文件中。我需要將listview中的每個項目的數據保存在std :: string的std :: list類中。我應該只保留在std :: list中加密的數據,並在需要時解密爲局部變量?還是僅僅將它保存在文件中就足夠了?將加密數據保存在內存中

回答

6

要回答這個問題,你需要考慮你的攻擊者是誰(即你試圖隱藏數據的人是誰?)。

爲此,如果您製作了一個簡單的Threat Model(基本上:您擔心的是誰,您想保護什麼,可以執行的攻擊類型以及其風險),這會有所幫助。

完成此操作後,您可以確定是否值得您努力保護數據不被寫入磁盤(即使只保存在內存中)。

我知道這個答案可能看起來不太有用,但我希望它能幫助你意識到在你能夠正確地防禦他們之前你需要特別說明你的攻擊者(並因此知道)你(也就是說,你可能最終實現完全無用的防禦,等等)。

0

你會不止一次解密同一個項目?如果你不關心內存中的攻擊,那麼性能可能是需要考慮的另一個問題。

如果您有時間,可能需要對解決方案進行編碼以適應兩種可能性。因此,如果您選擇緩存加密,那麼如果性能成爲問題,那麼稍後更改爲解密的內存中解決方案並不是太多工作。

+0

是的,它將在需要時解密相同的項目。但現在我擔心如果將這些項目保存在容器中,我將如何對這些項目進行排序? – cpx 2010-02-27 14:11:08

+0

@ Dave17:您可以容納一些元數據以便於排序(即SortIndex並不需要加密)。但值得考慮的是,這是否會泄露任何信息(可能會或可能不會)給攻擊者。與往常一樣,實施得越多,風險就越高,因爲攻擊的表面積增大,並且更容易出現錯誤。 – 2010-02-27 14:26:04

+0

但是如果你已經在listview中查看它,你爲什麼需要加密數據?只是鎖定內存區域不是更好嗎? – cpx 2010-02-27 14:53:16

0

目前還不清楚你試圖抵禦什麼攻擊。如果攻擊者擁有對系統的本地訪問權限,那麼他們可以將一個像OllyDBG這樣的調試器附加到進程中以觀察其內存。攻擊的目的是在對AES的調用中設置一個斷點,然後觀察傳入並返回的數據,非常簡單。

0

我同意柔滑的回答,你必須從基本的威脅模型開始。只是想指出,在處理內存中的敏感信息時,即使沒有寫出信息,您也有權利擔心信息可能會在磁盤上結束。

例如,內存中的數據可能寫入交換空間,或者可能以核心文件形式存在,並可能從其他位置(如電子郵件附件或複製到其他位置)存在。你可以在沒有加密內存中的數據的情況下處理這些問題,因爲這可能只是將問題轉移到處理密鑰以解密該數據...

相關問題