<?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-00" category="bcp" consensus="true" submissionType="IETF" obsoletes="4086" 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-00"/>
    <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="05"/>
    <area>Security</area>
    <workgroup>SAAG Working Group</workgroup>
    <abstract>
      <?line 67?>

<t>Things have changed a great deal in the two decades since RFC 4086,
"Randomness Requirements for Security," was published.
In addition, as more IETF protocols use cryptography, the need
for good-quality randomness has greatly increased.</t>
      <t>Copy from 4086 ?</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.
The cryptographic community has greatly advanced its knowledge of
the requirments and desirable properties for random number generators,
the algorithms that underpin them, how they may be used, and how they have
been attacked.
In addition, as more IETF protocols use cryptography, the need
for good-quality randomness has greatly increased.</t>
      <artwork><![CDATA[
Copy some text from 4086 ?
]]></artwork>
      <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 standrad 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>Entropy is a property, not a value, and it means how hard it is to guess the
value. For example, a coin flip as low entropy because there are only two
choices and a four-digit PIN has no more than 10,000 possibilities. On the
other hand,  256-byte SHA3 (ref needed) digest has very high entropy because
it is extremely hard to predict.</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 hardware
timings, mouse movements (if properly scaled) and the like -- things that are
generated from hardware.
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 unpredicable "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. Nonces 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 are
both statistically independent -- knowing one bit provides no information
about the value of any other bit -- and unbiased -- no value is more
likely to occur than any other value.
See <xref target="uniform"/> for concerns about bias.</t>
      </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="pseudo-random-number-generator-prng">
        <name>Pseudo-Random Number Generator (PRNG)</name>
        <t>An older term for DRBG, although 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 only by
ensuring that a RBG is reseeded between consecutive requests, provided that
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> describred 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.
The primary difference is that the first will block if the kernel
believes there is not enough entropy in the seed material.</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 atistical distortion that happens when mapping a large
random 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-avaiable source can be found at <xref target="A4USRC"/>.</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>This document has no IANA actions.</t>
    </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 284?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
iOrUu8t34n8AbWfyW+QoAAA=

-->

</rfc>
