我正在尋找分配256位私鑰存儲的「最佳實踐」。我至少在想,鍵盤不應該被分頁到磁盤,並且可能還有其他一些攻擊媒介擔心(la Hearbleed)。該解決方案必須可移植到Linux和BSD。什麼是合理安全,合理便攜的方式爲私鑰分配內存?
有些事情我已經看過:
- TRESOR(未BSD-便攜式)
- Akamai的 「安全堆」
- 大衛·肖的secmalloc
- 使用m鎖到
- 只是禁止分頁使用malloc,不用擔心。粗略的閱讀表明這可能是LibreSSL所做的。
有什麼建議嗎?
我正在尋找分配256位私鑰存儲的「最佳實踐」。我至少在想,鍵盤不應該被分頁到磁盤,並且可能還有其他一些攻擊媒介擔心(la Hearbleed)。該解決方案必須可移植到Linux和BSD。什麼是合理安全,合理便攜的方式爲私鑰分配內存?
有些事情我已經看過:
有什麼建議嗎?
除非您有特殊要求,否則只需使用malloc
即可。它的優點是valgrind和類似的可以捕獲使用錯誤,這是您可能擔心的漏洞類型的主要方式之一。正如OpenSSL的失敗告訴我們的那樣,嘗試做一些奇特的事情並且搗亂它是一個主要風險。
如果您有更多苛刻的要求,它確實取決於您的使用情況。我會假設你的密鑰是暫時的,否則避免將它們存儲在磁盤上並不合理。這裏是我推薦的特定風險緩解措施:
交換到磁盤:如果你的系統需要對物理攻擊的安全性,你不應該有掉的。單獨試圖用mlock
來保護特定數據是一個笑話。只需關閉swap並安裝足夠的內存,這是一個非問題。應該將mlock
視爲實時調度功能,而不是安全功能。
心臟出血漏洞樣的問題,適度防禦:通過mmap
,兩側防護頁面分配你的記憶:第一mmap
2頁比你更需要,所有PROT_NONE
,然後用mprotect
使所有,但第一頁和最後一頁PROT_READ|PROT_WRITE
。完成後請立即用munmap
免費。
Heartbleed-like issues,strong defense:Fork a child process to do all the cryptography。
順便說一句,您使用的密碼是256位密鑰提供的任何安全性? –
@ R ..現代對稱密碼(如AES)?像4096位這樣的大尺寸適用於RSA等非對稱算法。 –
OP表示「私鑰」,所以我假設了公鑰密碼,但也許意圖只是「需要保密的密鑰」。 –