所以我有一个让用户输入密码的程序。在覆盖它之前,我只在char[]
中持有密码几秒钟,但我想知道是否有一种方法可以防止操作系统将此位交换到磁盘/虚拟内存/比RAM更永久的存储?关于这个话题的研究似乎说不,没有办法,但没有办法给我一个直接的答案。我也不确定我是否可以通过某种方式使用mlock()或保持对值的引用直到我不再需要它来实现这一点。
谢谢!
答案 0 :(得分:0)
您需要做的是:使用char[]
存储密码。当你完成密码时,只需用0写入数组,这样如果攻击者试图扫描所有内存以找到密码,并且Java GC在此之前还没有摆脱变量,那么攻击者就不会能够检索密码,因为你已经过度编写了数组本身。
干杯。
编辑:当内核开始使用HDD卸载RAM上的压力时,HDD上的空间就像RAM一样,这意味着它不会永久存储提供给它的数据。