问题背景
使用低成本平台方案时,发现不支持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(使用前将#替换为@)