有没有一种方法可以将包含e的缓冲区归零。 G。私钥之后 使用它们并确保编译器不会将清零代码删除为 没用过?告诉我一个简单的事情:
copy(privateKey,make([]byte,keySize))
不保证会呆在那里。
有没有一种方法可以将包含e的缓冲区归零。 G。私钥之后 使用它们并确保编译器不会将清零代码删除为 没用过?告诉我一个简单的事情:
copy(privateKey,make([]byte,keySize))
不保证会呆在那里。
您想要防止敏感数据保留在内存中的声音。但是您是否考虑过数据可能已被复制或交换到磁盘上?
由于这些原因,我使用了https://github.com/awnumar/memguard软件包。 它提供了一些功能,可以在不再需要时销毁数据,同时又可以确保数据安全。
您可以在此处了解其背景; https://spacetime.dev/memory-security-go
,将缓冲区归零并将其传递给另一个函数后,检查(某些)缓冲区的内容又如何呢?例如:
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])
}
为了绝对安全,您可以对传递的缓冲区内容与随机字节进行XOR运算,但是如果/由于未优化归零,则永远不会到达if
主体。
您可能会认为,非常聪明的编译器可能会推导出上面的copy()
零privateKey[0]
,从而确定条件始终为假并仍然对其进行优化(尽管这种可能性很小)。解决方案不是使用make([]byte,keySize)
,而是例如来自全局变量或函数参数的切片(其值只能在运行时确定),因此编译器不够聪明,无法推断条件在编译时始终为假。