c++ - 如何将 c++ 变量安全地保存在 RAM 中?

标签 c++ security variables ram encryption

我正在开发一个 C++ 应用程序,该应用程序将一些用户 key 保存在 RAM 中。这个 key 非常敏感,我必须尽量减少对它们进行任何形式攻击的风险。
我正在使用字符数组来存储这些键,我已经阅读了一些关于在 CPU 寄存器甚至 CPU 缓存中存储变量的内容(即使用 C++ register 关键字),但似乎不能保证强制应用程序将一些变量存储在 RAM 之外(我的意思是在 CPU 寄存器或缓存中)的方法。
任何人都可以提出一个好的方法来做到这一点或提出任何其他解决方案来将这些 key 安全地保存在 RAM 中(我正在寻找一个独立于操作系统的解决方案)?

最佳答案

你的意图可能是崇高的,但它们也被误导了。简短的回答是,在 通用 系统(即商品处理器/主板和通用 O/S)上确实没有办法做你想做的事。即使您可以以某种方式强制将内容仅存储在 CPU 上,它仍然无济于事。这只是一个小麻烦。

对于保护内存的更一般的问题,有特定于操作系统的解决方案表明不应将 block 内存写入页面文件,例如 VirtualLock Windows 上的功能。如果您正在加密并在该内存中保存敏感数据,那么这些是值得使用的。

最后一件事:我要指出让我担心的是您对 register 关键字及其安全含义存在根本性的误解;请记住,这是一个提示,它不会 - 实际上,它不能 - 强制将任何内容实际存储在寄存器或其他任何地方。

现在,这本身并不是什么大问题,但在这里却是一个问题,因为它表明您并没有真正掌握安全工程或风险分析,如果您是设计或实现真实世界的加密解决方案。坦率地说,您的帖子表明(至少对我而言)您还没有准备好构建或实现这样的系统。

关于c++ - 如何将 c++ 变量安全地保存在 RAM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500549/

相关文章:

javascript - 调用以变量命名的 JavaScript 函数

javascript - 如何将字符串和函数参数混合到一个变量中

C++ 关系运算符生成器

c++ - 查找数组中的元素和出现的次数

c - 用于解密的反向 ^ 运算符

Java ProcessBuilder 安全威胁?

javascript - 我尝试将类似数组的元素集合分配给变量,我的代码有什么问题?

c++ - 在 Windows 8 上使用 Windows UI 自动化列出 Metro 应用程序的所有 UI 元素

c++ - C++ std::unordered_map 中使用的默认哈希函数是什么?

c++ - 基于软件/硬件唯一标识PC