在程序退出後,有什麼方法可以確保密鑰材料從內存中安全地擦除?能夠手動清除並保持程序運行會更好。正如Haskell使用自動化垃圾收集(如果存在大量可用內存,這可能根本不會發生?),我認爲第二項任務是不可能的。能用FFI實現這個目的嗎?針對冷啓動攻擊:如何限制Haskell中的敏感信息
回答
當不再需要GHC時,GHC可以將內存返回給操作系統,因此僅在退出時清空內存無法實現您的目標。垃圾收集是一項複雜的業務,但通常無法確保您的安全數據的舊副本不會返回到操作系統內存池。
但是,操作系統會在將內存分配給其他進程之前將內存留空。如果你不相信操作系統來保證你的內存安全,那麼你就有更大的問題。
我不確定「不可靠」是什麼意思; Haskell GC是可靠的,但該程序對正在發生的事情幾乎沒有察覺。
但是,如果您僅僅關心加密密鑰而不是大的複雜數據結構,那麼生活會變得更好一些。您可以使用Foreign Pointer指向您的密鑰的內存位置,然後將該位內存空置爲您的終結器的一部分。你甚至可以編寫一些代碼來分配一塊內存,然後根據請求將外部指針移交給該內存的密鑰大小的塊,並用終結符擦除密鑰。這可能會做你想做的。
ForeignPtr的一點是它保證不會被GC移動或重新解釋。
感謝您的回答。由於我對所有這些「外來」的東西都不太熟悉,因此我會拭目以待,看看現有代碼的答案是否會出現,如果沒有答案,請接受您的答案。操作系統在將內存交給其他進程之前清除內存在這裏沒有幫助,因爲一次感冒只需拔出插頭並將內存模塊放到另一臺機器上。如果聽起來想要過於安全,請考慮(筆記本電腦)磁盤加密 - 在暫停未使用加密的密鑰材料之前刷新內存是一個不錯的主意。我也澄清了我不願意在原文中依賴自動GC。 – Andres 2012-08-13 11:53:11
ForeignPtr沒有什麼可怕的困難。請參閱http://en.wikibooks.org/wiki/Haskell/FFI獲取教程。 – 2012-08-13 11:56:24
@Andreas不會拉動插頭清空其數據的RAM? – amindfv 2012-08-14 12:38:52
- 1. 發送針對AD的敏感信息
- 2. 存儲敏感信息
- 3. $ _SERVER信息是否敏感?
- 4. 流星:process.env.MAIL_URL敏感信息
- 5. 屏蔽節點中的敏感信息
- 6. 保護PhoneGap中的敏感信息?
- 7. 在onsenUI/Angular中保護敏感信息
- 8. 的Maven pom.xml的敏感信息和VCS
- 9. MVC3 - 把敏感信息的ViewBag
- 10. 指定摩卡測試敏感信息
- 11. 如何抑制python的啓動信息?
- 12. 如何從Subversion中清除敏感信息?
- 13. 如何在SQL Server 2008中存儲敏感信息?
- 14. 如何應對攻擊xmlrpc.php攻擊
- 15. 如何存儲命令行工具的敏感信息?
- 16. 如何編輯來自log4net的敏感信息?
- 17. 如果把數據庫中的敏感信息
- 18. WCF冷啓動
- 19. 內存中的冷啓動
- 20. 針對EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS的黑客攻擊?
- 21. 針對WPF應用程序的攻擊
- 22. 針對.NET DataView的注入攻擊RowFilter
- 23. 從github隱藏我的敏感信息(例如密碼)
- 24. 將敏感信息存儲在Drupal模塊中的位置?
- 25. WSO2 MDM加密.json配置文件中的敏感信息
- 26. 在軌中過濾敏感信息(params)的測試
- 27. 在源代碼中存儲敏感信息的最佳實踐
- 28. 保護Objective C源代碼中的敏感信息
- 29. 文檔根目錄中的敏感信息
- 30. 對齊敏感div中心
是的,冷啓動攻擊是如此普遍,你必須擔心它們。您可以使用ST,將數據保存在STRef中並在使用後進行加擾。不知道,如果你可以在STRefs背後記憶。 – 2012-08-13 10:18:25