gpt4 book ai didi

c++ - 如何确保编译器优化不会带来安全风险?

转载 作者:IT老高 更新时间:2023-10-28 12:30:02 25 4
gpt4 key购买 nike

我必须编写一个 Windows 服务,在某些时候处理 secret 数据(例如 PIN 码、密码等)。这些信息需要很短的时间:通常它们几乎立即发送到智能卡读卡器。

让我们考虑这段代码:

{
std::string password = getPassword(); // Get the password from the user

writePasswordToSmartCard(password);

// Okay, here we don't need password anymore.
// We set it all to '\0' so it doesn't stay in memory.
std::fill(password.begin(), password.end(), '\0');
}

现在我关心的是编译器优化。这里编译器可能会检测到密码即将被删除,此时更改其值是无用的,只需删除调用即可。

我不希望我的编译器关心 future 未引用内存的值(value)。

我的担忧合理吗?我怎么能确定这样一段代码不会被优化出来?

最佳答案

是的,您的担忧是合理的。您需要使用专门设计的功能,如 SecureZeroMemory()以防止优化修改您的代码行为。

不要忘记字符串类应该是专门为处理密码而设计的。例如,如果类重新分配缓冲区以保存更长的字符串,则它必须在将缓冲区返回给内存分配器之前删除缓冲区。我不确定,但很可能 std::string 不这样做(至少默认情况下)。使用不合适的字符串处理类会使您的所有顾虑都变得毫无值(value)——您甚至会在不知不觉中将密码复制到整个程序内存中。

关于c++ - 如何确保编译器优化不会带来安全风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com