Zum Inhalt springen

Diskussion:/dev/random: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „–“ durch „-“
K Textersetzung - „ “ durch „ “
 
Zeile 12: Zeile 12:
| date=2005-04-16
| date=2005-04-16
| access-date=2014-07-22
| access-date=2014-07-22
}}</ref>   {{mono|/dev/random}} typically [[Blocking (computing)|blocked]] if there was less [[Entropy (computing)|entropy]] available than requested; more recently (see below for the differences between operating systems) it usually blocks at startup until sufficient entropy has been gathered, then unblocks permanently.  
}}</ref> {{mono|/dev/random}} typically [[Blocking (computing)|blocked]] if there was less [[Entropy (computing)|entropy]] available than requested; more recently (see below for the differences between operating systems) it usually blocks at startup until sufficient entropy has been gathered, then unblocks permanently.  
* The {{mono|/dev/urandom}} device typically was never a blocking device, even if the pseudorandom number generator seed was not fully initialized with entropy since boot.  
* The {{mono|/dev/urandom}} device typically was never a blocking device, even if the pseudorandom number generator seed was not fully initialized with entropy since boot.  
* Not all operating systems implement the same methods for {{mono|/dev/random}} and {{mono|/dev/urandom}}.
* Not all operating systems implement the same methods for {{mono|/dev/random}} and {{mono|/dev/urandom}}.
Zeile 19: Zeile 19:
[[File:Rngtest FIPS-140-2 screenshot.png|upright=1.5|thumb|Rngtest testing /dev/random pool ]]
[[File:Rngtest FIPS-140-2 screenshot.png|upright=1.5|thumb|Rngtest testing /dev/random pool ]]
Random number generation in [[Kernel (operating system)|kernel space]] was implemented for the first time for [[Linux]]<ref>{{cite web
Random number generation in [[Kernel (operating system)|kernel space]] was implemented for the first time for [[Linux]]<ref>{{cite web
  |url         = https://randombit.net/bitbashing/posts/syllable_dev_random.html
  |url     = https://randombit.net/bitbashing/posts/syllable_dev_random.html
  |title       = On Syllable's /dev/random
  |title   = On Syllable's /dev/random
  |first       = Jack
  |first   = Jack
  |last       = Lloyd
  |last   = Lloyd
  |date       = 2008-12-09
  |date   = 2008-12-09
  |access-date = 2019-08-21
  |access-date = 2019-08-21
}}</ref> in 1994 by [[Theodore Ts'o]].<ref>{{cite web
}}</ref> in 1994 by [[Theodore Ts'o]].<ref>{{cite web
  |url         = https://everything2.com/title/%252Fdev%252Frandom
  |url     = https://everything2.com/title/%252Fdev%252Frandom
  |title       = /dev/random
  |title   = /dev/random
  |date       = 2003-06-08
  |date   = 2003-06-08
  |publisher   = [[Everything2]]
  |publisher = [[Everything2]]
  |access-date = 2013-07-03
  |access-date = 2013-07-03
  |archive-url = https://web.archive.org/web/20091117215406/https://everything2.com/title/%252Fdev%252Frandom
  |archive-url = https://web.archive.org/web/20091117215406/https://everything2.com/title/%252Fdev%252Frandom
  |archive-date = 2009-11-17
  |archive-date = 2009-11-17
  |url-status     = live
  |url-status   = live
}}</ref>
}}</ref>
The implementation used [[cryptographic hash function|secure hashes]] rather than [[cipher]]s,{{clarify|date=February 2017}} to avoid [[export of cryptography|cryptography export restrictions]] that were in place when the generator was originally designed.  
The implementation used [[cryptographic hash function|secure hashes]] rather than [[cipher]]s,{{clarify|date=February 2017}} to avoid [[export of cryptography|cryptography export restrictions]] that were in place when the generator was originally designed.  
Zeile 41: Zeile 41:
In Ts'o's implementation, the generator keeps an estimate of the number of [[bit]]s of noise in the [[entropy pool]].  
In Ts'o's implementation, the generator keeps an estimate of the number of [[bit]]s of noise in the [[entropy pool]].  
* From this entropy pool random numbers are created.  
* From this entropy pool random numbers are created.  
* When read, the {{mono|/dev/random}} device will only return random bytes within the estimated number of bits of noise in the entropy pool. When the entropy pool is empty, reads from {{mono|/dev/random}} will [[Asynchronous I/O|block]] until additional environmental noise is gathered.<ref name="linux-man-page">{{man|4|random|Linux}}</ref> The intent is to serve as a [[cryptographically secure pseudorandom number generator]], delivering output with entropy as large as possible.  
* When read, the {{mono|/dev/random}} device will only return random bytes within the estimated number of bits of noise in the entropy pool. When the entropy pool is empty, reads from {{mono|/dev/random}} will [[Asynchronous I/O|block]] until additional environmental noise is gathered.<ref name="linux-man-page">{{man|4|random|Linux}}</ref> The intent is to serve as a [[cryptographically secure pseudorandom number generator]], delivering output with entropy as large as possible.  
* This is suggested by the authors for use in generating cryptographic keys for high-value or long-term protection.<ref name="linux-man-page" />
* This is suggested by the authors for use in generating cryptographic keys for high-value or long-term protection.<ref name="linux-man-page" />


Zeile 54: Zeile 54:
* This allows any user to mix random data into the pool.  
* This allows any user to mix random data into the pool.  
* Non-random data is harmless, because only a privileged user can issue the [[ioctl]] needed to increase the entropy estimate.{{Dubious|date=December 2020|reason=This isn't the reason that writing non-random data is harmless. 1.  
* Non-random data is harmless, because only a privileged user can issue the [[ioctl]] needed to increase the entropy estimate.{{Dubious|date=December 2020|reason=This isn't the reason that writing non-random data is harmless. 1.  
* The non-random data mixes with the random data in a way that keeps only the randomness, like XOR? That would make it harmless? 2.  
* The non-random data mixes with the random data in a way that keeps only the randomness, like XOR? That would make it harmless? 2.  
* The entropy estimate is not increased when you write to it, according to https://linux.die.net/man/4/urandom, but it DOES affect the output, so that isn't what makes it harmless. 3.  
* The entropy estimate is not increased when you write to it, according to https://linux.die.net/man/4/urandom, but it DOES affect the output, so that isn't what makes it harmless. 3.  
* Only privileged users can update the entropy estimate, which doesn't make it harmless?}} The current amount of entropy and the size of the Linux kernel entropy pool, both measured in bits, are available in {{mono|/proc/sys/kernel/random/}} and can be displayed by the command {{code|cat /proc/sys/kernel/random/entropy_avail}} and {{code|cat /proc/sys/kernel/random/poolsize}} respectively.
* Only privileged users can update the entropy estimate, which doesn't make it harmless?}} The current amount of entropy and the size of the Linux kernel entropy pool, both measured in bits, are available in {{mono|/proc/sys/kernel/random/}} and can be displayed by the command {{code|cat /proc/sys/kernel/random/entropy_avail}} and {{code|cat /proc/sys/kernel/random/poolsize}} respectively.
Zeile 89: Zeile 89:
* With Linux kernel 3.17+, the VirtIO RNG was modified to have a default quality defined above 0,<ref>{{cite web|url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34679ec7a0c45da8161507e1f2e1f72749dfd85c|title=kernel/git/torvalds/linux.git - Linux kernel source tree @ 34679ec7a0c45da8161507e1f2e1f72749dfd85c "virtio: rng: add derating factor for use by hwrng core"|website=Git.kernel.org|access-date=18 October 2016}}</ref> and as such, is currently the only HWRNG mixed into {{mono|/dev/random}} by default.
* With Linux kernel 3.17+, the VirtIO RNG was modified to have a default quality defined above 0,<ref>{{cite web|url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34679ec7a0c45da8161507e1f2e1f72749dfd85c|title=kernel/git/torvalds/linux.git - Linux kernel source tree @ 34679ec7a0c45da8161507e1f2e1f72749dfd85c "virtio: rng: add derating factor for use by hwrng core"|website=Git.kernel.org|access-date=18 October 2016}}</ref> and as such, is currently the only HWRNG mixed into {{mono|/dev/random}} by default.


The entropy pool can be improved by programs like {{mono|timer_entropyd}}, {{mono|haveged}}, {{mono|randomsound}} und weitere With {{mono|rng-tools}}, [[hardware random number generator]]s like ''Entropy Key, und weitere'' can write to {{mono|/dev/random}}.  
The entropy pool can be improved by programs like {{mono|timer_entropyd}}, {{mono|haveged}}, {{mono|randomsound}} und weitere With {{mono|rng-tools}}, [[hardware random number generator]]s like ''Entropy Key, und weitere'' can write to {{mono|/dev/random}}.  
* The [[diehard tests]] programs {{mono|dieharder}}, {{mono|diehard}} and {{mono|ent}} can test these random number generators.<ref>{{cite web |url=https://www.vanheusden.com/te/timer_entropyd-0.1.tgz |title=?? |website=Vanheusden.com |access-date=2016-10-23 |archive-url=https://web.archive.org/web/20130921054659/https://www.vanheusden.com/te/timer_entropyd-0.1.tgz |archive-date=2013-09-21 |url-status=dead }}</ref><ref>{{cite web|url=https://code.google.com/p/dieharder/|title=Google Code Archive for dieharder|website=Code.google.com|access-date=18 October 2016}}</ref><ref>{{cite web|url=https://stat.fsu.edu/pub/diehard/|title=The Marsaglia Random Number CDROM including the Diehard Battery of Tests of Randomness|website=Stat.fsu.edu|access-date=2016-10-23|archive-url=https://web.archive.org/web/20160125103112/https://stat.fsu.edu/pub/diehard/|archive-date=2016-01-25|url-status=dead}}</ref><ref>{{cite web|url=https://www.gnu.org/software/hurd/user/tlecarrour/rng-tools.html|title=rng-tools|website=Gnu.org|access-date=2016-10-23}}</ref>
* The [[diehard tests]] programs {{mono|dieharder}}, {{mono|diehard}} and {{mono|ent}} can test these random number generators.<ref>{{cite web |url=https://www.vanheusden.com/te/timer_entropyd-0.1.tgz |title=?? |website=Vanheusden.com |access-date=2016-10-23 |archive-url=https://web.archive.org/web/20130921054659/https://www.vanheusden.com/te/timer_entropyd-0.1.tgz |archive-date=2013-09-21 |url-status=dead }}</ref><ref>{{cite web|url=https://code.google.com/p/dieharder/|title=Google Code Archive for dieharder|website=Code.google.com|access-date=18 October 2016}}</ref><ref>{{cite web|url=https://stat.fsu.edu/pub/diehard/|title=The Marsaglia Random Number CDROM including the Diehard Battery of Tests of Randomness|website=Stat.fsu.edu|access-date=2016-10-23|archive-url=https://web.archive.org/web/20160125103112/https://stat.fsu.edu/pub/diehard/|archive-date=2016-01-25|url-status=dead}}</ref><ref>{{cite web|url=https://www.gnu.org/software/hurd/user/tlecarrour/rng-tools.html|title=rng-tools|website=Gnu.org|access-date=2016-10-23}}</ref>


Zeile 95: Zeile 95:
* Bernstein]] published a critique<ref>{{cite web|url=https://blog.cr.yp.to/20140205-entropy.html|title=cr.yp.to: 2014.02.05: Entropy Attacks!|author=Daniel J.  
* Bernstein]] published a critique<ref>{{cite web|url=https://blog.cr.yp.to/20140205-entropy.html|title=cr.yp.to: 2014.02.05: Entropy Attacks!|author=Daniel J.  
* Bernstein|author-link=Daniel J.  
* Bernstein|author-link=Daniel J.  
* Bernstein|date=2014-02-05}}</ref> of how Linux mixes different sources of entropy. He outlines an attack in which one source of entropy capable of monitoring the other sources of entropy could modify its output to nullify the randomness of the other sources of entropy. Consider the function {{tmath|H(x,y,z)}} where ''H'' is a hash function and ''x'', ''y'', and ''z'' are sources of entropy with ''z'' being the output of a CPU based malicious HRNG Z:
* Bernstein|date=2014-02-05}}</ref> of how Linux mixes different sources of entropy. He outlines an attack in which one source of entropy capable of monitoring the other sources of entropy could modify its output to nullify the randomness of the other sources of entropy. Consider the function {{tmath|H(x,y,z)}} where ''H'' is a hash function and ''x'', ''y'', and ''z'' are sources of entropy with ''z'' being the output of a CPU based malicious HRNG Z:
#''Z'' generates a random value of ''r''.
#''Z'' generates a random value of ''r''.
#''Z'' computes {{tmath|H(x,y,r)}}.
#''Z'' computes {{tmath|H(x,y,r)}}.
#If the output of {{tmath|H(x,y,r)}} is equal to the desired value, output ''r'' as ''z''.
#If the output of {{tmath|H(x,y,r)}} is equal to the desired value, output ''r'' as ''z''.
#Else, repeat starting at 1.
#Else, repeat starting at 1.
Bernstein estimated that an attacker would need to repeat {{tmath|H(x,y,r)}} 16 times to compromise DSA and ECDSA. This is possible because Linux reseeds H on an ongoing basis instead of using a single high quality seed.
Bernstein estimated that an attacker would need to repeat {{tmath|H(x,y,r)}} 16 times to compromise DSA and ECDSA. This is possible because Linux reseeds H on an ongoing basis instead of using a single high quality seed.


In October 2016, with the release of [[Linux kernel]] version 4.8, the kernel's {{mono|/dev/urandom}} was switched over to a [[ChaCha20]]-based [[cryptographic pseudorandom number generator]] (CPRNG) implementation<ref>{{Cite web |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=818e607b57c94ade9824dad63a96c2ea6b21baf3 |title=kernel/git/torvalds/linux.git - Linux kernel source tree |date=2016-07-27 |publisher=kernel.org |access-date=2016-11-23}}</ref> by [[Theodore Ts'o]], based on [[Daniel J.  
In October 2016, with the release of [[Linux kernel]] version 4.8, the kernel's {{mono|/dev/urandom}} was switched over to a [[ChaCha20]]-based [[cryptographic pseudorandom number generator]] (CPRNG) implementation<ref>{{Cite web |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=818e607b57c94ade9824dad63a96c2ea6b21baf3 |title=kernel/git/torvalds/linux.git - Linux kernel source tree |date=2016-07-27 |publisher=kernel.org |access-date=2016-11-23}}</ref> by [[Theodore Ts'o]], based on [[Daniel J.  
Zeile 109: Zeile 109:


== BSD systems ==
== BSD systems ==
The [[FreeBSD]] operating system provides a {{mono|/dev/urandom}} link to {{mono|/dev/random}}. Both block only until properly seeded. FreeBSD's PRNG ([[Fortuna (PRNG)|Fortuna]]) reseeds regularly, and does not attempt to estimate entropy. On a system with small amount of network and disk activity, reseeding is done after a fraction of a second.
The [[FreeBSD]] operating system provides a {{mono|/dev/urandom}} link to {{mono|/dev/random}}. Both block only until properly seeded. FreeBSD's PRNG ([[Fortuna (PRNG)|Fortuna]]) reseeds regularly, and does not attempt to estimate entropy. On a system with small amount of network and disk activity, reseeding is done after a fraction of a second.


Since [[OpenBSD]] 5.1 (May 1, 2012) {{mono|/dev/random}} and {{mono|/dev/arandom}} used an algorithm based on [[RC4]] but renamed to ARC4 because of intellectual property reasons.  
Since [[OpenBSD]] 5.1 (May 1, 2012) {{mono|/dev/random}} and {{mono|/dev/arandom}} used an algorithm based on [[RC4]] but renamed to ARC4 because of intellectual property reasons.  
Zeile 129: Zeile 129:


== macOS, iOS and other Apple OSes ==
== macOS, iOS and other Apple OSes ==
All Apple OSes have moved to Fortuna since at least December 2019, possibly earlier.<ref>{{cite web|url=https://support.apple.com/en-ie/guide/security/seca0c73a75b/web|title=Apple Platform Security|publisher=[[Apple Inc.]]}}</ref> It is based on [[SHA-256]]. Multiple entropy sources such as the secure enclave RNG, boot phase timing jitter, hardware interrupt (timing assumed) are used. RDSEED/RDRAND is used on Intel-based Macs that support it. Seed (entropy) data is also stored for subsequent reboots.
All Apple OSes have moved to Fortuna since at least December 2019, possibly earlier.<ref>{{cite web|url=https://support.apple.com/en-ie/guide/security/seca0c73a75b/web|title=Apple Platform Security|publisher=[[Apple Inc.]]}}</ref> It is based on [[SHA-256]]. Multiple entropy sources such as the secure enclave RNG, boot phase timing jitter, hardware interrupt (timing assumed) are used. RDSEED/RDRAND is used on Intel-based Macs that support it. Seed (entropy) data is also stored for subsequent reboots.


Prior to the change, [[macOS]] and [[iOS]] used 160-bit [[Yarrow algorithm|Yarrow]] based on [[SHA-1]].<ref>{{cite web|url=https://opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/dev/random/|title=xnu-1456.1.26/bsd/dev/random|publisher=[[Apple Inc.]]|access-date=18 October 2016}}</ref>
Prior to the change, [[macOS]] and [[iOS]] used 160-bit [[Yarrow algorithm|Yarrow]] based on [[SHA-1]].<ref>{{cite web|url=https://opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/dev/random/|title=xnu-1456.1.26/bsd/dev/random|publisher=[[Apple Inc.]]|access-date=18 October 2016}}</ref>
Zeile 151: Zeile 151:
| date=1999-09-19
| date=1999-09-19
| access-date=2013-07-03}}</ref> AIX 5.2<ref>{{cite web
| access-date=2013-07-03}}</ref> AIX 5.2<ref>{{cite web
  |url         = https://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.files/doc/aixfiles/random.htm
  |url     = https://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.files/doc/aixfiles/random.htm
  |title       = random and urandom Devices
  |title   = random and urandom Devices
  |work       = pSeries and AIX Information Center
  |work   = pSeries and AIX Information Center
  |date       = 2010-03-15
  |date   = 2010-03-15
  |access-date = 2013-07-03
  |access-date = 2013-07-03
  |archive-url = https://web.archive.org/web/20210303075907/https://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=%2Fcom.ibm.aix.files%2Fdoc%2Faixfiles%2Frandom.htm
  |archive-url = https://web.archive.org/web/20210303075907/https://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=%2Fcom.ibm.aix.files%2Fdoc%2Faixfiles%2Frandom.htm
  |archive-date = 2021-03-03
  |archive-date = 2021-03-03
  |url-status = dead
  |url-status = dead
}}</ref> and HP-UX 11i v2.<ref>{{cite web
}}</ref> and HP-UX 11i v2.<ref>{{cite web
| url=https://software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=KRNG11I
| url=https://software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=KRNG11I
Zeile 190: Zeile 190:
== External links ==
== External links ==
*{{cite web
*{{cite web
  |url         = https://github.com/thomasbiege/papers/raw/master/random-device-analysis.pdf
  |url     = https://github.com/thomasbiege/papers/raw/master/random-device-analysis.pdf
  |title       = Analysis of a strong Pseudo Random Number Generator by anatomizing Linux' Random Number Device
  |title   = Analysis of a strong Pseudo Random Number Generator by anatomizing Linux' Random Number Device
  |first       = Thomas
  |first   = Thomas
  |last         = Biege
  |last     = Biege
  |website = [[GitHub]]
  |website = [[GitHub]]
  |date         = 2006-11-06
  |date     = 2006-11-06
}}
}}
*{{cite web
*{{cite web

Aktuelle Version vom 14. Juni 2026, 00:45 Uhr

Wikipedia EN:

256 byte hex dump of /dev/urandom

Vorlage:Short description

In Unix-like operating systems, Vorlage:Mono and Vorlage:Mono are special files that serve as cryptographically secure pseudorandom number generators.

  • They allow access to environmental noise collected from device drivers and other sources.[1] Vorlage:Mono typically blocked if there was less entropy available than requested; more recently (see below for the differences between operating systems) it usually blocks at startup until sufficient entropy has been gathered, then unblocks permanently.
  • The Vorlage:Mono device typically was never a blocking device, even if the pseudorandom number generator seed was not fully initialized with entropy since boot.
  • Not all operating systems implement the same methods for Vorlage:Mono and Vorlage:Mono.

Linux

Rngtest testing /dev/random pool

Random number generation in kernel space was implemented for the first time for Linux[2] in 1994 by Theodore Ts'o.[3] The implementation used secure hashes rather than ciphers,Vorlage:Clarify to avoid cryptography export restrictions that were in place when the generator was originally designed.

  • The implementation was also designed with the assumption that any given hash or cipher might eventually be found to be weak, and so the design is durable in the face of any such weaknesses.
  • Fast recovery from pool compromise is not considered a requirement, because the requirements for pool compromise are sufficient for much easier and more direct attacks on unrelated parts of the operating system.

In Ts'o's implementation, the generator 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 Vorlage:Mono device will only return random bytes within the estimated number of bits of noise in the entropy pool. When the entropy pool is empty, reads from Vorlage:Mono will block until additional environmental noise is gathered.[4] The intent is to serve as a cryptographically secure pseudorandom number generator, delivering output with entropy as large as possible.
  • This is suggested by the authors for use in generating cryptographic keys for high-value or long-term protection.[4]

A counterpart to Vorlage:Mono is Vorlage:Mono ("unlimited"[5]/non-blocking random source[4]) which reuses the internal pool to produce more pseudo-random bits.

  • This means that the call will not block, but the output may contain less entropy than the corresponding read from Vorlage:Mono.
  • While Vorlage:Mono is still intended as a pseudorandom number generator suitable for most cryptographic purposes, the authors of the corresponding man page note that, theoretically, there may exist an as-yet-unpublished attack on the algorithm used by Vorlage:Mono, and that users concerned about such an attack should use Vorlage:Mono instead.[4] However such an attack is unlikely to come into existence, because once the entropy pool is unpredictable it doesn't leak security by a reduced number of bits.[6]

It is also possible to write to Vorlage:Mono.

  • This allows any user to mix random data into the pool.
  • Non-random data is harmless, because only a privileged user can issue the ioctl needed to increase the entropy estimate.Vorlage:Dubious The current amount of entropy and the size of the Linux kernel entropy pool, both measured in bits, are available in Vorlage:Mono and can be displayed by the command Vorlage:Code and Vorlage:Code respectively.

Gutterman, Pinkas, & Reinman in March 2006 published a detailed cryptographic analysis of the Linux random number generator[7] in which they describe several weaknesses.

  • Perhaps the most severe issue they report is with embedded or Live CD systems, such as routers and diskless clients, for which the bootup state is predictable and the available supply of entropy from the environment may be limited.
  • For a system with non-volatile memory, they recommend saving some state from the RNG at shutdown so that it can be included in the RNG state on the next reboot.
  • In the case of a router for which network traffic represents the primary available source of entropy, they note that saving state across reboots "would require potential attackers to either eavesdrop on all network traffic" from when the router is first put into service, or obtain direct access to the router's internal state.
  • This issue, they note, is particularly critical in the case of a wireless router whose network traffic can be captured from a distance, and which may be using the RNG to generate keys for data encryption.

The Linux kernel provides support for several hardware random number generators, should they be installed.

With Linux kernel 3.16 and newer,[9] the kernel itself mixes data from hardware random number generators into Vorlage:Mono on a sliding scale based on the definable entropy estimation quality of the HWRNG.

  • This means that no userspace daemon, such as Vorlage:Mono from Vorlage:Mono, is needed to do that job.
  • With Linux kernel 3.17+, the VirtIO RNG was modified to have a default quality defined above 0,[10] and as such, is currently the only HWRNG mixed into Vorlage:Mono by default.

The entropy pool can be improved by programs like Vorlage:Mono, Vorlage:Mono, Vorlage:Mono und weitere With Vorlage:Mono, hardware random number generators like Entropy Key, und weitere can write to Vorlage:Mono.

In January 2014, [[Daniel J.

  • Bernstein]] published a critique[15] of how Linux mixes different sources of entropy. He outlines an attack in which one source of entropy capable of monitoring the other sources of entropy could modify its output to nullify the randomness of the other sources of entropy. Consider the function Vorlage:Tmath where H is a hash function and x, y, and z are sources of entropy with z being the output of a CPU based malicious HRNG Z:
  1. Z generates a random value of r.
  2. Z computes Vorlage:Tmath.
  3. If the output of Vorlage:Tmath is equal to the desired value, output r as z.
  4. Else, repeat starting at 1.

Bernstein estimated that an attacker would need to repeat Vorlage:Tmath 16 times to compromise DSA and ECDSA. This is possible because Linux reseeds H on an ongoing basis instead of using a single high quality seed.

In October 2016, with the release of Linux kernel version 4.8, the kernel's Vorlage:Mono was switched over to a ChaCha20-based cryptographic pseudorandom number generator (CPRNG) implementation[16] by Theodore Ts'o, based on [[Daniel J.

In 2020, the Linux kernel version 5.6 Vorlage:Mono only blocks when the CPRNG hasn't initialized.

BSD systems

The FreeBSD operating system provides a Vorlage:Mono link to Vorlage:Mono. Both block only until properly seeded. FreeBSD's PRNG (Fortuna) reseeds regularly, and does not attempt to estimate entropy. On a system with small amount of network and disk activity, reseeding is done after a fraction of a second.

Since OpenBSD 5.1 (May 1, 2012) Vorlage:Mono and Vorlage:Mono used an algorithm based on RC4 but renamed to ARC4 because of intellectual property reasons.

  • While random number generation here uses system entropy gathered in several ways, the ARC4 algorithm provides a fail-safe, ensuring that a rapid and high quality pseudo-random number stream is provided even when the pool is in a low entropy state.
  • The system automatically uses hardware random number generators (such as those provided on some Intel PCI hubs) if they are available, through the OpenBSD Cryptographic Framework.
  • As of OpenBSD 5.5 (May 1, 2014), the Vorlage:Code call used for OpenBSD's random devices no longer uses ARC4, but ChaCha20 (arc4random name might be reconsidered as A Replacement Call for Random).[18][19] Vorlage:Mono was removed in OpenBSD 6.3 (April 15, 2018).[20]

NetBSD's implementation of the legacy Vorlage:Code API has been switched over to ChaCha20 as well.[21]

macOS, iOS and other Apple OSes

All Apple OSes have moved to Fortuna since at least December 2019, possibly earlier.[22] It is based on SHA-256. Multiple entropy sources such as the secure enclave RNG, boot phase timing jitter, hardware interrupt (timing assumed) are used. RDSEED/RDRAND is used on Intel-based Macs that support it. Seed (entropy) data is also stored for subsequent reboots.

Prior to the change, macOS and iOS used 160-bit Yarrow based on SHA-1.[23]

There is no difference between Vorlage:Mono and Vorlage:Mono; both behave identically.[24][25]

Other operating systems

Vorlage:Mono and Vorlage:Mono are also available on Solaris,[26] NetBSD,[27] Tru64 UNIX 5.1B,[28] AIX 5.2[29] and HP-UX 11i v2.[30] As with FreeBSD, AIX implements its own Yarrow-based design, however AIX uses considerably fewer entropy sources than the standard Vorlage:Mono implementation and stops refilling the pool when it thinks it contains enough entropy.[31]

In Windows , similar functionality is delivered by Vorlage:Mono, but reading the special file Vorlage:Mono does not work as in UNIX.

Cygwin on Windows provides implementations of both Vorlage:Mono and Vorlage:Mono, which can be used in scripts and programs.[33]

See also