使用SecureZeroMemory()真的有助于使应用程序更安全吗?

sha*_*oth 7 c++ security winapi

WinAPI中有一个SecureZeroMemory()函数,用于在不再需要缓冲区时擦除用于存储密码/加密密钥/类似内容的内存.它与ZeroMemory()的不同之处在于它的调用不会被编译器优化掉.

是否真的有必要擦除用于存储敏感数据的内存?它真的能使应用程序更安全吗?

我知道数据可以写入交换文件或休眠文件,其他进程可能会读取我程序的内存.但是当数据仍在使用时,同样可能发生.为什么使用,然后擦除使用更好?

Meh*_*ari 10

确实如此.例如,休眠文件未加密.如果你没有安全地清除内存,你可能会遇到麻烦.不过,这只是一个例子.只要需要,你应该始终在内存中保存秘密内容.

  • 是.你正在减少攻击面.请记住:安全就是提高标准.提高标准越多,越好. (6认同)

jal*_*alf 5

它存在是有原因的.:)如果将敏感数据保留在内存中,则其他进程可能会读取它.

当然,在您的应用程序中,密码或其他安全数据可能不是那么重要,需要这样做.但在某些应用程序中,恶意代码不仅可以窥探您的密码或信用卡号或应用程序使用的任何其他数据,这一点至关重要.

  • 因为"使用,然后擦除"只将数据留在内存中,比如说,只需要几分之一秒 - 而不是"可能直到应用程序退出,可能更长"(请参阅​​上面关于操作系统的回答,而不是将内存归零).如果数据在内存中存在很长时间,那么恶意软件就不会那么幸运. (3认同)