来自libgcrypt手册:
Libgcrypt使用一种称为安全内存的概念,这是一个区域 留出用于存储敏感数据的存储器。因为这样的记忆是一个 稀缺资源,需要先设置为固定大小。 此外,大多数操作系统对此有特殊要求 可以使用安全存储器。例如,可能需要 将应用程序安装为“setuid(root)”以允许分配此类应用程序 记忆。 [...]如果必须保护内存中的密钥或其他信息 反对被换出到磁盘并启用自动覆盖 使用和释放内存,你需要[...]
我对这个安全内存的工作方式感到有点困惑。
我正在开发一个软件来执行aes256-cbc文件加密,并且它还计算IV + CIPHERTEXT的MAC(带有sha512的hmac)所以我< strong>必须使用安全内存来存储敏感信息
我对“安全记忆”概念的理解是:
unsigned char *key; key = malloc(32);
。库如何知道这个变量想要安全内存被“malloced”?free(key)
将被删除,因此在释放指针之前我不需要记忆内存吗?答案 0 :(得分:1)
请继续阅读您复制并粘贴的同一页:http://www.gnupg.org/documentation/manuals/gcrypt/Initializing-the-library.html
有关于如何初始化库的示例。
一般情况下,安全内存使用mlock锁定,因此无法将其分页。
图书馆当然不知道程序其他地方的malloc调用,请查看其文档以了解如何使用它。