登录
首页 >  Golang >  Go问答

使用密码学库安全地清空缓冲区

来源:stackoverflow

时间:2024-03-02 13:03:27 135浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《使用密码学库安全地清空缓冲区》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

有没有办法将包含 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])
}

为了绝对安全,您可以将传递的缓冲区内容与随机字节进行异或,但如果/由于归零未优化,则永远不会到达 if 主体。

您可能认为一个非常智能的编译器可能会推导出上述 copy()privatekey[0] ,从而确定条件始终为 false 并仍然将其优化掉(尽管这不太可能)。解决方案不是使用 make([]byte, keysize) 而是例如来自全局变量或函数参数的切片(其值只能在运行时确定),因此编译器无法足够聪明地推断出条件在编译时始终为 false。

理论要掌握,实操不能落!以上关于《使用密码学库安全地清空缓冲区》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>