软件替代硬件HW_RANDOM随机数解决方案

2023-05-16

问题背景

        使用低成本平台方案时,发现不支持HW_RANDOM硬件随机数,这样在开启wifi wpa2加密ap后,电脑多次提示连接失败才连接成功,很影响用户体验。硬件不支持硬件随机数那么就需要使用软件方案进行替代,主流方案有rngd和haveged。

rngd测试

        开机默认没有任何操作的时候,熵值只有130~150左右:

wg7101_genvict:~# cat /proc/sys/kernel/random/entropy_avail
130

        编译sysfsutils-2.1.0和rng-tools后,测试使用rngd:

wg7101_genvict:~# ./rngd                
Initalizing available sources
Failed to init entropy source 0: Hardware RNG Device
can't open any entropy source
Maybe RNG device modules are not loaded

        提示硬件不支持(硬件确实不支持),就算把内核配置CONFIG_HW_RANDOM打开也无济于事,放弃rgnd方案。另外,在IMX6Q平台上面测试使用rngd后,熵值由110增大到3110。

urandom测试

        urandom为系统伪随机数,random为真随机数,测试发现random连接到urandom后熵值无明显变化。

mv /dev/random /dev/random.orig;
ln -s /dev/urandom /dev/random

haveged测试

        下载和编译haveged-1.9.2,haveged使用软件方法增加熵值,那么需要系统的random连接到urandom伪随机数,这样才能增加熵值,否则熵值不会产生变化。

mv /dev/random /dev/random.orig;
ln -s /dev/urandom /dev/random

wg7101_genvict:~# ./haveged
haveged: haveged starting up
wg7101_genvict:~# 
wg7101_genvict:~# cat /proc/sys/kernel/random/entropy_avail
4096

        这样熵值固定在了4096满足了wifi加密传输和稳定连接的需求,但问题也来了,软件方案占用CPU比较高25%,这样就实时消耗了CPU资源,怎么破呢?

Mem: 64696K used, 788196K free, 0K shrd, 2104K buff, 27408K cached
CPU0:  1.6% usr  6.5% sys  0.0% nic 91.6% idle  0.2% io  0.0% irq  0.0% sirq
CPU1: 12.3% usr 87.6% sys  0.0% nic  0.0% idle  0.0% io  0.0% irq  0.0% sirq
CPU2:  0.4% usr  1.8% sys  0.0% nic 97.7% idle  0.0% io  0.0% irq  0.0% sirq
CPU3:  2.7% usr  7.3% sys  0.0% nic 89.9% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 1.25 1.26 1.21 2/250 9800
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
 5792     1 root     R     7192  0.8   1 24.7 haveged
wg7101_genvict:~# haveged -h

Usage: haveged [options]

Collect entropy and feed into random pool or write to file.
  Options:
     --buffer    , -b [] Buffer size [KW], default: 128
     --data      , -d [] Data cache size [KB], with fallback to: 16
     --inst      , -i [] Instruction cache size [KB], with fallback to: 16
     --file      , -f [] Sample output file,  default: 'sample', '-' for stdout
     --Foreground, -F    Run daemon in foreground
     --run       , -r [] 0=daemon, 1=config info, >1=<r>KB sample
     --number    , -n [] Output size in [k|m|g|t] bytes, 0 = unlimited to stdout
     --onlinetest, -o [] [t<x>][c<x>] x=[a[n][w]][b[w]] 't'ot, 'c'ontinuous, default: ta8b
     --pidfile   , -p [] daemon pidfile, default: /var/run/haveged.pid
     --verbose   , -v [] Verbose mask 0=none,1=summary,2=retries,4=timing,8=loop,16=code,32=test
     --write     , -w [] Set write_wakeup_threshold [bits]
     --help      , -h    This help

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件替代硬件HW_RANDOM随机数解决方案 的相关文章

  • 使用概率选择数组值

    我还有一个作业要做 那就是 从黄色 蓝色和红色中随机选择一种颜色 概率为 黄色 3 7 蓝色 1 7 红色 3 7 我知道我可以通过使用类似的方法来解决这个问题 黄黄黄蓝红红红 但我认为这在编程上不是很好 因为当我碰巧发生这种情况时 我将不
  • 使用 crypto.getRandomValues() 生成 0 到 1 的随机数

    看起来 Math random 会生成 0 1 范围内的 64 位浮点数 而新的 crypto getRandomValues API 仅返回整数 使用此 API 生成 0 1 中的数字的理想方法是什么 这似乎有效 但似乎不太理想 ints
  • python随机字典键,并访问它[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 import random Cards Spade 2 3 4 5 6 7 8 9 10 Jack Queen King
  • 在Python中随机化列表[重复]

    这个问题在这里已经有答案了 我想知道是否有一个好方法来 震动 Python 中的项目列表 例如 1 2 3 4 5 可能会被动摇 随机化 3 1 4 2 5 任何顺序都同样可能 from random import shuffle list
  • delphi中生成随机数

    我想在delphi中创建一个随机数并将其分配给文件作为文件名 我设法做到了这一点 但是当我单击按钮生成数字时 它总是以 0 开头 知道如何修复它 procedure TForm1 Button1Click Sender TObject va
  • perl生成字符串来匹配正则表达式

    我尝试找到一种方法来生成与正则表达式匹配的字符串 例如以下正则表达式 A Z 6 6 A Z2 9 A NP Z0 9 A Z0 9 3 3 0 1 我尝试过 Cpan 上的一些 perl 模块不起作用 gt 字符串 随机 gt 正则表达式
  • C# Random 类的问题

    我有一个代表一枚硬币的类 可以使用 Coin Flip 方法翻转它 Flip 使用 random Next 2 得到代表正面或反面的 0 或 1 这很好用 有点 对于该程序 我需要有 2 个我制作的硬币 比如说 coin1 和 coin2
  • 即使我调用 srand(time(NULL)) [重复],rand 函数在每次运行时都会给我相同的结果

    这个问题在这里已经有答案了 我有问题 我想使用rand 获得 0 到 6 之间的随机数 但每次运行它总是给我 4 即使我打电话srand time NULL include
  • VBA rand 如何使用上限和下限生成随机数?

    所以也许这是多余的 也许这就像问为什么大多数人生来就有 5 个手指 最后的简短答案总是 因为事情就是这样 而且它就是这样工作的 但我讨厌这个答案 该死的我想知道怎么做VBA 中的 Rnd 函数有效 Ms Office Excel 的 MSD
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • 如何在C++中生成高精度的随机双数?

    我正在尝试生成一系列高精度的双随机数 例如 0 856365621 小数点后有 9 位数字 我从网上找到了一些方法 但是 它们确实生成了双随机数 但精度没有我要求的那么好 只有小数点后6位 那么 我可以知道如何实现我的目标吗 在 C 11
  • Linq2sql:获取具有权重的随机元素的有效方法?

    Byt 可以说我有一个整数权重 即权重为 10 的元素被选择的概率是权重为 1 的元素的 10 倍 var ws db WorkTypes Where e gt e HumanId null e SeoPriority 0 OrderBy
  • 一段 R 代码会影响 foreach 输出中的随机数吗?

    我使用运行模拟foreach and doParallel并与随机数 名为random在代码中 简而言之 我模拟一个足球联赛 随机生成所有比赛的获胜者以及相应的结果 在dt base没有比赛进行 在dt ex1 and dt ex24场比赛
  • kotlin 从数组中获取随机字符串

    刚接触 kotlin 有不少问题和解答 大部分是 Java 方面的 在遵循文档并针对大量 SO 进行验证之后问题和答案 https stackoverflow com questions 6726963 random string from
  • 在 C# 中创建加密随机数的最快、线程安全的方法?

    请注意 在多个线程上并行生成随机数时 加密随机数生成器不是线程安全的 使用的发电机是RNGCryptoServiceProvider它似乎重复了很长一段随机位 128 位 重现此情况的代码如下所示 缺乏使用锁来保护访问RNGCryptoSe
  • 测试随机值 - 对这种方法的想法?

    好的 我一直在研究随机图像选择器和队列系统 因此您不会经常看到相同的图像 一切都很顺利 就我蹩脚的代码而言 until我到了随机位 我想测试一下 但是如何测试呢 没有Debug Assert i IsRandom 可悲的是 D 所以 我在用
  • shell中如何从数组中随机选择一个项目

    我正在 Shell 脚本中创建一个机器人 Array with expressions expressions Ploink Poink I Need Oil Some Bytes are Missing Poink Poink Piiii
  • 与随机数生成算法相关的种子是什么?为什么经常使用计算机时间来创建该种子?

    我读到了seeds用于初始化随机数生成器 但似乎种子的随机性对于从生成器获得良好的随机性并不重要 所以我想了解什么是seed实际上 为什么这么称呼呢 最后为什么time在计算机系统中是用来生成这样的种子的 伪随机数生成器生成数字序列 它不是
  • SAS 随机采样

    在 SAS 中 我创建了一个程序 该程序将从数据集中随机获取 50 个观测值 并计算观测值的平均值 data subset drop i samplesize samplesize 50 obsleft totobs do i 1 to s

随机推荐