/dev/random和/dev/urandom
CPU0 CPU1 CPU2 CPU3
0: 135 0 0 301721845 IO-APIC-edge timer
1: 0 0 0 54 IO-APIC-edge keyboard
2: 0 0 0 0 XT-PIC cascade
8: 0 0 0 1 IO-APIC-edge rtc
14: 0 0 0 2 IO-APIC-edge ide0
16: 0 0 0 40 IO-APIC-level usb-uhci
18: 0 0 0 0 IO-APIC-level usb-uhci
19: 0 0 0 0 IO-APIC-level usb-uhci
23: 0 0 0 2257 IO-APIC-level ide2, ehci-hcd
25: 0 0 0 29 IO-APIC-level ioc1
26: 0 0 0 29 IO-APIC-level ioc0
48: 0 0 0 2151823972 IO-APIC-level eth0
82: 0 0 0 339588855 IO-APIC-level megaraid
NMI: 0 0 0 0
LOC: 301720634 301720634 301720634 301720633
ERR: 0
MIS: 0
root 4749 4156 0 17:11 pts/1 00:00:00 dd if /dev/random of 1.dmp bs 1024k count 100
root 4753 4634 0 17:12 pts/3 00:00:00 grep dd
Process 4749 attached - interrupt to quit
read(0,
root@10.0.100.115’s password:
1.dmp 100% |***************************************************************************
write(1, “E\347\276m\274\33\227-IZ5\330\264\245\260z\326\’\376\266″…, 44) = 44
munmap(0xb7cb5000, 1060864) = 0
open(”/usr/share/locale/locale.alias”, O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=2528, …}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7db7000
read(3, “# Locale name alias data base.\n#”…, 4096) = 2528
read(3, “”, 4096) = 0
close(3) = 0
munmap(0xb7db7000, 4096) = 0
open(”/usr/share/locale/en_US/LC_MESSAGES/coreutils.mo”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(”/usr/share/locale/en/LC_MESSAGES/coreutils.mo”, O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, “0+100 records in\n”, 17) = 17
write(2, “0+100 records out\n”, 18) = 18
close(0) = 0
close(1) = 0
exit_group(0) = ?
Process 4749 detached
0+100 records in
0+100 records out
real 4m19.484s
user 0m0.000s
sys 0m0.004s
100+0 records in
100+0 records out
real 0m21.758s
user 0m0.002s
sys 0m21.752s
在编译内核时或者生成 gpg 密钥时,会让系统给出随机参数,以便生成密钥。往往靠键盘和鼠标的输入是远不够的,我都快把键盘和鼠标给敲烂了都没有够, 比打真三还激烈啊。系统包里面有这样的软件来生成随机参数的
软件包名: rng-utils
首先可以看一下当前系统现有的随机数有多少, 你可以看看狂敲之后,究竟有多少值,以此也可能看你的操作是否还娴熟
#cat /proc/sys/kernel/random/entropy_avail
如果太少,就用这个来生成,吧
#rngd -r /dev/urandom -o /dev/random -f -t 1
运行几秒之后, 差不多也有四位数了。
现在应该够了
/proc/sys/kernel/random 下面存放了random相关的一些东西,如果entropy_avail 等
Can't open /dev/random的解决方法和一点/dev/random的资料【by joyride】
一. 解决“Can't open /dev/random”的问题
今天在移植appweb时遇到一个错误:Can't open /dev/random。搞了半天终于解决了。
如果我们使用的linux版本(1.3.30以上)支持random,那么运行下面的命令(必需以root身份运行)
mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
即可在/dev下创建出两个设备文件random和urandom,上面的问题“Can't open /dev/random”解决。
经试验验证,设备random和urandom是必需成对创建(虽然只报告了Can't open /dev/random错误)。若没有创建urandom而只创建了random,仍然还是报告Can't open /dev/random错误。
二. 以下是关于/dev/random的一点资料
英文部分转自http://blog.csdn.net/wonder4/archive/2008/03/18/2194411.aspx,中文部分是我自己翻译的,水平有限,尽力而译(紫色文字是我自己加的,英文原文中没有;红色部分表示根据理解翻译的,不是直译过来的)。
The character special files /dev/random and /dev/urandom (present since Linux 1.3.30) provide an interface to the kernel's random number generator. File /dev/random has major device number 1 and minor device number 8. File /dev/urandom has major device number 1 and minor device number 9.
特殊字符文件/dev/random和/dev/urandom(linux从1.3.30内核起支持)提供了一个与linux内核中的随机数发生器的接口。文件/dev/random的主设备号是1,次设备号是8;文件/dev/urandom的主设备号是1,次设备号是9。
The random number generator gathers environmental noise from device drivers and other sources into an entropy pool. The generator also keeps an estimate of the number of bits of noise in the entropy pool. From this entropy pool random numbers are created.
(太专业了,看不懂。大概的意思是:随机数发生器搜集一些环境噪声(从网上搜到的:例如,键盘驱动程序收集两个按键之间时间的信息)放到熵池中,同时熵池对噪声的位数进行估计,然后熵池用这些随机信息来生成随机数。)
When read, the /dev/random device will only return random bytes within the estimated number of bits of noise in the entropy pool. /dev/random should be suitable for uses that need very high quality randomness such as one-time pad or key generation. When the entropy pool is empty, reads from /dev/random will block until additional environmental noise is gathered.
当读取/dev/random设备时将从熵池中返回一个随机数(return random bytes 我理解为返回的随机数由多个随机字节组成)。/dev/random应该适用于高性能的应用,如一次性密码或用于生成密匙等。一旦熵池为空时,读取/dev/random的操作将被阻塞,直到有新的环境噪声被(随机数发生器)捕获(,然后被放入熵池以产生出新的随机数)。
A read from the /dev/urandom device will not block waiting for more entropy. As a result, if there is not sufficient entropy in the entropy pool, the returned values are theoretically vulnerable to a cryptographic attack on the algorithms used by the driver. Knowledge of how to do this is not available in the current non-classified literature, but it is theoretically possible that such an attack may exist. If this is a concern in your application, use /dev/random instead.
(还是太专业,不太懂。大概意思是:/dev/urandom是/dev/random的非阻塞版本,即当熵池中没有可取的随机数时,读取/dev/urandom设备仍然会返回一个随机数,只是该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。)
Configuring
If your system does not have /dev/random and /dev/urandom created already, they can be created with the following commands:
如果你的系统没有/dev/random和/dev/urandom,那么可以通过下面的命令来创建:
mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
When a Linux system starts up without much operator interaction, the entropy pool may be in a fairly predictable state. This reduces the actual amount of noise in the entropy pool below the estimate. In order to counteract this effect, it helps to carry entropy pool information across shut-downs and start-ups. To do this, add the following lines to an appropriate script which is run during the Linux system start-up sequence:
在linux系统启动过程中,如果没有足够多的交互处理,那么熵池中的噪声就很少(可能低于估计随机数需要的数量),于是熵池产生随机数也容易被言中。为了处理这个问题,熵池可以从关机和启动过程来取得噪声。实现的方法是加入下面的行到一个合适的linux启动脚本中:
echo "Initializing random number generator..."
random_seed=/var/run/random-seed
# Carry a random seed from start-up to start-up
# Load and then save the whole entropy pool
if [ -f $random_seed ]; then
cat $random_seed >/dev/urandom
else
touch $random_seed
fi
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bytes='cat $poolfile' || bytes=512
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
Also, add the following lines in an appropriate script which is run during the Linux system shutdown:
加入系列行到一个合适的linux系统的关机执行脚本中:
# Carry a random seed from shut-down to start-up
# Save the whole entropy pool
echo "Saving random seed..."
random_seed=/var/run/random-seed
touch $random_seed
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bytes='cat $poolfile' || bytes=512
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
下面是关于/dev/random在proc目录下的一个接口。目录/proc/sys/kernel/random(linux 2.3.16版开始)下的文件提供了另外一个与/dev/random设备的接口。水平有限,就不再翻译了。
Proc Interface
The files in the directory /proc/sys/kernel/random (present since 2.3.16) provide an additional interface to the /dev/random device.
The read-only file entropy_avail gives the available entropy. Normally, this will be 4096 (bits), a full entropy pool.
The file poolsize gives the size of the entropy pool. Normally, this will be 512 (bytes). It can be changed to any value for which an algorithm is available. Currently the choices are 32, 64, 128, 256, 512, 1024, 2048.
The file read_wakeup_threshold contains the number of bits of entropy required for waking up processes that sleep waiting for entropy from /dev/random. The default is 64. The file write_wakeup_threshold contains the number of bits of entropy below which we wake up processes that do a select() or poll() for write access to /dev/random. These values can be changed by writing to the files.
The read-only files uuid and boot_id contain random strings like 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. The former is generated afresh for each read, the latter was generated once.
Files
/dev/random
/dev/urandom
Author
The kernel's random number generator was written by Theodore Ts'o ().
/dev/random和/dev/urandom相关推荐
- /dev/random与/dev/urandom
先让我们从一个工程中遇到的实际问题开始,先上log: D/WMT_ENV ( 57): get sysparaethaddr W/BestCast( 57): httpSimplePostfa ...
- /dev/random 和 /dev/urandom 的原理
/dev/random和 /dev/urandom是 Linux 上的字符设备文件,它们是随机数生成器,为系统提供随机数 随机数的重要性 随机数在计算中很重要. TCP/IP 序列号.密码盐和 DNS ...
- /dev/random和/dev/urandom的一点备忘
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys, ...
- 使用/dev/random和/dev/urandom产生随机数
一.介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys,SSL ...
- Linux中的虚拟设备/dev/null、/dev/zero、/dev/random和/dev/urandom
Unix/Linux将每一个设备都当成一个文件,放在/dev目录下.这些文件有的对应着一个真实存在的物理设备:有的则代表一个虚拟设备,提供一些特定的功能. 下面介绍三个常用的虚拟设备: /dev/nu ...
- /dev/null 、/dev/zero、/dev/random、/dev/urandom
Linux中的虚拟设备/dev/null./dev/zero./dev/random和/dev/urandom /dev/null 利用/dev/null来清除不必要的输出 把/dev/null看作& ...
- 探秘Linux特殊设备文件:(/dev/null,/dev/zero,/dev/random,/dev/urandom等)
目录标题 第一章:设备文件简介(Introduction to Device Files) 1.1 设备文件概述(Overview of Device Files) 1.2 设备文件类型(Types ...
- java响应很慢排插_服务响应时间慢:Java SecureRandom和/ dev / random - java
我正在尝试调试Tomcat上部署的应用程序提供的一些慢速响应. 现在,我主要关注SecureRandom和/dev/random(其他一些可能的原因已被调查并排除). 模式如下: 第一个调用恰好在To ...
- linux中特殊的设备(/dev/zeo,/dev/null,/dev/unrandom,/dev/random)
/dev/zero 与 /dev/null 我们平时在使用dd命令测试磁盘性能时候,时常见到 dd if=/dev/zero或者 dd of=/dev/null这样的写法.这是什么东西呢? /dev/ ...
最新文章
- python编程语言是什么-python是什么编程语言
- Asp.net面试题之一
- 【指标统计】根据遥控补全遥信
- 【GDOI2016模拟3.11】历史
- 前端入门技巧之浏览器调试
- JSP的getRequestDispatcher()与sendRedirect()的区别
- 形容人的内核是什么意思_成语雪泥鸿爪是形容什么的?雪泥鸿爪什么意思?蚂蚁庄园2020年12月10日答案...
- 使用StyleCop 进行代码评审
- .net 中应用 ValidationAttribute
- svn:Cannot negotiate authentication mechanism
- java smtp收信_求一个简单java编写的邮件收发程序,邮件发送程序为smtpsend,邮件接收程序为popreceive。急需,感谢。...
- 使用git命令把自己的代码上传到gitlab上
- 批量生成PDF417码
- Eclipse语言包在官网下载不了-解决方案
- 七牛 html 上传,在七牛上传之后如何自己自定义上传完成处理并在页面显示。_html/css_WEB-ITnose...
- WPS 表格 身份证 提取生日 判断性别 计算年龄 15位身份证与18位身份证转换 18位身份证号校验
- XGBoost资料( 多届竞赛冠军获得者 周耀 整理)
- ftp上传工具绿色版 不可不说的4款ftp上传工具绿色版
- 如何配置阿里云安全组授权对象IP段
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳n级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)