lvh*_*lvh 7 java security jvm cryptography clojure
我正在为执行加密操作的JVM(在Clojure中)编写软件.具体地,给定秘密输入,秘密密钥,非秘密盐,非秘密个性化,它使用BLAKE2来导出512位密钥材料.然后使用Arrays该类中的工具将该阵列切换为两个256位块.(来源)
该操作的实际实现住在libsodium所以它用C实现我用铯来访问它,这是在包装钾,使用图书馆JNR-FFI调用底层的C实现.
由于上面的所有缓冲区都有敏感的密钥材料,我想确保它从内存中清除.我不确定如何在JVM上安全地做到这一点(哎呀,我甚至不知道如何在C中安全地做到这一点).鉴于材料从C转换const char *为JVM byte[],然后我的一些操作生成新的JVM字节数组,密钥材料将存在于JVM字节数组中.这引起了两个问题:
byte[],之后没有被任何代码触及,我怎么能确定它byte[]实际上被清零了?我假设JVM可以自由地优化它.byte[]被零,我怎么知道JVM还没有决定到阵列复制(如垃圾回收器的情况下)很多次,不归零原来的位置,因此留下键控无论如何,虚拟内存的材料?我猜测答案将最终成为"在C&ASM中做到"或者甚至"在HSM中做",但我很想知道是否有JVM-land方法来解决这个问题.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |