4

我想知道在本机代码中执行加密功能是否更安全。使用 Java,您无法确定 GC 是否重新排序内存并在内存中留下密钥的浅表副本,即使您在加密/解密后立即将密钥清零。

也许这是一个愚蠢的问题,但我找不到任何信息。本机代码仍在沙盒中运行并在 VM 中运行,那么 GC/VM/系统是否可以重新排序内存并因此留下浅拷贝?那么堆栈和堆是静态的还是可以移动的?AFAIK 他们有虚拟地址,所以可以这样做。

感谢你并致以真诚的问候

4

1 回答 1

4

本机代码是为 ARM(我认为现在是英特尔)而不是 Dalvik VM 编译的,它直接在处理器上运行,由 Dalvik 加载和调用,但它不受它直接控制。本机代码的堆栈和堆是真实的。调用 memcpy/memset 将永久更改内存。

所有现代系统也都有虚拟内存,所以这是你可能会得到的安全性。

于 2012-04-18T16:07:15.767 回答