簡體   English   中英

使用java.lang.String存儲敏感數據是否有害?

[英]Is it harmful to use java.lang.String to store sensitive data?

因為Java字符串對象是不可變的,並且垃圾回收器是異步的,所以將身份驗證信息存儲在字符串中會阻止一種有利於線程安全的安全性。

安全地處理此類信息需要可變性,即將以前用於存儲敏感信息的內存清零。

假設您正在使用帶有HeartBleed漏洞的openssl版本。

幼稚的身份驗證實現是否可能導致JVM內存堆滿用戶名和密碼?

如果您不知道信息不敏感,就應該完全避免使用java.lang.string嗎?

另外,Jvm可以采取什么措施來減輕風險? 我不知道“盡快將零填充回收的內存”切換為“ la”。

我不是加密專家,但是我認為這取決於您對威脅模型的評估。

如果您可以假設攻擊者可以讀取內存的隨機部分,那么我確實不確定您如何設計密碼安全的系統。 畢竟,攻擊者只要將您的秘密密鑰拉入內存,便可以將其提取出來。 如果您認為攻擊者可以做到這一點,那么采取額外的保護措施以盡快清除內存不會改變您的系統仍然容易受到攻擊的事實。 擁有系統定時知識的攻擊者可能會闖入其中。

如果您不認為攻擊者可以這樣做,那么將舊字符串保留在內存中的安全性考慮就不那么重要了。 Java的語言級安全性功能確保可以危害JVM的攻擊者看不到過期的字符串對象。 如果您不信任Java的實現來保護這一點,那么我認為問題不在於JVM,而不僅僅是字符串對象。

更普遍地說,我認為要問的第一個問題是您可以假設攻擊者可以做什么。 如果您認為您的系統可能容易受到某人掃描RAM內容的攻擊,那么我認為您要比垃圾收集器沒有足夠快地運行有一個更大的問題。 如果您認為某人可能能夠運行任意Java代碼,那么我認為這不是問題。 如果您認為有人可能凍結計算機並將其帶到實驗室檢查RAM,那么我認為您有更大的問題要擔心。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM