主要观点:
- 2024 年有新的 POSIX 版本,其中包含
getentropy()函数,它是首个官方标准化的获取加密安全随机数的 POSIX API,Linux 上的getentropy(3)基于getrandom(2)系统调用,Linux 6.11 中有新的 vDSO 调用vgetrandom()可在用户态实现getentropy()使其更快。 UUID v4和v7等需要高性能安全随机数的例子,作者受关于在 PostgreSQL 中无需pgcrypto获取安全随机字节的博客文章启发,开始研究getentropy()。- 介绍了
getentropy()相关内容,包括其定义、便携性、优势(避免/dev/random的问题、无需担心fork或 VM 克隆导致的重复输出等)、劣势(用于获取大量随机字节时需循环、可能比RAND_bytes()慢)以及性能测试(在不同系统和 OpenSSL 版本下与RAND_bytes()的比较)。 - 结论是
getentropy()和RAND_bytes()性能相近,一般 OpenSSL 的RAND_bytes()更快,旧版本 OpenSSL 对小缓冲区的性能不如getentropy(),期待 vDSO 基于的getentropy()的比较。
关键信息:
- 2024 年新 POSIX 版本及
getentropy()相关内容。 UUID v4等例子。getentropy()的各方面特性及性能测试结果。- 最终结论。
重要细节:
getentropy()在不同系统和库中的引入时间。getentropy()在不同系统下的性能表现及奇怪现象(如 Mac OS 上的速度变化)。- 与
RAND_bytes()性能比较的各种情况。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。