文档章节

linux系统随机数原理,内核熵(entropy)值

lieefu
 lieefu
发布于 2015/12/23 10:30
字数 849
阅读 1073
收藏 7
点赞 1
评论 0
Linux内核采用熵来描述数据的随机性。熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。在信息学中,熵被用来表征一个符号或系统的不确定性,熵越大,表明系统所含有用信息量越少,不确定度越大。
计算机本身是可预测的系统,因此,用计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的噪声,如硬件设备发生中断的时间,用户点击鼠标的时间间隔等是完全随机的,事先无法预测。Linux内核实现的随机数产生器正是利用系统中的这些随机噪声来产生高质量随机数序列。

内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上,熵池中的数据是完全随机的,可以实现产生真随机数序列。为跟踪熵池中数据的随机性,内核在将数据加入池的时候将估算数据的随机性,这个过程称作熵估算。熵估算值描述池中包含的随机数位数,其值越大表示池中数据的随机性越好。

内核提供了两个字符设备: /dev/random和/dev/urandom,其read函数(random_read()和urandom_read())用于向用户模式程序输出随机数序列。上层应用程序可以通过read系统调用从它们获取随机数序列。相对于/dev/urandom接口,/dev/random输出的随机数序列质量更高,适合于高强度的加密算法。/dev/urandom总是返回所请求的随机数序列,无论熵池的熵估算值是否为零;而/dev/random则只返回熵估算值所允许的最长的随机数序列,当熵估算值为零时,请求将被阻塞直到熵估算值增大到一定域值。
上述输出接口最终均是通过调用 extract_entropy()函数输出随机数序列。Extract_entropy()函数使用SHA或MD5算法散列(Hash)熵池,将散列后的结果作为随机数序列输出给用户使用,这样避免了直接访问熵池中的内容。由于从SHA或MD5算法散列的结果反推原始数据的可能性几乎为零,所以这种设计极大的提高了安全性。攻击者无法直接访问熵池,也无法根据过去的随机数序列预测将来的序列。
当系统启动的时候,由于启动过程是个确定的可预测的过程,这种情况下,熵池的熵值将非常小,导致产生的随机数序列质量下降,从而给攻击者破解的可能。为了克服系统启动过程的可预测性带来的影响,Linux操作系统在系统关机的时候保存当前熵池的内容,当系统下次启动的时候恢复上次关机时熵池的数据,这样就有效增加了熵池的熵估算值,避免了随机数序列质量的下降。

© 著作权归作者所有

共有 人打赏支持
lieefu
粉丝 87
博文 108
码字总数 23811
作品 3
济南
高级程序员
彻底找到 Tomcat 启动速度慢的元凶

问题现象 美女同事找我解决一个问题,说Tomcat启动很慢。开始我以为是程序写的问题,所以把webapps下所有程序都删除掉。(只保留Tomcat自带)灵异的事情发生了,Tomcat停止在—— 我查看了一...

MaxWell__ ⋅ 04/26 ⋅ 0

/dev/[u]random:对熵的解释

熵 当谈到 和 的主题时,你总是会听到这个词:“熵Entropy”。每个人对此似乎都有自己的比喻。那为我呢?我喜欢将熵视为“随机果汁”。它是果汁,随机数需要它变得更随机。 如果你曾经生成过...

01% ⋅ 05/31 ⋅ 0

Oracle JDBC 连接卡死后 Connection Reset

症状: 在Linux主机上远程登录,执行一个简单的Oracle的JDBC连接程序(jar包),结果硬生生的卡在了连接建立验证阶段,然后等上几分钟后因为连接超时,连接被远端的Oracle服务器reset,于是报...

122269875 ⋅ 2017/08/24 ⋅ 0

如何创建/dev/random和/dev/urandom字符设备

/dev/random和/dev/urandom是内核随机数源设备,用于产生随机数。产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。熵池就是当前系统的...

SoulMio ⋅ 2017/10/30 ⋅ 0

SpringBoot打包成docker容器(Maven插件)-yellowcong

将springboot的服务,都做成了容器的,老爽了,这样就可以直接将war包或者是jar包,都封装到容器里面,然后可以直接运行服务了,一次构建,到处运行了,说实话,俺还是踩了不少的坑啊,这个地...

yelllowcong ⋅ 05/30 ⋅ 0

Centos环境下Tomcat启动缓慢

最近项目上线部署的时候,发现一个问题。Tomcat在启动过程中耗费了很长的时间。查看日志,发现耗时最长的地方是: INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGenerat...

1362802538 ⋅ 2016/12/12 ⋅ 0

Tomcat启动时SecureRandom超级慢的问题

前言:最近部署springboot项目的时候,正常情况下启动很快,但是当我在centos上启动的时候卡在一个地方3-5分钟。所以查看一下问题。 Creation of SecureRandom instance for session Tomcat...

王念博客 ⋅ 2016/06/06 ⋅ 0

Tomcat 启动时 SecureRandom 非常慢解决办法

Tomcat 启动时 SecureRandom 非常慢解决办法 作者:张松然 字体:[增加 减小] 类型:转载 时间:2017-06-25 我要评论 这篇文章主要介绍了Tomcat 启动时 SecureRandom 非常慢解决办法的相关资...

Ltaotao ⋅ 2017/10/16 ⋅ 0

Tomcat 启动时 SecureRandom 非常慢解决办法

Tomcat 启动时 SecureRandom 非常慢解决办法 作者:张松然 字体:[增加 减小] 类型:转载 时间:2017-06-25 我要评论 这篇文章主要介绍了Tomcat 启动时 SecureRandom 非常慢解决办法的相关资...

Ltaotao ⋅ 2017/10/13 ⋅ 0

tomcat启动太慢耗时很长的问题

tomcat启动太慢耗时很长的问题 tomcat启动很长时间,tomcat输出日志如下: INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation o......

Aic_liao ⋅ 06/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 16分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 27分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 57分钟前 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 57分钟前 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部