MemGuard
用于在内存中存储敏感信息的软件飞地。
本包旨在降低敏感数据在内存中暴露的可能性。它支持所有主流操作系统,并使用纯 Go 编写。
特性
- 敏感数据在内存中使用 XSalsa20Poly1305 进行加密和认证。所使用的方案还能防御冷启动攻击。
- 内存分配通过系统调用直接向内核请求资源,从而绕过语言运行时,避免垃圾回收器的干扰。
- 存储明文数据的缓冲区通过保护页和金丝雀值进行加固,以检测越界访问和溢出。
- 努力防止敏感数据接触磁盘,包括锁定内存以防止交换,以及处理核心转储。
- 实现了内核级别的不可变性,对受保护区域的修改尝试将导致访问违规。
- 提供多个端点用于会话清除和安全终止,以及信号处理以防止残留数据遗留。
- 通过确保数据的复制和比较以恒定时间进行,减轻侧信道攻击。
部分特性灵感来源于 libsodium,特此致谢。
完整文档和 API 概览请见此处。有趣且实用的代码示例可在示例子包中找到。
安装
$ go get github.com/awnumar/memguard
API 处于实验阶段,可能存在不稳定更改。建议锁定版本。[模块]
贡献
- 向
./examples 提交程序示例。
- 报告错误、漏洞以及使用 API 时遇到的任何困难。
- 编写利用 memguard 的有用安全与加密库。
- 实现特定于内核/CPU 的保护措施。
- 提交性能改进。
问题(Issues)用于报告错误和讨论提案。拉取请求(Pull Requests)应针对 master 分支提交。