主要观点:
- 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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。