<?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.6.35 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-elegy-vrs-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.3 -->
  <front>
    <title abbrev="Verifiable Random Selection">A Verifiable Random Selection Process</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-elegy-vrs-00"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2023" month="June" day="22"/>
    <area>General</area>
    <workgroup>NomCom Eligibility Update</workgroup>
    <keyword>next generation</keyword>
    <keyword>crypto</keyword>
    <abstract>
      <?line 47?>

<t>A process for performing random selection without bias is described.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinthomson.github.io/vrs/draft-thomson-elegy-vrs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-thomson-elegy-vrs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        NomCom Eligibility Update Working Group mailing list (<eref target="mailto:eligibility-discuss@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/eligibility-discuss/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/eligibility-discuss/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/martinthomson/vrs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>On occasion, a group of people might agree that it is necessary to select from a
set of options, but cannot agree on a selection.  In such cases, a random
selection might be acceptable, but any potential for bias might not be.</t>
      <t>A process for selection in way that is verifiable and not subject to bias or
influence by any party can be useful in such situations.  This document
describes one such process.</t>
      <t>The IETF Nominating Committee <xref target="NOMCOM"/> is an example of where a
random selection is necessary.  Ten people are drawn from a larger pool of
eligible volunteers.  As the selected group is entrusted with considerable
responsibility, there is a need to avoid any risk of bias in the outcome.</t>
      <t>This document describes a process that is an alternative to RFC 3797
<xref target="RFC3797"/>.</t>
    </section>
    <section anchor="process">
      <name>Process</name>
      <t>A random selection process might be invoked to select a subset of one or more
items from a longer list of options.  The purpose of this process is to select
uniformly at random with minimal risk that the selection is influenced by
anyone, including those responsible for executing the process.</t>
      <t>The process for random selection is as follows:</t>
      <ol spacing="normal" type="1"><li>Agree to use this process.</li>
        <li>Appoint a facilitator, who will execute the process.</li>
        <li>
          <t>The facilitator performs the following in any order:  </t>
          <ol spacing="normal" type="a"><li>Publish the list of options, along with labels for each option; see
<xref target="labels"/> for details.</li>
            <li>Choose and publish details for a source of randomness that will become
available at some future time; see <xref target="seeds"/>.</li>
            <li>Generate and publish a one-time code; see <xref target="otp"/>.</li>
          </ol>
        </li>
        <li>Wait for all randomness to become available.</li>
        <li>Publish the next one-time code; see <xref target="otp"/>.</li>
        <li>Generate a pseudorandom key by extracting randomness from the sources and the
one-time code; see <xref target="extract"/>.</li>
        <li>Run a pseudorandom function (PRF) using the generated key and taking each
label as input; see <xref target="expand"/>.</li>
        <li>Sort the output.</li>
        <li>Perform selection.</li>
      </ol>
      <t>Options are selected by taking from the sorted list in order, starting from the
value with the lowest lexical value.</t>
      <t>There might be constraints on selection, such as requirements on diversity
within the final selection, or disqualifications of individual options (see
below).  If any option cannot be selected, skip that option and select the next
option from the list.  Options can only be skipped as a result of known
constraints on selection, disqualifications, and any factor that is not
potentially subject to external influence.</t>
      <t>An options might become unavailable after selection for reasons that are
unexpected or could be subject to external influence.  For instance, when
selecting volunteers, a selected person could become unavailable through illess
or other change of circumstance.  In that case, the complete set of selections
is produced, applying any constraints as above.  After all selections are made,
any options that have become unavailable are publicly noted as disqualified from
selection and the process is iterated.</t>
      <t>Subsequent iterations start at the key generation stage (Step 5 above), using
the next one-time code; see <xref target="otp"/>.  Using a one-time code avoids having to
wait for new randomness to become available, but might give the facilitator some
influence over the outcome.  Alternatively, the entire process can be
repeated. <xref target="substitution"/> explores the consequences of this choice in more
detail.</t>
      <t>This process does not describe how the list of options is assembled, or how
constraints on selection are agreed.  This document only describes how a random
selection is made.</t>
      <section anchor="labels">
        <name>Labels</name>
        <t>Options require labels.  This process requires that each option be given a
unique and unambiguous label that is a sequence of bytes.</t>
        <t>Labels could be anything, but using UTF-8 encoded Unicode strings
<xref target="UTF8"/> without leading or trailing whitespace can be most amenable to
use in many contexts as they can represent many concepts clearly and in an
accessible fashion.</t>
        <t>It should be clear what option each label corresponds to.  Names are often
excellent labels.  Any options have the same name can have extra text added to
disambiguate them.</t>
        <t>The use of Unicode strings allows the possibility that some strings appear to be
equal when rendered, despite having very different character sequences.  Such
differences are significant; a single choice of encodingneeds to be made for
each label prior to the release of randomness.</t>
        <t>The facilitator announces the set of labels that will be used prior to
any randomness being available.</t>
      </section>
      <section anchor="seeds">
        <name>Randomness</name>
        <t>A source of randomness needs to be chosen.  This source needs to produce
sufficient entropy both to ensure that all possible selection outcomes are
equally likely (see <xref section="3.3" sectionFormat="of" target="RFC3797"/>) and to make pre-computation of
options infeasible (see <xref target="security"/>).</t>
        <t>The randomness source might be assembled from multiple discrete sources.  Each
source and the date at which the entropy will be sampled needs to be announced.</t>
        <t>A process for turning the randomness from each source into a single sequence of
bytes needs to be specified clearly.  This too should be announced.  <xref section="4" sectionFormat="of" target="RFC3797"/> describes a method for the combination and canonical encoding of
multiple sources that each produce multiple integers.</t>
        <t>Public lotteries are a good source of entropy, often providing in excess of 20
bits of entropy each.  Choosing three or four different lotteries likely
provides sufficient entropy.</t>
        <t>The facilitator announces which lotteries are to be used, the date of the
lottery, and the encoding process.  This announcement needs to occur before any
of the lotteries are run.</t>
      </section>
      <section anchor="otp">
        <name>One-Time Codes</name>
        <t>A one-time code provides a facilitator with the ability to generate substitute
selections in case of unexpected unavailability of one or more options.</t>
        <t>The facilitator selects a secret sequence of bytes.  This could be a string that
is UTF-8 encoded as is done for labels.</t>
        <t>The facilitator then iteratively applies SHA-256
<xref target="SHA2"/> to this sequence multiple times.  This
generates a hash commitment.  <xref target="RFC1760"/> describes this process for use in
generating one-time passwords.</t>
        <t>Concretely, if <tt>H(secret)</tt> is the process of hashing once, <tt>H^2(secret) =
H(H(secret))</tt> is hashing twice.  <tt>H^n = H(H^{n-1}(secret))</tt> is hashing <tt>n</tt>
times.</t>
        <t>How many times the secret is hashed depends on the facilitators judgment of the
need to find substitutes.  Hashing many more times than is expected to be
necessary will ensure that substitutes can be produced immediately.</t>
        <t>The facilitator publishes <tt>H^n(secret)</tt> and <tt>n</tt> prior to any randomness being
available.</t>
        <t>Once randomness is available the first iteration of the selection process uses
<tt>H^{n-1}(secret)</tt>, or the preimage of the original published value.  In the
<tt>i</tt>-th iteration of the section process they use <tt>H^{n-i}(secret)</tt>, or the
preimage of the last published value.  At each iteration of the process, the
facilitator publishes the one-time code they use.</t>
        <t>The chosen secret cannot be used.  If the process iterates enough times to reach
that point, new randomness and a new one-time code will need to be generated.</t>
        <t>After the selection process is complete, the facilitator publishes their chosen
secret.</t>
      </section>
      <section anchor="extract">
        <name>Entropy Extraction</name>
        <t>Once randomness is available, the facilitator constructs a byte sequence from
the randomness as described in <xref target="seeds"/>.  They also obtain the one-time code as
described in <xref target="otp"/>.</t>
        <t>The <tt>HKDF-Extract</tt> function (<xref section="2.2" sectionFormat="of" target="HKDF"/>) with a hash function of
SHA-256 is used to extract entropy and produce a pseudorandom key (or PRK).  The
<tt>salt</tt> input is set to the butes of the one-time code, the input keying material
or <tt>IKM</tt> is set to the bytes from the randomness sources.</t>
        <sourcecode type="pseudocode"><![CDATA[
PRK = HKDF-Extract(salt=one-time-code, IKM=randomness)
]]></sourcecode>
        <t>This produces a <tt>PRK</tt> value.</t>
      </section>
      <section anchor="expand">
        <name>Pseudorandom Function</name>
        <t>The <tt>HKDF-Extract</tt> function (<xref section="2.3" sectionFormat="of" target="HKDF"/>) with a hash function of
SHA-256 is used as a pseudorandom function.  The pseudorandom key input, <tt>PRF</tt>,
is taken from the previous step (<xref target="extract"/>); the label for each option is used
as the <tt>info</tt> input; and, the output length, <tt>L</tt>, is 32 (measured in bytes).</t>
        <sourcecode type="pseudocode"><![CDATA[
position = HKDF-Expand(PRK, info=label, L=32)
]]></sourcecode>
        <t>This produces a value, <tt>position</tt>, that can be sorted to produce a final
ordering.</t>
      </section>
      <section anchor="announcements-and-timing">
        <name>Announcements and Timing</name>
        <t>A facilitator needs to communicate clearly throughout the process.</t>
        <t>Announcements regarding labels, randomness, and one-time codes -- including the
encoding of each -- need to be made prior to any randomness becoming available.
A single announcement for all of this information might be sufficient.</t>
        <t>Once randomness is available, a single announcement can include the revealed
one-time code and the result of that iteration of selection.</t>
        <t>For all announcements, allowing some time for validation and questions is
advisable.  If it takes time to confirm that an option is available for
selection, the next iteration of the process cannot be started until that time
passes.</t>
        <t>When publishing values, the facilitator can use hexadecimal encoding to produce
text strings that might be easier to use.</t>
      </section>
      <section anchor="encoding-and-sorting">
        <name>Encoding and Sorting</name>
        <t>For the sorting and selection process, using hexadecimal strings might also help
simplify handling.  Hexadecimal strings sort identically to the underlying byte
sequence.  If the hexadecimal strings are printed one to a line, with the input
label (or name) after it on the same line, that can make it easier to identify
options in the sorted output.</t>
        <t>The sample code in <xref target="code"/> uses this method.  It does not sort its output, as
that can be performed by a standard <tt>sort</tt> tool.</t>
      </section>
      <section anchor="hash-function-choice">
        <name>Hash Function Choice</name>
        <t>This process uses SHA-256 as its hash function for both one-time codes (<xref target="otp"/>)
and the KDF (Sections <xref format="counter" target="extract"/> and <xref format="counter" target="expand"/>).  A different hash function
could be used, but then it would not be this process.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Low entropy randomness in a selection process could allow an attacker to compute
all possible outcomes.  Then, the attacker might be able to select options (or
labels for options) that improve the odds of an outcome favorable to them.
Given the use of one-time codes in this process, the only attacker who is in any
position to take advantage of this is the facilitator.</t>
      <t>An appeals process or similar can help safeguard against a facilitator that
might be untrustworthy.</t>
      <section anchor="substitution">
        <name>Facilitators and Selecting Substitutes</name>
        <t>A facilitator has a limited ability to influence the selection process. This
influence depends on the facilitator being able to cause a selected option to
become disqualified somehow.</t>
        <t>For example, if the process selects from volunteers for a task, the facilitator
might need to check that selected volunteers are available to perform that task.
A facilitator will know who will be selected as a substitute, if that becomes
necessary.  If the facilitator prefers that a substitute is selected, they could
attempt to force the use of a substitute, such as by not investing enough effort
in confirming availability.</t>
        <t>This process is not robust against this attack; it depends on some amount of
trust in the facilitator.  If concerns exist about the impartiality of the
facilitator, the entire process can be re-run if an option becomes unavailable.
However, this adds another period of waiting for fresh randomness, which could
be too slow.  This is therefore a question of balancing a small dependency on
the facilitator against expedience.</t>
      </section>
      <section anchor="secrecy-for-one-time-codes">
        <name>Secrecy for One-Time Codes</name>
        <t>The facilitator needs to keep the value they choose for generating one-time
codes a secret until the process completes and all selections are made.</t>
        <t>An attacker that obtains this secret -- or any unused one-time code -- gains the
foreknowledge available to the facilitator described in <xref target="substitution"/>.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="HKDF">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications.  The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions.  This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="SHA2">
          <front>
            <title>Secure Hash Standard</title>
            <author fullname="Quynh H. Dang" initials="Q." surname="Dang">
              <organization/>
            </author>
            <date month="July" year="2015"/>
          </front>
          <seriesInfo name="National Institute of Standards and Technology" value="report"/>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CSS3" target="https://www.w3.org/TR/2022/REC-css-color-3-20220118/">
          <front>
            <title>CSS Color Module Level 3</title>
            <author fullname="Tantek Çelik">
              <organization/>
            </author>
            <author fullname="Chris Lilley">
              <organization/>
            </author>
            <author fullname="L. David Baron">
              <organization/>
            </author>
            <date year="2022" month="January" day="18"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
        </reference>
        <reference anchor="NOMCOM">
          <front>
            <title>IAB, IESG, IETF Trust, and IETF LLC Selection, Confirmation, and Recall Process: Operation of the IETF Nominating and Recall Committees</title>
            <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
            <author fullname="R. Hinden" initials="R." role="editor" surname="Hinden"/>
            <author fullname="J. Livingood" initials="J." role="editor" surname="Livingood"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>The process by which the members of the IAB and IESG, some Trustees of the IETF Trust, and some Directors of the IETF Administration LLC (IETF LLC) are selected, confirmed, and recalled is specified in this document. This document is based on RFC 7437. Only those updates required to reflect the changes introduced by IETF Administrative Support Activity (IASA) 2.0 have been included. Any other changes will be addressed in future documents.</t>
              <t>This document obsoletes RFC 7437 and RFC 8318.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="10"/>
          <seriesInfo name="RFC" value="8713"/>
          <seriesInfo name="DOI" value="10.17487/RFC8713"/>
        </reference>
        <reference anchor="RFC3797">
          <front>
            <title>Publicly Verifiable Nominations Committee (NomCom) Random Selection</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="June" year="2004"/>
            <abstract>
              <t>This document describes a method for making random selections in such a way that the unbiased nature of the choice is publicly verifiable.  As an example, the selection of the voting members of the IETF Nominations Committee (NomCom) from the pool of eligible volunteers is used.  Similar techniques would be applicable to other cases.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3797"/>
          <seriesInfo name="DOI" value="10.17487/RFC3797"/>
        </reference>
        <reference anchor="UTF8">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems.  The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo.  UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values.  This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC1760">
          <front>
            <title>The S/KEY One-Time Password System</title>
            <author fullname="N. Haller" initials="N." surname="Haller"/>
            <date month="February" year="1995"/>
            <abstract>
              <t>This document describes the S/KEY* One-Time Password system as released for public use by Bellcore.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1760"/>
          <seriesInfo name="DOI" value="10.17487/RFC1760"/>
        </reference>
      </references>
    </references>
    <?line 345?>

<section anchor="code">
      <name>Sample Code</name>
      <t>This section includes simple python code for running this process.  Separate
scripts exist for running selection (<xref target="code-selection"/>) and managing one-time
codes (<xref target="code-otp"/>).</t>
      <section anchor="selection">
        <name>Selection</name>
        <t>Values for the randomness and one-time code are provided as the first and second
arguments to the python script in <xref target="code-selection"/>, which implements steps 6
and 7 of the process in <xref target="process"/>.</t>
        <figure anchor="code-selection">
          <name>Implementation of Pseudorandomness</name>
          <sourcecode type="python"><![CDATA[
#!/usr/bin/env python3
import sys

def hmacsha256(k, v):
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives import hashes, hmac
    ctx = hmac.HMAC(k, hashes.SHA256(), backend=default_backend())
    ctx.update(v)
    return ctx.finalize()

def extract(salt, ikm):
    return hmacsha256(salt, ikm)

def expand(prk, info):
    return hmacsha256(prk, info + bytes([1]))

# The canonical encoding of the randomness.
ikm = sys.argv[1].encode('utf8')
# This is the one-time code.
salt = bytes.fromhex(sys.argv[2])
prk = extract(salt, ikm)

for line in sys.stdin:
    label = line.strip()
    order = expand(prk, label.encode('utf8'))
    print(f"{order.hex()} {label}")
]]></sourcecode>
        </figure>
        <t>This script is intended to be used with a separate sorting tool as follows:</t>
        <artwork><![CDATA[
$ ./select.py "$randomness" "$otp" | sort
]]></artwork>
      </section>
      <section anchor="one-time-codes">
        <name>One-Time Codes</name>
        <t>The script in <xref target="code-otp"/> implements the generation of one-time codes from a
secret.</t>
        <figure anchor="code-otp">
          <name>Implementation of the One-Time Codes</name>
          <sourcecode type="python"><![CDATA[
#!/usr/bin/env python3
import hashlib
import sys

count = 25
input = bytes.fromhex(sys.argv[1])
# Or, for a hard-coded ASCII string: input = b"secret"

print(f" 0: {input.hex()}")
x = hashlib.sha256(input)
for i in range(1,count):
    print(f"{i:>2}: {x.hexdigest()}")
    x = hashlib.sha256(x.digest())

print(f"{count:>2}: {x.hexdigest()}")
]]></sourcecode>
        </figure>
        <t>This script can also be used to verify the value revealed by the facilitator.
The value revealed by the facilitator at each iteration of the process can be
passed to this script, which should produce all previously revealed values.</t>
      </section>
    </section>
    <section anchor="example-usage">
      <name>Example Usage</name>
      <t>A committee is tasked with painting a building (which may or may not be a bike
shed) and have concluded that three different colors are needed for walls,
doors, and trim (eaves, gutters, and so forth).  They managed to agree that the
blue or anything close to blue was undesirable, but could not otherwise
agree. Ultimately the group agreed to follow a random selection process.</t>
      <t>The list of color names from CSS level 3 <xref target="CSS3"/> was agreed as the basis for
selection, with "transparent", "grey", "cyan", and "magenta" being disqualifed
on the basis of either being not a color or an alias of another name.  A list of
those colors that were "blue" enough to be disqualified were agreed.</t>
      <t>The facilitator chose a secret phrase "totally not a bikeshed", encoded it in
UTF-8, and published the output of 10 iterations of SHA-256 in hex:
950ea08d8d5fd3ae415b9967aba7a48aba39ca62a4d98f2e7fe25cb1b8f8c488.</t>
      <t>The facilitator announced the exact process for public randomness, including the
use of three different lotteries on a future date and how the results would be
encoded, using the method from RFC 3797. After waiting, the lotteries finally
ran to produce the unlikely string of "1.2.3.4.5.6./1.2.3.4.5.6./1.2.3.4.5.6./".</t>
      <t>The facilitator revealed the output of the 9th hash iteration
(5346f2efb5397a6788fc1f1d9c05c6d3f2abe9b7d16d8592a3695b6dbe9f2456) and ran the
selection process, producing the following (including only the first few lines,
with the hashes truncated for formatting reasons):</t>
      <artwork><![CDATA[
002ed527ae0a44a86c205d1cdba... lavenderblush
03f710be2b61a6f9c3f89aa5ab5... blue
08bab81380d7f0769cecf9969a8... darkgoldenrod
0c26494fa81f3aed8a9f66e77b7... mediumvioletred
0e1af5d1ccfd44de075cc0bb6d5... bisque
13a07cc9abf3b737e49a62b0634... lightpink
]]></artwork>
      <t>As blue was disqualified by prior agreement, the allocation was: walls
"lavenderblush", doors "darkgoldenrod", and trim "mediumvioletred".  However, upon an
attempt to acquire the "lavenderblush" paint, the supplier was unable to source
enough to cover the needed area; a substitute was needed.</t>
      <t>The facilitator revealed the output of the 8th hash iteration
(2f70f884997ce80771adbefbbbc6c71a1b921da71896c25ca0f64966bfd0c8ce), producing a
new list of selections as follows:</t>
      <artwork><![CDATA[
00d1c59a9f1b581060a9e732e91... aqua
02b514b0b1807bfe086db524f40... darkgray
0337add95eac62a356b020a273a... cornflowerblue
]]></artwork>
      <t>The first option of "aqua" was selected for use on the walls. Concerns were
raised about "aqua" being basically blue and that it should have been
disqualified instead of "cyan", but the outcome of the process was not in
dispute as the qualified colors were very clearly specified as part of the
agreed process and that process had been strictly adhered to.</t>
      <t>Only murmurs about the paint supplier's familial relationship with the
facilitator would mean that the color scheme did not last long, though maybe
that was a consquence of strident complaints from the neighbors.</t>
    </section>
    <section anchor="rfc-3797">
      <name>RFC 3797</name>
      <t>This document describes an alternative process to that described in RFC 3797
<xref target="RFC3797"/>.  It makes no effort to replace RFC 3797, however it is worth
noting certain key differences.</t>
      <t>This process allows for more rapid substitution through the use of a one-time
code.</t>
      <t>This process is marginally more robust against the inclusion of disqualified
options.  The process in RFC 3797 critically depends on the number of options
being known. See <xref section="5.1" sectionFormat="of" target="RFC3797"/> recommends that any option found to
be invalid remains in the list once the list is fixed.  This is because RFC 3797
selects from an ordered list by calculating an index from its PRF output, modulo
the number of remaining options.</t>
      <t>In comparison, this process sorts the output of its PRF, with each output being
dependent only on the public randomness, the one-time code, and the label for
the option.  For the process in this document, only labels need to be fixed
prior to learning the randomness, not the composition of the entire list of
options.  This makes it possible to add or remove options without affecting the
ordering of other options, if those changes can be justified.</t>
      <t>This process might be considered simpler than RFC 3797, even with the use of
one-time codes for substitution.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The basic underlying idea here comes from <contact fullname="Paul Hoffman"/>.  <xref target="RFC3797"/> and
the one-time code idea are both the work of <contact fullname="Donald Eastlake"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
A59w0HmAHD47IkJTqsHnvjRNEr2jZvfEbeuuUyJu8dNiuiAdooEEajkyOl/d
DAcqctGB9s5JgFTZaNoGonCh3iGkI7XwE/Dm/Yc/nsq+1F1pUpDEJWfNgaTy
aUvA/sZbYXe7wm35BnOKkyN8YFIqvt29++P3d8PJGG42FdNnSJt889///ndH
Ly2iQCX59g7rTojYl56UiZCCxV62053SLG2NhbhACnCHye6aMjUp2/suY954
FpO+cb39nxDc8v8jOK4HH20c+NbeUHDM7jHt5M3dmIBHhYynU4SG63pIqG5S
UrXupNOrOP3G+TLKTAfNKE+QkgqFvqOzDne+BYHVx512g05ttqm2IOI7uEx8
uVzokx3SKkQqVnuW8ulzUSLpS3i1Rp7E5BMIZcyHj14ybWP93cvl4gsSZNlh
ZT/V3diXcDkeuj5Gm5MS1KSwobilARV1cr/p4F7xgcCvFOwAWrv+o4HEBJVq
yk8q25RoXMGZqkT9xmJ/9sJuTMHgW3DguKP3gtB7ZlXqyaTXW0U23GZEIrXJ
pOuaufTw5Rge5rtBLeDGp4I9+O8bc75y2RzG6Z6raBOXf4AGxm3C2VuFJCW7
s64s8mANUl41cKUucWmbJe5QSSfUdjtdbxzx3bW4Des6uFxK4ulpm1CjJGpz
T0SE0pdXlYkekpL5xFE2qdjESvmYNSEDyNm5WkbWsaAWCVEdqNPHaYrkX0IK
3SYUFeI5makSV/eklRVha/aPP1PO4AIpl7nIJMojoQ+0EczZ2k/Qj5B7/I0i
dao2XL3zRTZerxE2lUps4druTXh2UxDjqBHJVvPGwbZSHnT6ZR1s4HoGPYr8
wu74EIXXrU33qkyAIZL4AB+aRVR0JSh95DtaUCd01JBqB+nBR5qaioLSoyF3
pHzYb6HTMSq411JQIYGNks0JuTuddmiyVHaKStwohVGqiJ66ZllS+XSBi6Xy
ZeOguDiVVB22CuHxoVOf6vZjm/bux60vDYl1MLagn5CqEZAWg5UKC+2wajsK
wiCqX/BkYwIpXZfpTjxIX5jSWvAb7krf0Yd3VPVJneQpk2lj5Cuuhg76GEyL
D3KUBFflIAjyySsqCg583onDSqfKWz4ihD659Rn/09O/NpGMtYsfSFOcUMxN
p+zSW1E1ObuUSgLx1pR260d+5QxvcKpEvdC3rjSoX/kDSY6WF03RUKnvkEp6
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
6mJmzWwdraOLOFoaez6/CK6uLlcmMCtzvsb/llehuVyY8+hqHS/sKraLizCY
B+t4HZ6v1185OOXOPn2ixmjvfqwcD+vmh/2GS+1v0/XtrT3/xFdT3cWpyF+M
8me2pWdRuvJi4Po3VClo7wH503Ckqv5u4dTdGXCZ7Hhw5oqhXnqge5rdDpdU
u91BSXcqCbSP5tPFdDk9n15ML6dnX/5ldIR/jePri5J+u4JlcH21Eao6uVie
X0IwcXCxvFqZy9V6HYfzeB5dhbOL8DJaxgsgn6tgFc0vo/XF1cIsL68ugssI
D+PF+cWlODze1rZzzKutI8pWPevaa3knrdS4zNjmLbF9ZBQHP9gU7gV3018Z
yEK+gcWVAm5xyY0wudty6gDRbLaw0cViZezMnJ+b9WW4mF1E8zAKzHQ6Bfx7
4IPHML9yq2bLeDWfBXYRXM7NZXwVLuP1lTEXJrigwWSjarYOTLCeL9ezaBXP
VpdXoQ1jaPqVWdOYyBT3mzyNbIbdqlm4uDy/Oo/Neh7DKKK1uYovL+1qFaxo
MJ32qXcIVMjjC3ibmZ2bmKgL4+j8PLKz1UUYzgIwWdYnh2DVfGlmqzC8MkG8
DFbLlT2/gmEFs8vlOW+JinX7JLsXiHdTtp6951EQjaXbyF6F8IGrS0MuclGJ
vrmWQKRGPU7BhXBg0qPefkedQDUabG5ErR9fAar3uRyKbwttJpS7B0TCYDGJ
wUJdWfPZusJFqqZkzgcPVOs/w+aqiIup9McovumX/2gKefvPWc/6iPUs4tUs
Xq/Pr65WoV3PVqu5gWXEQRCElyF+mQdXi3lkVvP1FVTwIjSzGJpxeRnE0Sxc
h3QVp7UPozLW/HJwfek53p/NoC0XV1CreXCxns8uZ+bKrpYLezUnXTAQt5ot
gov5eTAL5qAriO1sDaO9WJzH57NGYwtzgPYvVyaKri6AyOColxeXwWwxM4vV
kk0lzIsspruCBduBa+x7U3WFP3JZtOiImduUcP2JQxdOWaWmVPSRaiQFNzjE
hA9TcE3STSJxlqKvtAVZk6W1JH+bwEE/d+vKZqqn4lTBs4brij7gu8ZR0yAZ
wE1WCS7k0kzUyfEQo53VBW+OyHw7wZ8kaA9d4xuqp/pKqgMrfpFmA/7B1kRM
PTv+sKJWS0R1TMJQ3KDHk11d4N+yU7Nlq2gM4ndQDbOD+tIlcJtKpN4m+6bl
2TvCJkFtZ03WQEMHZMpwa7mzIIiPD83RLWgyPzYuwF0EQ4EuXJqn01ntSVva
QiSwFghbbjM151oyC+cU5IVD4c11/C9f6u9f4W9O/+VCdq++ePxyP/dRd9z7
z3JXj5cjdaAOJPuvxhT4yTu5P3nBHSQFFjBItgUfFqOzO51rJsPivbsFE/vD
yoXZJ52TpFwecNcbex2FXlHwSEdgh9RWYIObd9gdsIJ8SmeCXSNQg78y0Nbo
/M41WOj77oPelPyRn87NNSUWyVdep/q2d5/jYjrv3+cAj92fVvHNl/a+bgxo
F0kni7omdJIDw3dcZHbdC/F/vq8mt5oJP31q78ElfDKG22SN9HsNLuOuQftr
0QFd20rDOjXugAPdM7afZDD1ud9/eNP02Hf0x2ly1WeEEMlgpTmK/i5jbTdF
UspBkY74qNhSDoKIW8ilKHKCS17KWd3mDy8JIHLCOIJ3j5zm84335oQY0y+0
uiu7g1pt1bW9sSzp+s2d40nMd9WcTyKXd+TWypidhniTXdMYdk7W9Y98KtRV
TFZystGkatvmhAoivpEMplOT23fE/a0+A0sM/d+maA6Hsbpy9tX8HQfuGHLi
xbeIm97VX2FGbCVDo+tde09EgaRvwE2UrOM2LLXTG3gqNq2GxTByrB03IO7v
JvRtFK6pqadrUTMbvRzFJi3tyB1d5ADYPQwDiozm+/nSZ2P1fXp6em/qFCgr
jncm+8zOr+sLSTfUM5WRyaj6INe8KD7nBf8BFsz4bQ6/E+nXCAMpBESTqv8D
M1zzTcZMAAA=

-->

</rfc>
