<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=%2Fdev%2Frandom</id>
	<title>/dev/random - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=%2Fdev%2Frandom"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=/dev/random&amp;action=history"/>
	<updated>2026-06-28T21:18:05Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=/dev/random&amp;diff=720592&amp;oldid=prev</id>
		<title>imported&gt;JeremyLeung127：​/* growthexperiments-addlink-summary-summary:3|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=/dev/random&amp;diff=720592&amp;oldid=prev"/>
		<updated>2026-02-12T03:30:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:3|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;/dev/random&amp;#039;&amp;#039;&amp;#039;在[[类UNIX系统]]中是一个特殊的[[设备文件]]，可以用作[[随机数发生器]]或[[伪随机数发生器]]。&lt;br /&gt;
&lt;br /&gt;
== 实现 ==&lt;br /&gt;
并不是所有操作系统中的&amp;#039;&amp;#039;&amp;#039;/dev/random&amp;#039;&amp;#039;&amp;#039;的实现都是相同的。以下列举了一些操作系统中的实现。&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
[[Linux内核]]中的是第一个以背景噪声产生真正的随机数产生的实现，它允许程序访问来自[[驱动程序|设备驱动程序]]或其它来源的背景噪声。&lt;br /&gt;
&lt;br /&gt;
1994年，美國[[程序员|程式設計師]][[曹子德]]（Theodore Y. Ts&amp;#039;o）第一次在Linux内核中实现了随机数发生器&amp;lt;ref&amp;gt;{{cite web|url=http://www.randombit.net/bitbashing/security/syllable_dev_random.html|title=On Syllable&amp;#039;s /dev/random|author=Jack Lloyd|date=December 9, 2008|accessdate=2009-04-27|archiveurl=https://www.webcitation.org/5gOzG0qvc?url=http://www.randombit.net/bitbashing/security/syllable_dev_random.html|archivedate=2009-04-29|deadurl=yes}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |url=http://everything2.com/title/%252Fdev%252Frandom |title=/dev/random |date=June 8, 2003 |publisher=everything2.com |accessdate=2009-04-27 |archiveurl=https://www.webcitation.org/5gOzGLECz?url=http://everything2.com/title//dev/random |archivedate=2009-04-29 |deadurl=no }}&amp;lt;/ref&amp;gt;。使用了[[SHA-1]]散列算法而非[[密码]]，以避开[[密码出口限制|法律限制]]。另一个原因是任意给定的散列或密码加密强度弱，而新随机数发生器在提高了密码强度。&lt;br /&gt;
&lt;br /&gt;
发生器有一个容纳噪声数据的[[熵池]]，在读取时，&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;设备会返回小于熵池噪声总数的随机字节。&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;可生成高随机性的[[公钥]]或[[一次性密码本]]。若熵池空了，对&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;的读操作将会被[[阻塞]]，直到收集到了足够的环境噪声为止&amp;lt;ref&amp;gt;&amp;lt;code&amp;gt;Linux用户手册：urandom (4)&amp;lt;/code&amp;gt;&amp;lt;/ref&amp;gt;。这样的设计使得&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;是真正的[[随机数发生器]]，提供了最大可能的随机数据熵，建议在需要生成高强度的密钥时使用。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;的一个副本是&amp;lt;code&amp;gt;/dev/urandom&amp;lt;/code&amp;gt;（“unblocked”，非阻塞的随机数发生器&amp;lt;ref&amp;gt;{{Cite web |url=http://www.kernel.org/doc/man-pages/online/pages/man4/random.4.html |title=random(4) - Linux manual page&amp;lt;!-- 机器人生成的标题 --&amp;gt; |accessdate=2010-10-09 |archive-date=2010-04-30 |archive-url=https://web.archive.org/web/20100430055907/http://www.kernel.org/doc/man-pages/online/pages/man4/random.4.html |dead-url=no }}&amp;lt;/ref&amp;gt;），它会重复使用熵池中的数据以产生伪随机数据。这表示对&amp;lt;code&amp;gt;/dev/urandom&amp;lt;/code&amp;gt;的读取操作不会产生阻塞，但其输出的熵可能小于&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;的。它可以作为生成较低强度密码的伪随机数生成器，不建议用于生成高强度长期密码。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;也允许写入，任何用户都可以向熵池中加入随机数据。即使写入非随机数据亦是无害的，因为只有管理员可以调用[[ioctl]]以增加熵池大小。Linux内核中当前熵的值和大小可以通过访问&amp;lt;code&amp;gt;/proc/sys/kernel/random/&amp;lt;/code&amp;gt;文件夹中的文件得到。&lt;br /&gt;
&lt;br /&gt;
2006年3月，Gutterman、Pinkas和Reinman发表了对Linux随机数发生器的详细[[密码学]]分析&amp;lt;ref&amp;gt;{{cite web |url=http://www.pinkas.net/PAPERS/gpr06.pdf |title=Analysis of the Linux Random Number Generator |author=Zvi Gutterman |coauthors=Benny Pinkas, Tzachy Reinman |date=March 6, 2006 |format=PDF |accessdate=2008-09-18 |archive-date=2008-10-03 |archive-url=https://web.archive.org/web/20081003041432/http://www.pinkas.net/PAPERS/gpr06.pdf |dead-url=no }}&amp;lt;/ref&amp;gt;，其中提出了该发生器的几个弱点。也许其中最严重的问题发生在[[嵌入式系统]]和[[Live CD]]系统，类似[[路由器]]和[[无盘工作站]]中的应用。在这些系统中，引导状态是可预测的，且环境熵的来源也较为受限。对于有[[NVRAM]]的系统，他们建议在关机时保存一部分随机数发生器的状态，使得在下次开机时可以恢复这些状态。对于路由器而言，网络数据是熵的主要来源，他们认为在重启前后保存和恢复数据可能要求潜在的攻击者要么窃听从路由器投入使用开始全部的网络信息，或直接获取路由器的内部状态。他们写道，这个问题对于无线路由器而言尤其关键，因为其网络信息可以远程获取到，并可能用于产生数据加密用密钥的随机发生器。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
[[FreeBSD]]操作系统实现了256位的[[Yarrow算法]]变体，以提供伪随机数流。与Linux的&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;不同，FreeBSD的&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;不会产生阻塞，与Linux的&amp;lt;code&amp;gt;/dev/urandom&amp;lt;/code&amp;gt;相似，提供了密码学安全的伪随机数发生器，而不是基于熵池。而FreeBSD的&amp;lt;code&amp;gt;/dev/urandom&amp;lt;/code&amp;gt;则只是简单的链接到了&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
Yarrow[[算法]]的前提是现代的伪随机数发生器的安全性很高，若其内部状态不为攻击者所知，且比熵估计更易理解。在某些情况下，攻击者可以在某种程度上掌握熵的量，例如无盘服务器的熵几乎全部来自于网络，使得它可能易受[[中间人攻击]]的影响。算法的种子会被规则的重置：在网络和磁盘负载较轻的系统上，一秒内种子可能被重置数次。&lt;br /&gt;
&lt;br /&gt;
FreeBSD也支持[[硬體亂數生成器]]，并在安装了类似硬件时会替代Yarrow算法。&lt;br /&gt;
&lt;br /&gt;
2004年，[[Landon Curt Noll]]测试了FreeBSD 5.2.1版本的&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;，发现它不是一个密码学强的随机数发生器，因为其输出在十亿位测试中显示出了多个一致性缺陷。类似的缺陷亦发生在Linux 2.4.21-20，Solaris 8 patch 108528-18和[[Mac OS X]] 10.3.5的&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;中&amp;lt;ref&amp;gt;{{cite |title=BIllion Bit Test: Results and Conclusions |url=http://www.lavarnd.org/what/nist-test.html |date=22 Sep 2004 |work=LavaRnd |publisher=LavaRnd |accessdate=3 July 2009 |archive-date=2007-04-03 |archive-url=https://web.archive.org/web/20070403160136/http://www.lavarnd.org/what/nist-test.html |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=== 其它操作系统 ===&lt;br /&gt;
&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;/dev/urandom&amp;lt;/code&amp;gt;也存在于&lt;br /&gt;
[[Solaris]]&amp;lt;ref&amp;gt;{{cite web |url=http://blogs.sun.com/yenduri/entry/dev_random_in_solaris |title=存档副本 |accessdate=2010-10-09 |deadurl=yes |archiveurl=https://web.archive.org/web/20090731171753/http://blogs.sun.com/yenduri/entry/dev_random_in_solaris |archivedate=2009-07-31 }}&amp;lt;/ref&amp;gt;、[[Mac OS X]]&amp;lt;ref&amp;gt;{{Cite web |url=http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man4/random.4.html |title=Documentation Archive&amp;lt;!-- 机器人生成的标题 --&amp;gt; |accessdate=2010-10-09 |archive-date=2010-02-22 |archive-url=https://web.archive.org/web/20100222033242/http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man4/random.4.html |dead-url=no }}&amp;lt;/ref&amp;gt;、[[NetBSD]]&amp;lt;ref&amp;gt;{{Cite web |url=http://netbsd.gw.com/cgi-bin/man-cgi?rnd++NetBSD-current |title=rnd - NetBSD Manual Pages&amp;lt;!-- 机器人生成的标题 --&amp;gt; |accessdate=2010-10-09 |archive-date=2016-03-04 |archive-url=https://web.archive.org/web/20160304112826/http://netbsd.gw.com/cgi-bin/man-cgi?rnd++NetBSD-current |dead-url=no }}&amp;lt;/ref&amp;gt;、[[OpenBSD]]&amp;lt;ref&amp;gt;{{Cite web|title=random(4) - OpenBSD manual pages|url=https://man.openbsd.org/random.4|accessdate=2021-03-21|work=man.openbsd.org|archive-date=2021-05-14|archive-url=https://web.archive.org/web/20210514175409/http://man.openbsd.org/random.4}}&amp;lt;/ref&amp;gt;、[[UNIX|Tru 64 UNIX 5.1B]]&amp;lt;ref&amp;gt;{{Cite web |url=http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN4/0199____.HTM |title=存档副本 |accessdate=2010-10-09 |archive-date=2011-06-07 |archive-url=https://web.archive.org/web/20110607184919/http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN4/0199____.HTM |dead-url=no }}&amp;lt;/ref&amp;gt;、[[AIX]] 5.2&amp;lt;ref&amp;gt;{{Cite web |url=http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.files/doc/aixfiles/random.htm#idx927 |title=IBM Knowledge Center&amp;lt;!-- 机器人生成的标题 --&amp;gt; |accessdate=2010-10-09 |archive-date=2013-07-01 |archive-url=https://web.archive.org/web/20130701020124/http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.files/doc/aixfiles/random.htm#idx927 |dead-url=no }}&amp;lt;/ref&amp;gt;和[[HP-UX]] 11i v2&amp;lt;ref&amp;gt;{{Cite web |url=http://software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=KRNG11I |title=Software solutions {{!}} HP® Official Site&amp;lt;!-- 机器人生成的标题 --&amp;gt; |accessdate=2010-10-09 |archive-date=2008-12-24 |archive-url=https://web.archive.org/web/20081224160213/http://software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=KRNG11I |dead-url=no }}&amp;lt;/ref&amp;gt;中。与FreeBSD的实现类似，AIX采用了它自身的基于Yarrow的设计，但AIX使用的熵源数量低于标准&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;的实现，并且在系统认为熵池的熵达到足够值时停止填充熵池&amp;lt;ref&amp;gt;{{cite web |url=http://lists.gnupg.org/pipermail/gnupg-devel/2003-April/019954.html |title=AIX 5.2 /dev/random and /dev/urandom devices |publisher=Lists.gnupg.org |author=Iain Roberts |date=April 25, 2003 |accessdate=2008-09-18 |archive-date=2012-02-22 |archive-url=https://web.archive.org/web/20120222144110/http://lists.gnupg.org/pipermail/gnupg-devel/2003-April/019954.html |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
在[[Windows NT]]中，&amp;lt;code&amp;gt;ksecdd.sys&amp;lt;/code&amp;gt;提供了类似的功能，但读取特殊文件&amp;lt;code&amp;gt;\Device\KsecDD&amp;lt;/code&amp;gt;并不会提供与UNIX中相同的功能。开发文档中提到的，用于产生密码用随机数据的函数是[[CryptGenRandom]]和[[RtlGenRandom]]&amp;lt;ref&amp;gt;{{cite web |url=http://msdn2.microsoft.com/en-us/library/aa379942.aspx |title=CryptGenRandom |accessdate=2010-10-09 |archive-date=2008-04-23 |archive-url=https://web.archive.org/web/20080423092945/http://msdn2.microsoft.com/en-us/library/aa379942.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://msdn2.microsoft.com/en-us/library/aa387694.aspx|title=RtlGenRandom|accessdate=2010-10-09|archive-date=2008-10-14|archive-url=https://web.archive.org/web/20081014091317/http://msdn2.microsoft.com/en-us/library/aa387694.aspx|dead-url=no}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
虽然[[DOS]]没有原生的提供类似功能，但有开源的[http://www.rahul.net/dkaufman/index.html Noise.sys]{{Wayback|url=http://www.rahul.net/dkaufman/index.html |date=20100929230143 }}提供了类似功能。该实现与&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;的功能和接口类似，即创建了两个设备，RANDOM$与URANDOM$，也可以通过/DEV/RANDOM$和/DEV/URANDOM$访问。&lt;br /&gt;
&lt;br /&gt;
== EGD ==&lt;br /&gt;
[[EGD]]（熵收集守护进程，Entropy Gathering Daemon）通常可以在不支持&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;设备的UNIX系统中提供类似的功能。这是一个运行于[[用户态]]的[[守护进程]]，提供了高质量的密码用随机数据。一些加密软件，例如[[OpenSSL]]，[[GnuPG|GNU Privacy Guard]]和[[Apache|Apache HTTP服务器]]支持在&amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;不可用的时候使用EGD。&lt;br /&gt;
&lt;br /&gt;
[http://egd.sourceforge.net/ EGD]{{Wayback|url=http://egd.sourceforge.net/ |date=20101119024849 }}，或者类似的软件，例如[http://prngd.sourceforge.net/ prngd]{{Wayback|url=http://prngd.sourceforge.net/ |date=20101109052710 }}，可以从多种来源收集伪随机的熵，并对这些数据进行处理以去除偏置，并改善密码学质量，然后允许其它程序通过[[UNIX域套接口]]（通常使用&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;/dev/egd-pool&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;），或[[TCP套接口]]访问其输出。该程序通常使用建立子进程的以查询系统状态的方式来收集熵。它查询的状态通常是易变的、不可预测的，例如[[中央处理器|CPU]]、I/O、网络的使用率，也可能是一些[[日志]]文件和[[临时目录]]中的内容。&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
* [https://web.archive.org/web/20110614015324/http://www.suse.de/~thomas/papers/random-analysis.pdf Biege, Thomas; Analysis of a strong Random Number Generator] [https://web.archive.org/web/20110614015344/http://www.suse.de/~thomas/papers/23c3-random-analysis.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
* [[Unix哲学]]&lt;br /&gt;
* [[标准流]]&lt;br /&gt;
* [[/dev/full]]&lt;br /&gt;
* [[/dev/null]]&lt;br /&gt;
* [[/dev/zero]]&lt;br /&gt;
* [[/dev]]&lt;br /&gt;
* [[硬件随机数生成器]]&lt;br /&gt;
* [[密码学安全伪随机数生成器]]&lt;br /&gt;
* [[Yarrow算法]]&lt;br /&gt;
* [[Fortuna算法]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:/Dev/Random}}&lt;br /&gt;
[[Category:隨機性]]&lt;br /&gt;
[[Category:Unix|Dev Random]]&lt;br /&gt;
[[Category:设备文件|R]]&lt;br /&gt;
[[Category:随机数生成]]&lt;/div&gt;</summary>
		<author><name>imported&gt;JeremyLeung127</name></author>
	</entry>
</feed>