2011-09-10 25 views
3

我有一個私鑰,我使用用戶的密碼進行解密,但我需要經常使用這個私鑰,並且我不想將它解密到內存中。如何將私鑰保存在安全的內存中

我想到的一個選擇是使用隨機生成的一次性密碼對私鑰進行加密,並且每次使用它來替換密碼,但仍將一次性密碼保存在內存中。

我想過的另一個選擇是使用OpenSSL內存BIO。從我的理解來看,它保證了它內部的數據安全(我不知道它是如何做到的,但這就是我所聽到的)。

你認爲哪個更好?有沒有更好的選擇? 謝謝! :-)

p.s. 我正在使用本機C++和OpenSSL。

+2

除非您有專用的安全硬件,否則無法以任何方式將密鑰保存在內存中。您一定要查看各種安全內存API,以便您訪問不可分頁的內存並保證覆蓋。爲密鑰添加另一層加密是可能的,但它本身可能會受到攻擊......它實際上取決於您的威脅模型。 –

+0

爲什麼需要密碼多次?是否需要重新驗證?實際上需要認證嗎? –

+0

@Kerrek:你知道OpenSSL的BIO是否是這種安全的內存API? – TCS

回答

2

根據定義您在尋找的是手段Security though obscurity。在這種情況下,用戶比設備更能控制設備。祕密必須以純文本形式存在,並且攻擊者(用戶)可以附加調試器並查看該值。永遠不會有解決這個問題的辦法,它不是安全的。

+0

感謝您的回答。我沒有通過默默無聞的方式尋找某種安全感,但我無法得到更好的東西,所以我就這樣問道:-)。 您的回答增強了我的悲哀懷疑,即沒有軟件解決方案來解決問題... 感謝您的回答! – TCS

0

您可能過度設計了應用程序的安全部分。事實是,您的應用程序可能會隨時從內存中換出,這意味着在您甚至能夠從內存中刪除未加密的版本之前,可以將密鑰寫入磁盤。

正如有人建議的那樣,您通常會使用其他一些支持內存的設備來存儲密鑰。由於它是外部設備,並沒有映射到進程內存,交換或轉儲不會獲得密鑰。有便宜和昂貴的變體。我研究過的一個是nCipher HSM(硬件安全模塊),它執行板上的所有操作。您的密鑰在HSM內存中解鎖,但所有加密操作都發生在設備上。他們甚至有能力讓編譯代碼在HSM中運行在安全的環境中。但是,這些很昂貴。

相關問題