<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.33 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-hoffman-genarea-random-candidate-selection-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Candidate Selection">Simple Random Candidate Selection</title>

    <author initials="P." surname="Hoffman" fullname="Paul Hoffman">
      <organization>ICANN</organization>
      <address>
        <email>paul.hoffman@icann.org</email>
      </address>
    </author>

    <date year="2023" month="May" day="29"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 34?>

<t>This document describes a process to randomly select a subset of candidates from a larger set of candidates.
The process uses an unpredictable value can be trusted by all candidates.
It uses randomizing based on a hash function to make the description of the process easy to understand.</t>

<t>This draft has a <eref target="https://github.com/paulehoffman/draft-hoffman-genarea-random-candidate-selection">GitHub repository</eref>.
Issues and pull requests can be made there.</t>



    </abstract>



  </front>

  <middle>


<?line 43?>

<section anchor="introduction"><name>Introduction</name>

<t>It is common to need to pick a subset of people from a larger group using a random selection method.
This is often done on an ad hoc basis, but for some selections, a more formal process is needed,
particularly if the people in the larger group don't all trust the administrator of the selection process to be unbiased.</t>

<t>This document gives a simple, understandable process that can be done for groups and subsets of arbitrary size.
The process is purposely transparent and reproducible.
It works with any group of entities that nave names: people, companies, locations, dates ("18 August 2022"), and so on.</t>

<t>As a simple example, a future leadership committee will have a fixed size.
The members of the committee will be selected from a large pool of volunteers. 
Someone is in charge of collecting the names of the volunteers and making a randomized selection among them for the leadership committee.
They can use the process in this document to make that selection in a way that is both provably random and understandable.</t>

<t>Due to the formatting used in this document, the reader is encouraged to read the HTML version, although the text version is still usable.</t>

<section anchor="earlier-work"><name>Earlier Work</name>

<t>RFC 3797 <xref target="NomCom"/> defines the process that the IETF uses to select the NomCom each year.
It uses a random input to select from a list of candidate names in ASCII using modulo aritmetic the position of the names in alphabetical order.
That process has some significant pitfalls described in the document updating RFC 3797, <xref target="NomCom-bis"/>.
The process in this document uses a very different selection process to avoid those pitfalls.</t>

<t>After this document has passed IETF review, the IETF might consider using the process described here as a replacement for the process in RFC 3797,
but the document is valuable even if the IETF does not want to change the NomCom process.</t>

</section>
</section>
<section anchor="overview-of-the-process"><name>Overview of the Process</name>

<t>A few terms are used throughout this document:</t>

<dl>
  <dt>ceremony:</dt>
  <dd>
    <t>The act of collecting names, making the random selection, and publishing the entire process.</t>
  </dd>
  <dt>ceremony administrator (CA):</dt>
  <dd>
    <t>The person who performs the steps of the ceremony.</t>
  </dd>
  <dt>candidate:</dt>
  <dd>
    <t>The person, organization, or other namable entity that is possibly being selected during the ceremony.</t>
  </dd>
  <dt>candidate name:</dt>
  <dd>
    <t>The name selected by each candidate for the selection process.
The candidate name is expressed as a string of Unicode characters <xref target="Unicode"/> in UTF-8 format <xref target="UTF-8"/>.</t>
  </dd>
  <dt>difficult-to-predict number (<em>D</em>):</dt>
  <dd>
    <t>A publicly-visible number that is not known before the pool of candidates has been closed. 
Note that this is different from what is normally called a "random number".
True random numbers are designed to be  nearly impossible to predict, whereas <em>D</em> in this process has weak (but sufficient) randomness.</t>
  </dd>
</dl>

<section anchor="basic-steps"><name>Basic Steps</name>

<t>The steps in a ceremony that follows this process is given here.
See <xref target="specifics"/> for more detail on the steps.</t>

<t><list style="numbers">
  <t>The CA starts the ceremony by performing the following steps at the same time:  <list style="symbols">
      <t>Announces an end date for when the pool will be complete.</t>
      <t>Announces a later date on which the difficult-to-predict number, <em>D</em>, will be selected.</t>
      <t>Announces the source where <em>D</em> will be found.</t>
      <t>Announces the number of candidates that will be selected (called <em>S</em>).</t>
      <t>Opens up the pool of candidates for submission.</t>
    </list></t>
  <t>Candidates submit their names to the pool until the closing date.</t>
  <t>On the closing date, the CA publishes the set of candidate names with the hexadecimal value of the UTF-8 encoding for each candidate name.</t>
  <t>On the date for selecting <em>D</em>, the CA gets <em>D</em> from the announced source.</t>
  <t>The CA calculates the hashes used to make the selection.
They concatenate each candidate name with <em>D</em> (name first, then <em>D</em>), uses the SHA-256 hash function <xref target="SHA-2"/> on the new string, and records the value of the output as a UTF-8 string.</t>
  <t>The CA arranges the set of hash values in alphabetic order from highest to lowest.
They then select the <em>S</em> candidates from the top of the list (that is, the names whose hash values are largest).</t>
</list></t>

</section>
</section>
<section anchor="specifics"><name>Specifics for the Process</name>

<section anchor="start-of-ceremony"><name>Start of Ceremony</name>

<t>Much of the trust in the selection process is based on the CA not being able to influence the selection.
If the CA can choose, or influence, the value of <em>D</em>, they can establish the ordering of the differences of the integers.
Similarly, if one or more of the candidates can influence the value of <em>D</em>, they can increase their chance of being selected.</t>

<t>To make the process trustworthy, the value of <em>D</em> must be unrelated to the CA or the candidates, and it must be selected after the list of candidates is completed
There are many sources of such values: stock market closing values, numbers chosen for large public lotteries, and so on.
Section 3.1 of RFC 3797 lists many such sources.</t>

<t>The most important things for a ceremony is that the source is announced before the ceremony starts, that all participants and viewers of a ceremony can find the source on the date specified by the CA, and that everyone gets the same value when they go to the source for that day.</t>

<t>If the CA chooses to use stock market closing values, a common open source of those values is the Wall Street Journal.
For example, the FTSE 100 Index is a long-established index based on 100 stocks; it is sometimes known by its stock ticker as "UXK".
The daily closing for the FTSE 100 Index at the Wall Street Journal can currently be found <eref target="https://www.wsj.com/market-data/quotes/index/UK/UKX/historical-prices">here</eref>.</t>

<t>Note that the location for sources of daily closing values can change over time.
The CA must check that the source they intende to use is still active, and still available when the ceremony starts.</t>

</section>
<section anchor="name-submission"><name>Name Submission</name>

<t>The CA is the sole arbitrator for whether a candidate is allowed to enter the pool.
The CA is also the sole arbitrator of what name string (in UTF-8) the candidate can use in the pool.</t>

<t>The order that the candidates join the pool does not affect the outcome of the selection process.
Said another way, the pool is kept as an unordered set of candidates, not an ordered list of candidates.</t>

</section>
<section anchor="closing-submissions"><name>Closing Submissions</name>

<t>At the closing of submissions, the CA verifies that the length of the set of candidates in the pool is larger than <em>S</em>. 
If the length is the same as <em>S</em>, the rest of the steps are unneeded (and could be confusing), because all candidates will automatically be selected.
If the length is shorter than <em>S</em>, the ceremony stops because there are too few candidates.</t>

<t>The method for publishing the set of candidates is determined by the CA.
<xref target="namedisplay"/> gives an example of how a CA might publish this information.</t>

</section>
<section anchor="selecting-d"><name>Selecting <em>D</em></name>

<t>On the day that the CA announced for the selection of <em>D</em>, the CA goes the the source they announced and gets <em>D</em>.
They encode <em>D</em> as a UTF-8 string, which is fairly easy if the source is numeric.
In the example of the FTSE 100 from <xref target="selectioninfo"/>, a closing value for the day announced at the beginning of the ceremony might be "7623.10".
This would be encoded in UTF-8 as the string of characters whose value is U+373632372e3130.</t>

</section>
<section anchor="calculating-hashes"><name>Calculating Hashes</name>

<t>Different programming libraries have different requirements for the input to hash functions.
<xref target="sample-code"/> uses the built-in <spanx style="verb">hashlib</spanx> library in Python, which requires that text strings come with a specified encoding.</t>

</section>
<section anchor="selecting-s-candidates"><name>Selecting <em>S</em> Candidates</name>

<t>The process of selecting is simply taking the <em>S</em> candidates whose hash value is.
This can easily be determined by sorting the text representation of the hash values because in UTF-8 and ASCII, digits have lower codepoints than letters.</t>

<t>To complete the process, the CA should publish all known data for the ceremony.
This includes <em>S</em>, <em>D</em>, the hexadecimal value of <em>D</em>, all of the information for each candidate, and the full list of selected candidates.
<xref target="namelist-out"/> shows an example of what this publication might look like.</t>

</section>
</section>
<section anchor="handling-process-issues"><name>Handling Process Issues</name>

<t>Ceremonies don't always go as planned.
For example, after a ceremony completes, one or more of the selected candidates might be removed from the selected set due to voluntary withdrawal or established rules (such as no two candidates being from the same geographic region).
In such cases, no new ceremony is needed: the CA simply selects the next candidate(s) on the list that is ordered by hash values.</t>

<t>(Note that the process in this document is quite different than that in <xref target="NomCom"/> and <xref target="NomCom-bis"/>, where unselecting an already-selected candidate can cause a new random selection for all the remaining candidates.
Such reestablishing of the candidate pool can cause confusion and hurt among the candidates who were first selected, then later unselected, due to no fault of the their own.)</t>

<t>Similarly, if after the selection process is completed, the size <em>S</em> of the selected set needs to increase, the CA simply selects the next candidate(s) on the list that is ordered by hash values.</t>

</section>
<section anchor="sample-code"><name>Sample Code</name>

<t>The following is a list of figures for an implementation of the procedure shown in this document.</t>

<t><list style="symbols">
  <t>The Python script in <xref target="python"/> implements the algorithm from this document.</t>
  <t>The file that contains the list of names is shown in <xref target="namelist"/>. (The names are the winners of the Nobel laureates in Literature for 2016 through 2021.)</t>
  <t>A file showing the UTF-8 representation of the names from <xref target="namelist"/> is shown in <xref target="namedisplay"/>. This file is suitable for showing to the candidates.</t>
  <t>The file that contains the <em>S</em> and <em>D</em> on separate lines is shown in <xref target="selectioninfo"/>.</t>
  <t><xref target="namelist-out"/> shows the result of running the program with that file as input.</t>
</list></t>

<figure title="Example Python code for this procedure" anchor="python"><artwork><![CDATA[
#!/usr/bin/env python3

# Program to randomly select some candidates from a group
#  See draft-hoffman-genarea-reandom-candidate-selection

import hashlib, sys
from pathlib import Path

# Helper function to turn a UTF-8 string into its hex representation
def hexify(in_str):
  return "".join([hex(c)[2:] for c in in_str.encode("utf8")])

# Santity check the input files given on the command line
if len(sys.argv) == 1:
  exit("Must give the name of the candidate file, and possibly " + \
    "the selection file, on the command line. Exiting.")
candidate_path = Path(sys.argv[1])
if not candidate_path.exists():
  exit(f"The file {str(candidate_path)} does not exist. Exiting.")
try:
  file_contents = candidate_path.open(mode="rt", encoding="utf8")
except:
  exit("The candidates file do not appear to be in UTF-8. Exiting.")
candidate_lines = file_contents.read().splitlines()
# See if there is a second file for selecting
if len(sys.argv) == 3:
  run_including_selection = True
  selection_path = Path(sys.argv[2])
  if not selection_path.exists():
    exit(f"The file {str(selection_path)} does not exist. Exiting.")
  try:
    file_contents = selection_path.open(mode="rt", encoding="utf8")
  except:
    exit("The selection file does not appear to be UTF-8. Exiting.")
  selection_lines = file_contents.read().splitlines()
  # Extract D and S from the selection file
  S_str = selection_lines[0]
  try:
    S = int(S_str)
  except:
    print(f"The first line of the selection file, '{S_str}', " + \
      "is not an integer. Exiting.")
  D_str = selection_lines[1]
  D_hex = hexify(D_str)
else:
  run_including_selection = False

# Get the candidates information
C_info = []
c_names = candidate_lines
diff_set = set()
for C_str in c_names:
  C_hex = "".join([hex(c)[2:] for c in C_str.encode("utf8")])
  if run_including_selection:
    C_with_D_str = C_str + D_str
    C_with_D_hex = hexify(C_with_D_str)
    C_with_D_hash = hashlib.sha256(C_with_D_hex.encode("utf-8"))
    C_info.append([C_str, C_hex, C_with_D_str, C_with_D_hex, \
      C_with_D_hash.hexdigest()])
  else:
    C_info.append([C_str, C_hex])

# Print the results
if run_including_selection:
  print(f"S is {S}")
  print(f"D is \"{D_str}\"")
  print(f" U+{D_hex}\n")
  print("Candidate information, sorted by hash of name including D")
  selected = []
  for this_info in sorted(C_info, key=lambda a: a[4], reverse=True):
    if S > 0:
      selected.append(this_info[0])
      S -= 1
    print(f"{this_info[2]}")
    print(f" U+{this_info[3]}")
    print(f" {this_info[4]}")
  print("\nSelected:\n    " + "\n    ".join(selected))
else:
  for this_info in C_info:
    print(f"{this_info[0]}")
    print(f" U+{this_info[1]}")
]]></artwork></figure>

<figure title="Sample name list file" anchor="namelist"><artwork><![CDATA[
Bob Dylan
石黒 一雄
Olga Tokarczuk
Peter Handke
Louise Glück
Abdulrazak Gurnah
]]></artwork></figure>

<figure title="Full information for the names" anchor="namedisplay"><artwork><![CDATA[
Bob Dylan
 U+426f622044796c616e
石黒 一雄
 U+e79fb3e9bb9220e4b880e99b84
Olga Tokarczuk
 U+4f6c676120546f6b6172637a756b
Peter Handke
 U+50657465722048616e646b65
Louise Glück
 U+4c6f7569736520476cc3bc636b
Abdulrazak Gurnah
 U+416264756c72617a616b204775726e6168
]]></artwork></figure>

<figure title="Sample selection information file" anchor="selectioninfo"><artwork><![CDATA[
3
7623.10
]]></artwork></figure>

<figure title="Output of running the program on the list of names and selection information" anchor="namelist-out"><artwork><![CDATA[
S is 3
D is "7623.10"
 U+373632332e3130

Candidate information, sorted by hash of name including D
石黒 一雄7623.10
 U+e79fb3e9bb9220e4b880e99b84373632332e3130
 f2e0d3bbd8eac635d799702bead0fbdf07ff79ef94a261789de50e81adb38a13
Louise Glück7623.10
 U+4c6f7569736520476cc3bc636b373632332e3130
 a54e282cbaa1f29543cd13d9a29e07e3a38413360172b722f8259c2baa3c38dd
Peter Handke7623.10
 U+50657465722048616e646b65373632332e3130
 8bb3bc197c6462b033e4d8e8cf703b13b1c55172572a85d56c639db5c57d3866
Olga Tokarczuk7623.10
 U+4f6c676120546f6b6172637a756b373632332e3130
 56166c4e0e6ca027f4150bac5ce83fbf5652e440214fd255308472fed9f8fb1b
Abdulrazak Gurnah7623.10
 U+416264756c72617a616b204775726e6168373632332e3130
 340413dc6b2574f5ddc5e88e1c986a229d9defccbae249789b07a5d2337981ff
Bob Dylan7623.10
 U+426f622044796c616e373632332e3130
 05eb403f4f59f5a7b21f5e5a4e8dbfbac59344fd5e8708ab618b5e2ed27a52de

Selected:
    石黒 一雄
    Louise Glück
    Peter Handke
]]></artwork></figure>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA considerations.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The value <em>D</em> used in this process is explicitly not cryptographically strong; in fact, it might provide only a few bits of randomness.
For example, stock indexes that contain many stocks might be predictable after the third digit from the right, meaning that they only have randomness of about 10 bits.
A candidate who has a lot of leeway in choosing their name can possibly increase their chance of being selected by as much as 0.1% with such source of randomness.
If the CA feels that candidates have too much leeway in selecting their names and is concerned about candidates gaming the ceremony even to that tiny extent, that CA needs to choose a source for <em>D</em> with more randomness.</t>

<t>Such selection is outside the scope of this document because it would make the process more complicated or less understandable.
Instead, this document relies on the CA to only allow sensible representation of candidate names and to accept a tiny chance that candidates can both predict <em>D</em> and be able to change the name they use to reflect that predicted value.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>





<reference anchor='SHA-2'>
<front>
<title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
<author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'><organization/></author>
<author fullname='T. Hansen' initials='T.' surname='Hansen'><organization/></author>
<date month='May' year='2011'/>
<abstract><t>Federal Information Processing Standard, FIPS</t></abstract>
</front>
<seriesInfo name='RFC' value='6234'/>
<seriesInfo name='DOI' value='10.17487/RFC6234'/>
</reference>


<reference anchor="Unicode" target="https://www.unicode.org/versions/latest/">
  <front>
    <title>The Unicode Standard (latest version)</title>
    <author >
      <organization>The Unicode Consortium</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>




<reference anchor='UTF-8'>
<front>
<title>UTF-8, a transformation format of ISO 10646</title>
<author fullname='F. Yergeau' initials='F.' surname='Yergeau'><organization/></author>
<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>




    </references>

    <references title='Informative References'>





<reference anchor='NomCom'>
<front>
<title>Publicly Verifiable Nominations Committee (NomCom) Random Selection</title>
<author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'><organization/></author>
<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='NomCom-bis'>
   <front>
      <title>Publicly Verifiable Nominations Committee (NomCom) Random Selection</title>
      <author fullname='Donald E. Eastlake 3rd' initials='D. E.' surname='Eastlake'>
         <organization>Futurewei Technologies</organization>
      </author>
      <date day='16' month='April' year='2023'/>
      <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.
   It focuses on the selection of the voting members of the IETF
   Nominations Committee (NomCom) from the pool of eligible volunteers;
   however, similar or, in some cases, identical techniques could be and
   have been applied to other cases.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-eastlake-rfc3797bis-02'/>
   
</reference>




    </references>


<?line 366?>



  </back>

<!-- ##markdown-source:
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
/wGQFqTEkz8AAA==

-->

</rfc>

