使用crypto / *后安全地将缓冲区清零

有没有一种方法可以将包含e的缓冲区归零。 G。私钥之后 使用它们并确保编译器不会将清零代码删除为 没用过?告诉我一个简单的事情:

copy(privateKey,make([]byte,keySize))

不保证会呆在那里。

ivysoftware2009 回答:使用crypto / *后安全地将缓冲区清零

您想要防止敏感数据保留在内存中的声音。但是您是否考虑过数据可能已被复制或交换到磁盘上?

由于这些原因,我使用了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),而是例如来自全局变量或函数参数的切片(其值只能在运行时确定),因此编译器不够聪明,无法推断条件在编译时始终为假。

本文链接:https://www.f2er.com/3104807.html

大家都在问