从 libgcrypt 手册:
Libgcrypt 使用称为安全内存的概念,它是为存储敏感数据而预留的内存区域。因为这样的内存是稀缺资源,所以需要提前设置为固定大小。此外,大多数操作系统对如何使用安全内存都有特殊要求。例如,可能需要将应用程序安装为“setuid(root)”以允许分配此类内存。[...] 如果您必须保护您的密钥或内存中的其他信息不被换出到磁盘并启用自动覆盖已使用和释放的内存,您需要 [...]
我对这种安全内存的工作方式有点困惑。
我正在开发一个执行 aes256-cbc 文件加密的软件,它还计算 IV+CIPHERTEXT 的 MAC(带有 sha512 的 hmac),所以我必须使用安全内存来存储敏感信息。
我对“安全内存”的概念不了解的是:
- 假设我有这个:
unsigned char *key; key = malloc(32);
。库如何知道该变量希望安全内存被“分配”? - “释放内存的自动覆盖”意味着
free(key)
将被删除,所以我不需要在释放指针之前对内存进行 memset 吗?