使用后明确清除/归零敏感变量?

Pai*_*ng1 11 c linux security memory-management

我注意到一些程序在使用后明确将零敏感内存分配.例如,OpenSSL有一种清除RSA密钥占用内存的方法:

"释放RSA结构rsa.此函数应始终用于释放RSA结构,因为它还可以通过首先清除内存来安全地释放子字段."

http://www.rsa.com/products/bsafe/documentation/sslc251html/group__COMMON__RSA__KEY__FUNCS.html#aRSA_free

如果任何(C/C++)程序包含这样的敏感变量,你应该如上所述明确归零内存吗?(或者,将记忆归为妄想或只是保护措施)?

此外,当程序完成时,任何分配的内存最终都会分配给另一个程序.在Linux系统上,是否在分配给另一个程序之前清理或清理了内存?或者,第二个程序可以读取第一个程序的一些旧内存内容吗?

Pas*_*uoq 3

在 Linux 系统上,内存在分配给另一个程序之前是否已清理或清理?

是的,在任何受人尊敬的桌面操作系统上,内存从一个进程传递到另一个进程时都会被清理。您观察到的清理步骤是为了防止其他攻击、在同一地址空间中执行代码或获取允许从目标进程的内存空间读取内存的权限。

如果任何 (C/C++) 程序包含此类敏感变量,是否应该如上所述显式将内存清零?

当您不再需要这些敏感数据时,立即删除它是一个非常明智的保护措施。