libgcrypt安全内存

时间:2013-02-02 16:51:12

标签: c cryptography libgcrypt

来自libgcrypt手册:

  

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

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

  1. 我想说的是:unsigned char *key; key = malloc(32);。库如何知道这个变量想要安全内存被“malloced”?
  2. “自动覆盖已释放的内存”意味着free(key)将被删除,因此在释放指针之前我不需要记忆内存吗?

1 个答案:

答案 0 :(得分:1)

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

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

一般情况下,安全内存使用mlock锁定,因此无法将其分页。

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