内存中的敏感数据

def*_*alt 19 memory security

我正在研究一个Java密码管理器,我目前拥有所有用户的数据,在从文件解密后,始终在内存中存储并作为字符串存储,以便在UI等中显示.

这在任何方面都是安全风险吗?我特别担心有人"倾倒"或以某种方式读取计算机的内存并查找用户的裸数据.

我已经考虑过对所有敏感的数据(密码)进行加密,并且只根据需要对每个部分进行解密并在此后进行销毁......但是我宁愿不经历并在迷信中更改大量代码.

Kev*_*ose 23

如果您的对手能够在目标计算机上运行任意代码(具有转储过程映像所需的调试权限),那么您就会遇到各种各样的问题.

如果你的对手能够准确地读取远处的记忆(即TEMPEST),那么你就是各种各样的傻瓜.

保护传输和存储中的数据(在线路和磁盘上),但不要担心内存中的数据.

*好的,有些课程需要担心.99.99%的申请没有,我打赌你没有.

  • 不是真的在Java; 它成为搜索堆中给定大小(与String对象相对)的byte []对象.但是,你担心的那种攻击者是如此极为罕见,你会浪费你的时间去防御它们(并且可能没有成功). (3认同)
  • 凯文的代码是由 Heartbleed 控制的类型。 (3认同)

mer*_*ike 6

值得注意的是,操作系统可能会决定将内存交换到磁盘,在那里它可能会保留很长一段时间。当然,读取交换文件需要很强的权限,但谁知道呢?用户的笔记本电脑可能会被盗...


Ale*_*ing 5

是的肯定是,特别是因为你可以轻松地调试应用程序.大多数处理加密和不安全数据的代码都使用char数组而不是字符串.通过使用char数组,您可以使用敏感详细信息覆盖内存,从而限制敏感数据的生命周期.

  • 如果你可以调试程序,你可以获取密文和密钥并自己生成明文.调试权限实际上是不可能防御的. (4认同)

Sev*_*yev 5

从理论上讲,你无法完全保护记忆中的任何东西.有些小组在计算机关闭4小时后设法深度冻结了内存芯片并读取了内容.即使没有达到这样的长度,在恰当的时间使用调试器和断点也可以解决问题.

实际上,只是不要将明文保存在内存中超过绝对必要的时间.一个坚定的攻击者会得到它,但哦,好吧.