OpenSSL 中 RANDFILE 的用途?

信息安全 openssl
2021-08-27 16:43:45

RANDFILEOpenSSL 配置文件(特别是该ca部分)中的目的是什么?手册页条目config仅将其描述为:

启动时指定的文件被加载到随机数生成器中,并在退出时将写入 256 个字节。

但我不知道 OpenSSL 是如何使用它的。OpenSSL 是否使用它并且仅使用它来实现随机性,或者它只是从其他地方获取的随机性盐?我是否需要每次都包含它,如果需要,其中应该包含多少数据?

附录

openssl rand将输出保存到该文件是否会带来任何安全优势?

1个回答

RANDFILEOpenSSL 使用它来存储来自内部跨调用使用的 CSPRNG 的一些种子数据(256 字节)。这在进行频繁 SSL 调用的低熵系统(即嵌入式设备)上特别有用。

该文件是通过函数加载的RAND_load_file查看源代码,我们看到文件的内容通过 被添加到 RNG 中RAND_add,因此它们是 RNG 中任何现有熵的补充。

由于 RNG 在初始化时从系统特定的熵源加载了一些熵,因此这似乎RANDFILE绝对不是用于 RNG 状态的唯一熵源。

将 openssl rand 的输出保存到该文件是否会带来任何安全优势?

这基本上就是 OpenSSL 在说“在退出时将写入 256 个字节”时所做的事情。如果您想从最初的某些东西中播种,我建议您/dev/urandom,如下所示:

dd if=/dev/urandom of=randfile bs=256 count=1