有没有办法将包含 e 的缓冲区归零?G。使用私钥后确保编译器不会删除未使用的归零代码?有件事告诉我一个简单的事情:copy(privateKey, make([]byte, keySize))不保证留在那里。
2 回答
白板的微信
TA贡献1883条经验 获得超3个赞
在将缓冲区清零并将其传递给另一个函数后检查(部分)缓冲区内容怎么样?例如:
copy(privateKey, make([]byte, keySize))
if privateKey[0] != 0 {
// If you pass the buffer to another function,
// this check and above copy() can't be optimized away:
fmt.Println("Zeroing failed", privateKey[0])
}
为了绝对安全,您可以将传递的缓冲区内容与随机字节进行异或,但如果/由于归零未优化,则if永远不会到达主体。
您可能认为一个非常智能的编译器可能会推断出上述copy()零privateKey[0],从而确定条件始终为假,并且仍然将其优化掉(尽管这不太可能)。解决这个问题的方法不是使用make([]byte, keySize)来自全局变量或函数参数的切片(其值只能在运行时确定),因此编译器不能足够聪明地推断条件将始终为假在编译时。
- 2 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消