<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rsalz-4086bis-01" category="bcp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="4086bis">On Random Numbers</title>
    <seriesInfo name="Internet-Draft" value="draft-rsalz-4086bis-01"/>
    <author initials="D." surname="Miller" fullname="Damien Miller">
      <organization>OpenSSH</organization>
      <address>
        <email>djm@openssh.org</email>
      </address>
    </author>
    <author initials="R." surname="Salz" fullname="Rich Salz">
      <organization>Akamai Technologies, Inc.</organization>
      <address>
        <email>rsalz@akamai.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="08"/>
    <area>Security</area>
    <workgroup>SAAG Working Group</workgroup>
    <abstract>
      <?line 66?>

<t>Things have changed a great deal in the two decades since RFC 4086,
"Randomness Requirements for Security," was published.
Notably, facilities to generate high-quality random
numbers are widely available on most common computing platforms.</t>
      <t>While RFC 4086 provides much information to those implementing
such a facility, this document takes a different approach, encouraging
implementors to use facilities already available to them.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/richsalz/ietf-4086bis"/>.</t>
    </note>
  </front>
  <middle>
    <?line 77?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Things have changed a great deal in the two decades since RFC 4086,
"Randomness Requirements for Security," was published.
Notably, facilities to generate high-quality random
numbers are widely available on most common computing platforms.</t>
      <t>While RFC 4086 provides much information to those implementing
such a facility, this document takes a different approach, encouraging
implementors to use facilities already available to them.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of this Document</name>
        <t>This document first defines some commonly-used terms in the
generation of random numbers.
This is followed by a short section that uses those terms to
define a best practice for generating random numbers.
This is followed by a section that lists some common concerns
and mistakes, and may be thought of as a "Security Considerations"
guide for implementors.
Finally, the document concludes with the standard IETF boilerplate
sections.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The following sub-sections define commonly-used terms.
These are often mis-used, so the goal is to provide a common understanding.
All of the definitions below should be taken in the context of cryptography.</t>
      <section anchor="entropy">
        <name>Entropy</name>
        <t>When used in information science,
entropy is the amount of information, expressed in units of bits, that is
unknown to some other party (such as an attacker) in some scenario.  For
example, to someone having no information about the actual outcome, "a value
chosen by a single flip of an ideal coin" would present an entropy of 1.0
bits, while "a sequence of 256 such flips" would present 256.0 bits.  A
variable or protocol field of <tt>N</tt> bits can never represent more than <tt>N</tt> bits of
entropy. The effective entropy encoded in actual data is often significantly
less.</t>
        <t>Sufficient entropy is a necessary (but not sufficient) property for a secure
random number generation system. Without sufficient entropy the system may be
predictable.</t>
        <t>Good sources of entropy include values generated from hardware, such as
disk or network timings.
Common server systems often repeat the same actions every time the boot,
which means that system-provided entropy might not be immediately
available.
Many hardware systems provide RNG facilities that may be used as
entropy sources, such as <tt>rdrand</tt>/<tt>rdseed</tt> on X86 class CPUs, and
<tt>RNDR</tt> registers on
ARM CPUs.</t>
        <t>Combination of multiple entropy sources is desirable where possible, to
avoid failure if one of them turns out to be predictable.</t>
      </section>
      <section anchor="seed">
        <name>Seed</name>
        <t>A seed is the specific value used to initialize an algorithm that
generates a sequence of unpredictable "random" numbers.
The seed value should have high entropy.
It is important that the seed not be disclosed, as an adversary
could duplicate the bytes generated by the algorithm and determine
any keys generated.</t>
      </section>
      <section anchor="nonce">
        <name>Nonce</name>
        <t>A nonce is a number that is used once. It need not be secret, and is
often public or part of the protocol. For example, QUIC defines a nonce
that is used to detect if a packet has already been received.</t>
        <t>The non-repeatability can be highly important. For example, if AES-GCM
repeats a nonce, an adversary can determine the key. AES-SIV is
resistant to this. It is common for a nonce to be a simple incrementing
counter.</t>
        <t>In many protocols, nonce values are sent in cleartext. For example,
the initial SSH key exchange (RFC 4253 section 7.1) includes a 16 byte
"cookie" that each peer sends to make each key exchange (statistically)
unique. A nonce that directly uses the RNG output, as opposed to
hashing it, therefore represent one
path by which an attacker may directly
observe the raw output of a random number system.</t>
      </section>
      <section anchor="random-bit-generator-rbg">
        <name>Random Bit Generator (RBG)</name>
        <t>A device or algorithm that produces a sequence of bits that have
the following two characteristics:</t>
        <ul spacing="normal">
          <li>
            <t>It is statistically independent: knowing one bit provides no
information about the value of any other bit; and</t>
          </li>
          <li>
            <t>It is unbiased: no value is more likely to occur than any other value.
See <xref target="uniform"/> for concerns about bias.</t>
          </li>
        </ul>
      </section>
      <section anchor="deterministic-random-bit-generator-drbg">
        <name>Deterministic Random Bit Generator (DRBG)</name>
        <t>An RBG that uses a seed and produces random bits.
The security of the stream requires that the the seed is
not known by an adversary.
The output stream has a defined limit, and the DRBG will need to be
provided new seed material when the limit is reached.
See <xref target="NISTDRBG"/> for more complete specification and algorithm
descriptions.</t>
      </section>
      <section anchor="random-number-generator-rng">
        <name>Random Number Generator (RNG)</name>
        <t>A casual term that, when feasible, should be avoided.</t>
      </section>
      <section anchor="pseudo-random-number-generator-prng">
        <name>Pseudo-Random Number Generator (PRNG)</name>
        <t>A more accurate term than RNG. It can imply that the seed need
not be kept private, such as when using the output stream for simulations.</t>
      </section>
      <section anchor="backtracking-resistance">
        <name>Backtracking resistance</name>
        <t>If an adversary knows the state of the RBG at a time <tt>T</tt>, they will be unable
to recover the state at time <tt>T-1</tt>.  Further, all output up to time <tt>T-1</tt>
cannot be distinguished from random output.  This is usually accomplished by
ensuring that the RBG generation algorithm is a one-way function.</t>
        <t>Put another way, backtracking resistance means that a compromise of the RBG
internal state has no effect on the security of prior outputs.
This is commonly called "forward secrecy" in protocols such as TLS.</t>
      </section>
      <section anchor="forward-or-prediction-resistance">
        <name>Forward or Prediction resistance</name>
        <t>If an adversary knows the state of the RBG at a time <tt>T</tt>, they will be unable
to predict the output at a time, <tt>T+1</tt>.  This can only be provided by
ensuring that a RBG is reseeded between consecutive requests, as long as
knowledge of the current RBG internal state does not allow an adversary any
useful knowledge about future RBG internal states or outputs.</t>
      </section>
    </section>
    <section anchor="recommendations">
      <name>Recommendations</name>
      <t>Use an appropriate function from the local operating system if available.
At the time of writing,
on Windows use the <tt>BCryptGenRandom()</tt> function described in <xref target="BCRYPT"/>.</t>
      <t>For OpenBSD 2.1, FreeBSD 3.0, NetBSD 1.6, DragonFly 1.0, or Linux C
library since July 2022 use the <tt>arc4random()</tt> described in <xref target="ARC4RAND"/>.
The <tt>getrandom()</tt> function is also available on many systems and
is described in <xref target="GETRAND"/>.</t>
      <t>On older Unix-like systems, the <tt>/dev/random</tt> or <tt>/dev/urandom</tt>
pseudo-devices may be available; check the documentation.
Historically, he primary difference is that the first would block if the kernel
believed there is not enough entropy in the seed material; this may no
longer be true.</t>
      <t>If the operating system does not provide something suitable, use an
OpenSSL function
from the <tt>RAND_bytes</tt> set described in <xref target="RANDBYTES"/>, particularly if provided
as part of the operating system distribution as it is most likely to
enable the best source of entropy for seeding.
If the library must be configured and compiled directly,
see the notes in <xref target="OSSLCONFIG"/> about
random number generation.</t>
      <t>If feasible, use a main DRBG to seed two separate DRBG's: one to generate
private keys, and one for all other uses.</t>
      <t>For smaller systems that are not generating cryptographic material,
the Mersenne Twister PRNG may be acceptable.
A full description and sample code can be found at <xref target="TWIST"/>.</t>
    </section>
    <section anchor="concerns">
      <name>Concerns</name>
      <t>This section details some likely concerns and issues to consider.</t>
      <section anchor="reseeding">
        <name>Reseeding</name>
        <t>A DRBG needs to be reseeded with additional entropy. The same sources
used to provide the intial entropy can often be used in reseeding.
The reseeding requirements depend on the DRBG implementation details;
<xref target="NISTDRBG"/> provides an overview and some specifics. This is generally
not necessary if the random bits are provided directly by the operating system.</t>
      </section>
      <section anchor="boot-time">
        <name>Boot-time</name>
        <t>When a system boots, or re-boots, the hardware used (or measured) to provide
the seed material is often in the same state every time. This leads to repeated
bitstreams across reboots. It is tempting to store seed material in local
storage and use it at system start-up. If that file is accessible to
an adversary, the stream of bits can be predictable.</t>
      </section>
      <section anchor="fork">
        <name>Fork</name>
        <t>It's common for a server to fork a separate client process for each
incoming connection, or pre-create a pool to handle client requests.
Reset the RNG when forking.</t>
      </section>
      <section anchor="uniform">
        <name>Uniform distribution</name>
        <t>Modulo bias is a statistical distortion that happens when mapping a
a larger range of random numbers into a smaller range using a
modulo operation such as C's <tt>%</tt> operator.
For example, mapping the eight values <tt>[0 .. 7]</tt> to
the five values <tt>[0 .. 4]</tt> will be distorted because four is the
only value produced from only one input. This is a concern when the
upper bound isn't a power of two.</t>
        <t>Use the <tt>arc4random_uniform()</tt> function if it is available.
Freely-available source can be found at <xref target="A4USRC"/>.</t>
      </section>
      <section anchor="hardware">
        <name>Hardware</name>
        <t>Adam Shostack: when is the hardware RNG, washed through a hash function with
some other stuff, not sufficient? Is this more relevant for those <em>writing</em>
an RNG?</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This is an important document!</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Stepehen: Look at what RFC9846, appendix C1 says.  And others?</t>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <ul spacing="normal">
        <li>
          <t>Draft 1:
Fix typo's (ispell).
This document no longer obsoletes RFC 4086, but provides different guidance
for users of random numbers, not implementors thereof.
Remove suggestions to copy text from RFC 4086; this no longer obsoletes
that RFC but explains why this provides new guidance.
Add RNG and clarify PRNG definitions.
Various clarifying edits (Dan Wing).
Rewrite entropy definition (Marsh Ray).
Don't mention mouse as an entropy source; placeholder for Hardware RNG
considerations (Adam Shostack).
Give historic difference between /dev/*random (Stephen Farrell)</t>
        </li>
        <li>
          <t>Draft 0: Published, asked for DISPATCH and CC'd SAAG.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-informative-references">
      <name>Informative References</name>
      <reference anchor="OSSLCONFIG" target="https://github.com/openssl/openssl/blob/master/INSTALL.md#notes-on-random-number-generation">
        <front>
          <title>Notes on random number generation</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="RANDBYTES" target="https://docs.openssl.org/master/man3/RAND_bytes/">
        <front>
          <title>RAND_bytes</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="BCRYPT" target="https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom">
        <front>
          <title>BCryptGenRandom function (bcrypt.h)</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="ARC4RAND" target="https://man7.org/linux/man-pages/man3/arc4random.3.html">
        <front>
          <title>arc4random manual page</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="A4USRC" target="https://github.com/openbsd/src/blob/master/lib/libc/crypt/arc4random_uniform.c">
        <front>
          <title>arc4random_uniform source</title>
          <author initials="D." surname="Miller" fullname="Damien Miller">
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="GETRAND" target="https://man7.org/linux/man-pages/man2/getrandom.2.html">
        <front>
          <title>getrandom manual page</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="TWIST" target="https://en.wikipedia.org/wiki/Mersenne_Twister">
        <front>
          <title>Marsenne Twister</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="NISTDRBG" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf">
        <front>
          <title>Recommendation for Random Number Generation Using Deterministic Random Bit Generators</title>
          <author initials="E." surname="Barker" fullname="Elaine Barker">
            <organization/>
          </author>
          <author initials="J." surname="Kelsey" fullname="John Kelsey">
            <organization/>
          </author>
          <date year="2015" month="June"/>
        </front>
      </reference>
    </references>
    <?line 316?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1a23LbSJJ9r6+olWOj5V4Suth9Uz/MyJJlq9eWvaI8vRMT
E60iUCRrBKDYKEA02+F/35OZVQAo2TH7sPuwEeuIbpFEXbLycvJkFqbTqWpd
W9oTvfeu1temLnylr7pqbpuwp8x83th7PHt++OP3c4dfCp/XpsLwojGLdtoE
U/4xjU+nh0cqdPPKheB83W7XGHb58uZC5aa1S99sT/Q8Xyu3bk5023ShPT48
/OnwWJnGmhM9s3nXuHarNr65Wza+W+O309NX+ld8d/VSv6LfVGgh42+m9DVW
39qgQmWa9rffO9/acKJrr9buRP+t9flEB9+0jV0EfNpW9OHvSpmuXfnmROmp
0vjnakw6z/RbV5a24Z/kfOemcrYe/+6bpandH6bF4U70u7WtZ7PX/MRWxpVQ
yT+qP3v8HMIqw+CdLa4zPYOqRhtcu3w1/La7+OmdwZL6xuar2pd+6SzOcFnn
2Xg71v2fDQ/Ncl8pVfumwgr39kQpVy+GbzTr3Wz25uzd1cXlK/mudTL8FalO
+1o3Yv6aza+XtrYNC7SXJphmadsTvWrbdTg5OFi6dtXNae8DOXfZ/52Xfn5Q
mdDa5uDyanZz+uZNVhVPatpq6uupbDWVrabDVrzT9enV+Yu/3rycPZSUHvw2
32KNr4kE/wxZFIKMkGSoTP3sYJh+wNNfnF3/9f1N3CTt8eKs2a7bV7aOwbDo
6pwk0/vznJ5kq6dx84d7l9Y0dVa5vPHBL1rWi62nXTjYOCy14b/Pjg/M2h3I
Wgf1Yiqf4h8oQjTDO5xenz0nmR+qwTT582grnKszpV6bpf2aSjDkB1ZF6eru
I32d0vAgOhnWyp5lq7YqZefnH2bXZ1/f97euduRfCLGuyb+69QMHmYfiIDT5
jnOUbk7/5QeikMdbZHlcvI9c/jeNf1M47e0ErAj06uXNl9QHEf9ntHd80C+V
HQ/Ku/n1cnbzcNO3pgm2rq2+2Tg6+Nf2s3W2cXdubQtneF/6dvDWyuzf4mye
fIVtzq9fPIrnawuFV7YuOKI0lLgL7PpVH276QyBoPbdYs3I11nZ5GvzCtWmk
b74acPV9ue7mIaO52dLfH9AH+uVgtra5M+X7bl66nHcLByRyNnuf/Xh4OP3p
8LQ5ytbFIq4McUn6Xzoo6fjw6Lu9f2J3xtWXmX5hmruokcEdXpbGYZ2dZw+m
/pLpf7dlsNsHU3/xqzo9UWo6nWozDzBz3ip1s4K6gl6Ze6vzlamXttBGL5HA
Wl1YuJKrdbuyut14fM9NAWCFhnOrry/ONOXJidoT/dY2BH1tf+9cY2GsNrCh
Uhac7OmNCXpNygsrW2QKKG3m5XaiFyZ3pWuRE3TrE0pbvXLL1fR3uDNmRyRX
Aq9BI8PqjStsudXmHskDC1kC/MqHVpOz4DP+rLuWvGFdmpYiL2RK/bpy5SC8
Xjf+3tGhqg7Zq88xmA5RYKZgtavWJR8IS4EOYJhJIkP4duWCBkh3NALOdIe1
jC7cYmEb+sWssYXJVxNt6xzYYpa0TL8mHJF26rDPSA2mhAGK8dlYGltlYr/K
FUVplXqCHNo2vugY0P/fmv/3rPnkiZ6BOuZtBx34hQhwHgVgg47kWbgmkCEX
QAIYzlc2aqfcIinD1gR6IRpZDRyEFt6hQlAdr+zIqmXpN5g7h4A6AJhaHawQ
hHYFv8HCIepOlm+9EhEwfm4h0JqgxMGJyEPSrjDUf3PL8WbwpnbnZPgD92zq
oLAY/D6wTSaav5ktBCDZuuWqpUMastZeclJ9BoSGO4gSAPjLDt9YyrHFMnXh
alOWbH47aJt2Ljvypg2yPj9jrm6agqsAPfdwvobc0ap4CvLJJ7TvPXkYvrOg
56Qux9/JpDZqgHSE8mKa5kbLfsmmpDwLCxj2kha0AKrg51QUsGxLT/HN/hfD
ALqISuxqaIGFx56ZOi1L8TUrW4po0CWEIhfoyoIVC1XXCTKgjdZ+ZC0zsfHL
xqxXW3Hhl4RC6y3FI2aw2K7eib+Qg8vkdqKsDGVJsaypfFfzqqPRiK6P6wYA
JOuAN8EpMGSOvxNxFBdUV9/VfsOhzQ7jsV4D6tPA8vsS2aR+bdrW5EiaT2kt
HhlyW5vG+UzrC98o+9GQO0zSSqjECELJPLXfOYWZ+64VuRGx0De+QsWYumf0
vSk7q3KKlDq6NpZAtC9Kt2bvhEoYhXPvagAo65nOychS66QaDD3KDpWcdsMI
t0dx8ntHKqTHx999r/mEtHR4uBSeZoesLBzwVN3jqIKoDXkGCklfAkosZmCp
26tbHqpzSFDbe6iwsWmlyjcUX3jSD/OLZMJMkytbQGNORVkvPiFjIZaLWgIR
MmRw8dzgliDCYFB1W25VCTPDiWbdAj852nTkIQYS5RhgGph0DtWj3MLB09Cn
dJ61JYNTUDOWAEfV18o+VM3gmlWmf3UEGuOl+l05zHlYxBcFZRQup+xmIegr
74tYJLBP9tIKWIgXhD7vFXrRQJQVQGOD4J3o6JiqcOGOLFLblvoD4LoV5e5M
nUnIBtuQLUSUpDpYhlI5ywhqR/rlyCWzbWkJy8/m3rcTBc/BVpU1dZCYkbWm
ER2KXvTKEXySaueUHyti6i2SseoTVqbemnrbn6KXKgHN9dWrnbxPu0V0ZjDA
edNmUXW9IvRtU5C9bg/wIVhb3FLm/08k87w0oCBn7z8I3Kvb66vz61voYMkV
AxX46vT6LY+AYaC3OXA85buqK1uHqNYPNia3Aqa7hkNiA8iweu1DcHNBABza
O1gNJ6eU7Baa4EDQstJI09Amg4Cn0+36BiVznECpU00nSRgXqG6An4lviEZa
AhZoC3zoD8soVS49ktaqYu2l5M30Yxz5XT3aUu+Jp++Nc6yVvWWvCOZMCImB
JW1k6pIwlPIgEr4hrrNKjkWzozPASfPSc5aJWFrA0ygcVc4LF92aa6Hod9SJ
GLn+XMJpOBolwyKWZlaRS93Z7WiG6PCKUj4psaYPEQckliP2iw7paaZxkHok
MiCgsa0QBCQJiRvmqTkDINJDyn0JDDPKArrPAv/x4fKsJ1lGhFA7G7eeT5G3
5B4GayK9tFDyQPXmlqM1twBGOhWZpaYuEQewmTPdZMidi2FAfXtbPJAHe5y+
nE1fnb1VMr2XarJjEl6u1y6fENrNePLs8i+kDcA6Mai6FQbqAqsPx4o8QVBU
1C4OTkmMxCB8a3renFPStg0OdllTz2Hb6xKxKtMjDjJaEL4iG+TUTyISsXtA
RZLGYNCz2WuSGg+lftH7TO6Pv3vWE8UfsqOnCW5JFUffs+Opvdz7O2f3xEks
WLpeW4JQWxdMiyrwGfl9dwdopOVGAZHAp+AVDvEGvSVF0HIFyqAc+SrRYcE8
AAGKEg4Ov1578Q0FR6A6TLuWGWVjF5RGh6wKQFFrA0qJ+BCQHrEUxs20m/Jz
zgO8YWM2cUMmEw+amzG1cQB9qd8BRb549ZSiqrD3RNbJ1DuYQzZEJfkIcjjt
8wCCEbbWwF+pkoQeqQKwDSsxnKBGjW61o1nYrID/4n91e6KJu9EChK7YYSjd
aq++TLkE0ZhHbSPZw8SfOTekDbt67gzMQH3zOAG/Mo0p3R0VmPADn4MlCK0Z
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
Z4KDsHh3/k79F9h9F2wPLgAA

-->

</rfc>
