0

从 libgcrypt 手册:

Libgcrypt 使用称为安全内存的概念,它是为存储敏感数据而预留的内存区域。因为这样的内存是稀缺资源,所以需要提前设置为固定大小。此外,大多数操作系统对如何使用安全内存都有特殊要求。例如,可能需要将应用程序安装为“setuid(root)”以允许分配此类内存。[...] 如果您必须保护您的密钥或内存中的其他信息不被换出到磁盘并启用自动覆盖已使用和释放的内存,您需要 [...]

我对这种安全内存的工作方式有点困惑。
我正在开发一个执行 aes256-cbc 文件加密的软件,它还计算 IV+CIPHERTEXT 的 MAC(带有 sha512 的 hmac),所以我必须使用安全内存来存储敏感信息。
我对“安全内存”的概念不了解的是:

  1. 假设我有这个:unsigned char *key; key = malloc(32);。库如何知道该变量希望安全内存被“分配”?
  2. “释放内存的自动覆盖”意味着free(key)将被删除,所以我不需要在释放指针之前对内存进行 memset 吗?
4

1 回答 1

1

继续阅读您复制和粘贴的同一页面:http ://www.gnupg.org/documentation/manuals/gcrypt/Initializing-the-library.html

有关于如何初始化库的示例。

一般来说,安全内存是用 mlock 锁定的,所以它不能被调出。

该库当然不知道您程序的其他地方的 malloc 调用,请查看其文档以了解如何使用它。

于 2013-02-02T20:07:20.453 回答