You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7下Linux平台RandomNumberGenerator.GetBytes()是否使用/dev/urandom?

结论:Ubuntu环境下System.Security.Cryptography.RandomNumberGenerator.GetBytes确实依赖/dev/urandom

代码层面验证

  • 你追踪到的Interop.RAND.cs中GetRandomBytes调用CryptoNative_GetRandomBytes的链路是正确的:底层CryptoNative_GetRandomBytes在Linux平台会调用OpenSSL的RAND_bytes函数。
  • OpenSSL在Linux默认配置下,以/dev/urandom作为随机数据源(除非手动修改OpenSSL配置)。.NET Runtime在Linux上依赖系统OpenSSL实现,因此GetBytes最终基于/dev/urandom生成随机字节。

关于你提到的测试方法有效性

观察/proc/sys/kernel/random/entropy_avail数值变化无法验证该问题,原因:

  • /dev/urandom不会消耗内核熵池的可用熵(entropy_avail),它依赖内核CSPRNG(密码学安全伪随机数生成器)生成输出,熵池初始化完成后,即可持续生成伪随机数据,无需实时消耗熵。
  • 只有/dev/random会在熵池不足时阻塞,并消耗entropy_avail数值。

替代验证方案

  • strace追踪系统调用:运行.NET程序时执行strace -e trace=open,read <你的程序路径>,若输出中出现打开并读取/dev/urandom的记录,可直接证明。
  • 检查OpenSSL配置:查看/etc/ssl/openssl.cnf,确认未修改默认随机源配置(默认即为/dev/urandom)。

内容的提问来源于stack exchange,提问作者Samuel Henderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:33:12