<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-cryptography-specification-02" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Crypto Specs">Guidelines for Writing Cryptography Specifications</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-cryptography-specification-02"/>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cryptography Consulting LLC</organization>
      <address>
        <postal>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>nicholas.sullivan+ietf@gmail.com</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare, Inc.</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <workgroup>Crypto Forum Research Group</workgroup>
    <abstract>
      <?line 36?>

<t>This document provides guidelines and best practices for writing
technical specifications for cryptography protocols and primitives,
targeting the needs of implementers, researchers, and protocol
designers.  It highlights the importance of technical specifications
and discusses strategies for creating high-quality specifications
that cater to the needs of each community, including guidance on
representing mathematical operations, security definitions, and
threat models.</t>
    </abstract>
    <note>
      <name>IRTF</name>
      <?line 47?>

<t>This document is a product of the Crypto Forum Research Group (CFRG)
in the IRTF.  This document may contain material that has not received
review from the research community.  The IRTF publishes the results of
research and development activities.  These results might not be
suitable for deployment.</t>
    </note>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>High-quality cryptography specifications are critical for the
development and deployment of secure cryptographic protocols.  This
document provides guidelines for specification writers.  The guidelines
cover mathematical operations, security definitions, and threat models.
They help ensure that specifications are of high quality and useful for
their intended audience.  Adhering to these guidelines helps ensure
that specifications are easier to understand, implement, and analyze,
leading to high assurance and interoperable systems.</t>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="goals-and-requirements">
      <name>Goals and Requirements</name>
      <t>The primary goal of these guidelines is to help guide the authorship
of cryptographic specifications so that they are as useful as possible
when creating high-assurance cryptographic software.</t>
      <t>Specifications that follow these guidelines should be able to be
easily understood, implemented, and analyzed by different audiences,
including the engineering community, research community, and
standardization community.  By addressing the unique needs and
expectations of each group, these guidelines aim to:</t>
      <ul spacing="normal">
        <li>
          <t>Minimize ambiguity and misinterpretations, leading to clearer
specifications and more accurate implementations.</t>
        </li>
        <li>
          <t>Ensure consistent and correct implementations by providing a clear
description of both algorithms and their underlying mathematical
foundation.</t>
        </li>
        <li>
          <t>Facilitate review and analysis by the research community, allowing
for the verification of security properties and the identification of
potential vulnerabilities.</t>
        </li>
        <li>
          <t>Enable interoperability of implementations of these specifications,
promoting collaboration and compatibility between various systems and
protocols.</t>
        </li>
      </ul>
      <t>Each of these stakeholder groups contributes something different to the
overall process of deploying software:</t>
      <ol spacing="normal" type="1"><li>
          <t>Engineering community: Engineers identify technical problems and
build solutions using computing tools.  They focus on why problems
should be addressed, producing requirements that define the problem
and solutions that meet those requirements.  Their ultimate goal is to
implement and ship software or hardware that effectively tackles these
challenges.</t>
        </li>
        <li>
          <t>Research community: Researchers explore the design space of
different subject areas and evaluate potential solutions.  They develop
methods for designing tools and performing experiments to validate
hypotheses.  This work concentrates on how problems should be solved,
creating artifacts that help describe solutions.  These may include
academic, peer-reviewed papers or software that studies or supports
the shipping of software.</t>
        </li>
        <li>
          <t>Standardization community: This group develops technical
specifications of protocols that others can implement, analyze, and
verify.  The specifications capture the details of a solution and
serve as a foundation for creating interoperable systems.  They ensure
the correct implementation of cryptographic algorithms and protocols.</t>
        </li>
      </ol>
      <t>By following these guidelines and addressing the distinct needs of each
stakeholder group, authors can create well-structured,
informative specifications documents that facilitate the development,
analysis, and implementation of high assurance cryptographic
solutions.</t>
    </section>
    <section anchor="guidelines-for-cryptographic-specification-presentation">
      <name>Guidelines for Cryptographic Specification Presentation</name>
      <t>Technical specifications do not stand on their own.  Their value is
derived from their usefulness to the various communities that rely on
them.  A specification can have amazing content but without the
appropriate presentation, it may not be as useful as intended.  The
guidelines in this section are a baseline set of recommendations for
authors to consider when writing a cryptographic specification and are
applicable beyond just cryptographic standards and are general good
practices for specification writers.</t>
      <section anchor="simplicity">
        <name>Simplicity</name>
        <t>Complexity is one of the main causes of software bugs.  The opposite
of complexity is simplicity, which is a key aspect of creating
effective cryptography specifications.  By striving for simplicity in
problem statements, technical content, and presentation, authors can
make their documents more accessible to a wider audience, including
implementers, researchers, and protocol designers.  Simplicity reduces
the cognitive load required to understand the specification and
minimizes the risk of misinterpretation, which can lead to incorrect
implementations and security vulnerabilities.</t>
        <t>To achieve simplicity, authors should focus on:</t>
        <dl>
          <dt>Problem Definition</dt>
          <dd>
            <t>Start by presenting a concise and easily comprehensible description
of the problem that the specification aims to solve.  Avoid unnecessary
jargon and strive to make the problem statement accessible to readers
with varying levels of expertise in the field.</t>
          </dd>
          <dt>Component Breakdown</dt>
          <dd>
            <t>When explaining multi-step cryptographic algorithms or concepts,
break them down into smaller, more manageable components.  This will
make it easier for readers to understand the individual parts and
their relationships to one another.</t>
          </dd>
          <dt>Clear Language</dt>
          <dd>
            <t>Write the specification using clear, concise language, and
consistent and broadly understood terminology.  Avoid overly technical
jargon, and define any terms that may be unfamiliar to some readers.</t>
          </dd>
          <dt>Focused Scope</dt>
          <dd>
            <t>Keep the specification focused on the primary problem or use case,
i.e., avoid feature creep.  Avoid introducing unrelated or peripheral
topics, as this can create confusion and detract from the primary
focus.</t>
          </dd>
        </dl>
        <t>By focusing on simplicity in document structure and prose in the
specification writing process, authors can create documents that are
more accessible and easier to understand, ultimately resulting in more
reliable and secure implementations of cryptographic algorithms and
protocols.  Focusing on simplicity in writing does not imply
imprecision or brevity.  Even long documents can embody simplicity
with the right attention to detail and structuring of prose.</t>
      </section>
      <section anchor="precision">
        <name>Precision</name>
        <t>Precision is essential in cryptographic specifications, as small
deviations or ambiguities can lead to severe security vulnerabilities.
A precise specification ensures consistent and correct implementations
while enabling accurate security analysis.</t>
        <t>The following recommendations help achieve precision:</t>
        <ol spacing="normal" type="1"><li>
            <t>Use clear and concise language, avoiding jargon or colloquialisms
that may lead to misinterpretation.  When introducing technical
terms or concepts, provide clear definitions or explanations to
ensure that all readers are on the same page.</t>
          </li>
          <li>
            <t>Provide explicit instructions and avoid undefined behavior,
ensuring implementers can follow step-by-step instructions with
minimal or zero risk of misinterpretation.  This helps ensure that
all implementations are consistent with the intended design and
minimizes the risk of errors or vulnerabilities.</t>
          </li>
          <li>
            <t>Provide test vectors that check for correctness of all behavior in
the specification, especially those near edge cases.  For example,
if a specification involves a branch or condition, then test cases
should ideally be written to exercise both paths of the branch.
Sometimes this is infeasible, e.g., if probability of a particular
branch happening is negligible, though more often than not branches
can be adequately covered.</t>
          </li>
          <li>
            <t>Employ formal notation or pseudocode to provide a precise
description of algorithms, data structures, and protocols.  This
ensures that implementers, researchers, and protocol designers can
accurately understand the intended behavior and interactions of the
components within the specification.</t>
          </li>
          <li>
            <t>Specify data formats and encodings, clearly defining formats,
encoding schemes, and serialization methods for all data types used
in the specification.  This helps ensure that different
implementations can interoperate seamlessly and reduces the
likelihood of incompatibilities or communication errors.</t>
          </li>
          <li>
            <t>Document assumptions and dependencies, clearly stating any
assumptions or dependencies on external components, including other
specifications or protocol descriptions.  This includes common
dependencies like that of a random number generator.  This helps
implementers and researchers understand the context in which your
specification operates and any potential limitations or risks.</t>
          </li>
        </ol>
        <t>Precise specifications minimize ambiguity and reduce the likelihood of
implementation errors or inconsistencies.</t>
      </section>
      <section anchor="consistency">
        <name>Consistency</name>
        <t>A specification must be internally consistent.  It should also align
with the conventions of similar documents.</t>
        <t>Consistent use of concepts, vocabulary, language, and presentation
reduces ambiguity.  This clarity makes the specification easier to
understand and implement.</t>
        <t>The following recommendations help achieve consistency:</t>
        <ol spacing="normal" type="1"><li>
            <t>Establish a consistent terminology: Develop a clear and consistent
set of terms and definitions that will be used throughout the
document.  Avoid using synonyms or multiple terms for the same
concept, as this can lead to confusion.  When using acronyms, always
provide their full meaning upon first usage and use the acronym
consistently afterward.</t>
          </li>
          <li>
            <t>Maintain a uniform style and tone: Write the specification using a
consistent style and tone to ensure that readers can easily follow
the content.  This includes consistent use of grammatical
structures, punctuation, and capitalization.  If your organization
has a style guide, adhere to it when writing the specification.</t>
          </li>
          <li>
            <t>Use a logical structure: Organize your specification in a logical
manner, starting with an overview and then progressing through the
various components, algorithms, and protocols.  Make use of
sections, subsections, and other structural elements to break up the
content and make it easier to navigate and comprehend.  Use forward
or backward references to make navigation of the document simpler.</t>
          </li>
          <li>
            <t>Provide consistent formatting: Ensure that all elements within the
specification, such as tables, figures, pseudocode and equations,
are formatted consistently.  This will help readers quickly identify
and understand these elements as they progress through the document.</t>
          </li>
          <li>
            <t>Be consistent with conventions and notations: When using
mathematical notation, programming languages, or other conventions,
apply them consistently throughout the document.  This will help
prevent confusion and allow readers to focus on the content rather
than deciphering different notations.</t>
          </li>
          <li>
            <t>Reference external documents consistently: When referring to
external documents or resources, such as other RFCs, standards, or
research papers, provide consistent and accurate citations.  This
will enable readers to locate and review these resources as needed.</t>
          </li>
          <li>
            <t>Keep the broader context in mind: Try to adopt the same terminology
and conventions as other related documents the reader may be
familiar with, especially for specifications that are developed
based on peer-reviewed, published work.  Consistency across
audiences is important to help lower the bar to successful
collaboration and effective communication.  If the specification is
intended to be part of the RFC series, reuse conventions from other
documents in the series.</t>
          </li>
        </ol>
        <t>By focusing on consistency in your cryptography specification, you
will make it more accessible and easier to understand for
implementers, researchers, and protocol designers.  This, in turn,
will facilitate the development of correct, secure, and interoperable
cryptographic systems based on your specification.</t>
        <t>Cryptography specifications are often unique in their use of
mathematical objects to define protocols.  As such, presenting this
content requires special guidance.</t>
        <section anchor="representing-mathematical-operations">
          <name>Representing Mathematical Operations</name>
          <t>Cryptographic protocols rely on mathematical operations.  These
operations require precise and clear representation in specifications.</t>
          <t>Ambiguous or inconsistent mathematical notation leads directly to
implementation errors and interoperability failures.</t>
          <t><xref target="RFC7748"/> demonstrates effective mathematical representation through
clear introduction of scalar multiplication notation, consistent usage
throughout, and concrete examples.</t>
          <section anchor="notation-consistency">
            <name>Notation Consistency</name>
            <t>Consistency in the notation used to represent mathematical operations
is essential for avoiding confusion and ensuring that the specification
is easy to understand.  Specification authors should establish a clear
notation system from the beginning and use it consistently throughout
the document.</t>
            <t>This notation should be introduced with a comprehensive
description or a reference to a well-known notation system to ensure
that readers can easily follow the mathematical expressions.  For
example, exponentiation can be represented by superscript or by a
carat, but not by both.</t>
          </section>
          <section anchor="use-of-standard-mathematical-symbols">
            <name>Use of Standard Mathematical Symbols</name>
            <t>Widely recognized mathematical symbols promote clarity and reduce the
risk of misinterpretation.  However, some symbols have different
meanings across contexts or disciplines.  The specification should
clarify the intended meaning of such symbols.  For instance, group
operations in multiplicative notation use the * multiplication symbol
rather than the x symbol to avoid confusion.</t>
          </section>
          <section anchor="explicitly-defining-custom-operations">
            <name>Explicitly Defining Custom Operations</name>
            <t>Mathematical operations and notation that extend beyond standard
conventions require explicit definitions with clear explanations and
examples.</t>
            <t>Key aspects of defining custom operations:
- Provide clear explanations and examples.
- Keep new notation minimal to avoid confusion.
- Consider including a glossary for multiple non-standard operations.</t>
          </section>
          <section anchor="pseudocode-and-algorithmic-descriptions">
            <name>Pseudocode and Algorithmic Descriptions</name>
            <t>Mathematical expressions often need to be supplemented with pseudocode
or algorithmic descriptions to bridge the gap between theory and
implementation.  Pseudocode should be written in a style that
resembles real programming languages.  Comments clarify the logic.
Control structures such as loops and conditionals should use
consistent notation throughout the document.</t>
          </section>
          <section anchor="visual-representations">
            <name>Visual Representations</name>
            <t>Diagrams and other visual aids help convey complex mathematical
concepts.  These elements must be clear, properly labeled, and
consistent with the notation system.  Visual representations
supplement the text; they do not replace it.</t>
            <ol spacing="normal" type="1"><li>
                <t>Ensure that diagrams remain legible in all output formats, including
TXT, HTML, and PDF.</t>
              </li>
              <li>
                <t>For simple state machines or data flows, use ASCII diagrams that
display clearly in all output formats.</t>
              </li>
              <li>
                <t>Keep every label, variable name, and symbol in your figures
consistent with the notation used in the surrounding text.</t>
              </li>
            </ol>
          </section>
          <section anchor="ascii-safe-mathematical-notation">
            <name>ASCII-safe Mathematical Notation</name>
            <t>Cryptographic specifications <bcp14>MUST</bcp14> use ASCII-only characters in all
algorithm descriptions. Symbols that lack direct ASCII representation
(for example, ⊕, ∥, ⋅, ∞) <bcp14>MAY</bcp14> appear in informative examples or figures,
but every such symbol <bcp14>MUST</bcp14> be accompanied by an ASCII equivalent and be
defined exactly once in a dedicated Notation section. Each operator or
symbol has exactly one meaning; authors <bcp14>MUST NOT</bcp14> overload a glyph (for
example, <tt>^</tt>) for multiple operations. Following these rules ensures the
plain-text RFC renders unambiguously and prevents implementation errors
stemming from visual formatting differences across output formats.</t>
            <t>Checklist for authors:</t>
            <ul spacing="normal">
              <li>
                <t>Define a concise notation table covering every non-obvious operator
(<tt>||</tt>, <tt>^</tt>, <tt>mod</tt>, <tt>XOR</tt>, etc.).</t>
              </li>
              <li>
                <t>Prefer <tt>XOR</tt> or <tt>||</tt> over Unicode ⊕ or ∥ in normative text.</t>
              </li>
              <li>
                <t>Never reuse <tt>^</tt> for both XOR and exponentiation—spell out one of them
instead.</t>
              </li>
              <li>
                <t>Verify all formulas in the generated <strong>.txt</strong> file; formatting must not
change semantics.</t>
              </li>
              <li>
                <t>If Unicode appears in examples, provide the ASCII fallback inline,
for example: ⊕ (<strong>XOR</strong>).</t>
              </li>
            </ul>
            <t>Rendering considerations (HTML/PDF only):</t>
            <ul spacing="normal">
              <li>
                <t>Authors <bcp14>MAY</bcp14> use <tt>&lt;sup&gt;</tt> (or Markdown <tt>^</tt>) markup so the ASCII <tt>^</tt>
exponent indicator renders as a superscript in HTML or PDF outputs.
The plain-text RFC <bcp14>MUST</bcp14> still display the caret character.</t>
              </li>
              <li>
                <t>It is acceptable for the rendered HTML/PDF to substitute Unicode
symbols for clarity—e.g., ⊕ (U+2295) for XOR or ⋅ (U+22C5 or U+00B7)
for multiplication—provided that the canonical text uses the ASCII
equivalents (<tt>XOR</tt>, <tt>*</tt>) and the symbol meanings are listed in the
Notation table.</t>
              </li>
              <li>
                <t>Such styling <bcp14>MUST NOT</bcp14> alter the normative meaning, and the ASCII
representation <bcp14>MUST</bcp14> remain authoritative.</t>
              </li>
            </ul>
            <section anchor="two-layer-rule">
              <name>Two-layer rule</name>
              <t>Normative layer (canonical text):
- Limited to printable ASCII plus SP and LF.
- Only the operator glyphs in the table below are
  permitted.</t>
              <t>Rendered layer (HTML/PDF):
- Generated automatically by build tools (kramdown-RFC, Sphinx,
  or similar tooling).
- May substitute typographical symbols (for example, *→⋅,
  XOR→⊕, <tt>^</tt>→superscript).
- Substitutions are stylistic only; the ASCII source remains
  authoritative.</t>
              <t>Mandatory operator set</t>
              <table>
                <thead>
                  <tr>
                    <th align="left">Concept</th>
                    <th align="left">ASCII glyph(s)</th>
                    <th align="left">Example</th>
                    <th align="left">Notes</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td align="left">Addition / subtraction</td>
                    <td align="left">
                      <tt>+</tt>, <tt>-</tt></td>
                    <td align="left">
                      <tt>a + b</tt></td>
                    <td align="left"> </td>
                  </tr>
                  <tr>
                    <td align="left">Multiplication</td>
                    <td align="left">
                      <tt>*</tt></td>
                    <td align="left">
                      <tt>x * y</tt></td>
                    <td align="left">Define early that <tt>*</tt> is group/field multiplication</td>
                  </tr>
                  <tr>
                    <td align="left">Exponentiation</td>
                    <td align="left">
                      <tt>^</tt> or <tt>**</tt></td>
                    <td align="left">
                      <tt>g^k</tt>, <tt>2**255 - 19</tt></td>
                    <td align="left">Choose one symbol and use it consistently</td>
                  </tr>
                  <tr>
                    <td align="left">XOR</td>
                    <td align="left">
                      <tt>XOR</tt></td>
                    <td align="left">
                      <tt>a XOR b</tt></td>
                    <td align="left">Avoids clash with <tt>^</tt>; all-caps stands out</td>
                  </tr>
                  <tr>
                    <td align="left">Concatenation</td>
                    <td align="left">
                      <tt>||</tt></td>
                    <td align="left">
                      <tt>M1 || M2</tt></td>
                    <td align="left">Define in glossary</td>
                  </tr>
                  <tr>
                    <td align="left">Equality / assignment</td>
                    <td align="left">
                      <tt>=</tt> / <tt>&lt;-</tt></td>
                    <td align="left">
                      <tt>x &lt;- y</tt></td>
                    <td align="left">
                      <tt>&lt;-</tt> optional but must be defined</td>
                  </tr>
                </tbody>
              </table>
            </section>
            <section anchor="operator-glossary-and-constant-time-annotations">
              <name>Operator glossary and constant-time annotations</name>
              <t>Immediately after the terminology section, include a short table
“Mathematical Operators and Symbols”.  Each entry <bcp14>MUST</bcp14> provide:
1. ASCII glyph(s)
2. Description of the operation
3. Comment on constant-time versus variable-time expectations.</t>
              <t>When pseudocode requires constant-time behavior, mark the line with the
<tt>CONST</tt> tag, for example:</t>
              <t><tt>
z &lt;- CMOV(x, y, e)  # CONST: branch-free
</tt></t>
              <t>Style checklist for authors</t>
              <ul spacing="normal">
                <li>
                  <t>If a glyph could be ambiguous (e.g., <tt>^</tt>), add an inline reminder the
first time it appears: <tt>^</tt> (exponentiation).</t>
                </li>
                <li>
                  <t>Never overload the same glyph for two different operations within the
same specification.</t>
                </li>
                <li>
                  <t>Prefer italic variables in rendered formats; keep them plain in ASCII.</t>
                </li>
                <li>
                  <t>Provide at least one worked example that exercises every operator.</t>
                </li>
                <li>
                  <t>If an uncommon Unicode symbol is truly necessary (e.g., ⟂ for "perp"),
include it only inside <tt>&lt;artwork type="html"&gt;</tt> with an ASCII fallback
in canonical text.</t>
                </li>
              </ul>
            </section>
          </section>
        </section>
      </section>
    </section>
    <section anchor="guidelines-for-cryptography-specification-content">
      <name>Guidelines for Cryptography Specification Content</name>
      <t>In addition to cryptographic specification clarity and accessibility
through presentation format, the content of a specification also
influences the overall value of the specification.  The syntax of
cryptographic objects introduced and their interfaces, as well as the
way in which the object is structured for use in applications, is
important for reliable and secure implementations of cryptographic
algorithms and protocols.  In this section, we discuss factors that
relate to the content of the specifications and their impact on
overall quality.</t>
      <section anchor="reusability">
        <name>Reusability</name>
        <t>Cryptography specifications that rely on bespoke sub-algorithms or
lower-level components tend to be brittle and invite implementation
issues.  To create efficient, interoperable, and widely adopted
cryptographic systems, it is preferable to reuse existing components
or primitives.  Reusability allows developers to build on existing
work, reducing the time and effort required to create new
implementations while leveraging established security properties and
analyses.  This section discusses the importance of reusability in
cryptography specifications and offers guidance for incorporating
reusability principles into the specification development process.</t>
        <section anchor="build-on-existing-specifications">
          <name>Build on Existing Specifications</name>
          <t>When developing a cryptography specification, it is advantageous to
build upon existing, well-established specifications, protocols, and
primitives where possible.</t>
          <t>By doing so, authors can capitalize on the collective expertise of the
community, as well as existing security analyses, implementation
experiences, and best practices.  This approach reduces the potential
for introducing new vulnerabilities and inconsistencies while
promoting interoperability between different systems.</t>
        </section>
        <section anchor="modular-design">
          <name>Modular Design</name>
          <t>Emphasizing modularity in the design of cryptography specifications
allows for greater flexibility and reusability.  By breaking down
complex algorithms into smaller, self-contained components or
modules, specification writers facilitate the reuse of these
components in different contexts or applications.  A modular design
also simplifies the process of updating or replacing specific
components without affecting the overall system, making it easier to
incorporate new research findings or technological advancements.  An
example of a modular design is the prime-order group abstraction.
Algorithms that use this abstraction admit a modular design where the
group implementation is described in a separate document dedicated to
the details of the implementation of the group.  This approach
simplifies both implementation and security analysis.</t>
        </section>
        <section anchor="clear-interfaces-and-abstractions">
          <name>Clear Interfaces and Abstractions</name>
          <t>To promote misuse resistance and elegant higher-level designs,
cryptography specifications should provide clear interfaces and
abstractions for the components and primitives they describe.</t>
          <t>Well-defined interfaces enable developers to understand and interact
with a component without needing to know the details of its internal
implementation.</t>
          <t>This approach allows for the replacement or
modification of components with minimal impact on the overall system
and encourages the development of interchangeable components that can
be reused across different applications and within protocols.</t>
          <t>Cryptographic objects typically have a set of functions associated
with them that make up the interface; structuring the functions to
fit well-understood and existing abstractions helps make the job of
using the object in higher-level algorithms easier and less prone to
code duplication.</t>
        </section>
        <section anchor="completeness">
          <name>Completeness</name>
          <t>The operations defined in a cryptography specification should be
complete, with defined behavior on all inputs.  This includes error
handling and edge cases which would otherwise not impact the
algorithm's cryptographic properties.</t>
          <t>In particular, when
deserializing a byte string, the behavior on all byte strings should
be defined, including cases which would not be valid outputs of the
corresponding serialization function.  A complete specification helps
avoid implementation variations.  These variations can lead to
interoperability failures, gaps between formal analysis and real-world
practice, or security vulnerabilities.</t>
          <ul spacing="normal">
            <li>
              <t>Define behavior for all inputs: Ensure that every possible input
scenario is accounted for, including edge cases.</t>
            </li>
            <li>
              <t>Error handling: Clearly specify how errors should be managed to
prevent unexpected behavior.</t>
            </li>
            <li>
              <t>Avoid multiple valid behaviors: Consistency is key; avoid leaving
multiple implementation options open.</t>
            </li>
          </ul>
          <t>Avoid defining multiple implementation behaviors as valid.  Leaving
multiple options to implementators leads to compounding complexity:
downstream specifications may need to profile the algorithm to pick
the preferred option, and validation tools must be configurable to
assert either case.</t>
        </section>
        <section anchor="documentation-and-examples">
          <name>Documentation and Examples</name>
          <t>Thorough documentation and illustrative examples play a crucial role
in promoting reusability.  By providing comprehensive explanations of
the specification's components, interfaces, and intended use cases,
specification authors make it easier for developers to understand and
implement the specification correctly.  Including examples of how
components can be combined or applied in various scenarios further
clarifies their usage and encourages their reuse in different
contexts.</t>
          <t>Documentation Tips:
  - Use clear, concise language
  - Include illustrative examples
  - Highlight use cases and scenarios</t>
          <t>By focusing on reusability in cryptography specifications, authors can
help create secure, efficient, and adaptable cryptographic systems
that can be more easily integrated, maintained, and updated, resulting
in more robust and widely adopted solutions.</t>
        </section>
      </section>
      <section anchor="defining-security-definitions-and-threat-models">
        <name>Defining Security Definitions and Threat Models</name>
        <t>Cryptographic protocols are always used within a context of a broader
system whose security relies on an understanding capabilities of
potential attackers.  An incorrect definition or assumption about the
threat models to a protocol can make a protocol that is safe in one
context unsafe in a different context.  Precise definitions help
researchers assess the security of the proposed algorithms and
protocols, while comprehensible threat models enable implementers and
protocol designers to understand the potential risks and limitations
of the specification.  This section provides guidelines for defining
security definitions and threat models in a way that caters to the
needs of all target audiences.</t>
        <section anchor="defining-security-goals">
          <name>Defining Security Goals</name>
          <t>Specification authors should explicitly state the security goals that
the proposed algorithms or protocols aim to achieve.  These goals
should be comprehensive, covering all relevant aspects, such as
confidentiality, integrity, authentication, non-repudiation, and
availability as well as resistance to implementation flaws such as
side-channels.</t>
          <t>Furthermore, authors should clarify any trade-offs or
limitations associated with the security goals, ensuring that the
target audiences understand the intended balance between security and
other factors, such as performance or ease of implementation.</t>
          <t>Common Security Goals:
  - Confidentiality
  - Integrity
  - Authentication
  - Non-repudiation
  - Availability
  - Resistance to side-channels</t>
        </section>
        <section anchor="formalizing-security-definitions">
          <name>Formalizing Security Definitions</name>
          <t>Formalizing security definitions is essential for researchers to
rigorously analyze the algorithms and protocols described in the
specification.  Specification authors should strive to express security
definitions in a formal language, using consistent notation and
terminology.  Authors should accompany formal definitions with clear
explanations and examples to make them more accessible to implementers
and protocol designers who may not be familiar with formal methods.</t>
          <t>Steps to Formalize Security Definitions:
  - Choose a formal language
  - Ensure consistent notation
  - Provide clear examples</t>
        </section>
        <section anchor="describing-the-threat-model">
          <name>Describing the Threat Model</name>
          <t>A well-defined threat model provides an overview of the potential
adversaries and the risks they pose to the security of the algorithms
or protocols.  Specification authors should describe the threat model
in detail, including the capabilities, resources, and motivations of
adversaries.  Additionally, authors should identify any assumptions
made about the adversarial model and explicitly state them to help the
target audiences understand the intended scope and limitations of the
specification's security guarantees.  Clear threat models help prevent
misuse in inappropriate contexts.</t>
          <t>Key Components of a Threat Model:
  - Adversary capabilities
  - Resources
  - Motivations
  - Assumptions about adversarial models</t>
        </section>
        <section anchor="addressing-known-vulnerabilities-and-attacks">
          <name>Addressing Known Vulnerabilities and Attacks</name>
          <t>Specification authors should discuss known vulnerabilities and attacks
relevant to the proposed algorithms or protocols.  This discussion
should include an explanation of how the specification addresses or
mitigates these issues, as well as any residual risks that remain.
This information is valuable for implementers and protocol designers
to understand the potential threats and for researchers to assess the
robustness of the specification's security claims.</t>
        </section>
        <section anchor="providing-guidance-on-secure-implementation-and-deployment">
          <name>Providing Guidance on Secure Implementation and Deployment</name>
          <t>To help ensure that the security definitions and threat models are
effectively realized in practice, authors should provide guidance on
secure implementation and deployment of the proposed algorithms and
protocols.  This guidance may include best practices for avoiding
common pitfalls, recommendations for cryptographic parameter
selection, or considerations for securely integrating the
specification into existing systems.</t>
          <t>By clearly defining security definitions and threat models in
cryptography specifications, authors can facilitate a better
understanding of the security properties and limitations of the
proposed algorithms and protocols among implementers, researchers,
and protocol designers.</t>
          <t>Clear security definitions prevent cryptographic algorithms from being
used in insecure contexts.</t>
          <ul spacing="normal">
            <li>
              <t>Following these guidelines and recommendations from <xref target="RFC3552"/> helps
create robust security considerations sections</t>
            </li>
            <li>
              <t>Complete threat model discussions facilitate better understanding of
security properties and limitations</t>
            </li>
            <li>
              <t>Proper security definitions enable accurate analysis by target
audiences</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="catering-to-target-audiences">
      <name>Catering to Target Audiences</name>
      <t>When writing a specification, it is important to consider the needs of
the three primary audiences: implementers, researchers, and protocol
designers.  Each group has unique requirements and goals, and the
specification should be written in a way that addresses their specific
concerns.</t>
      <section anchor="catering-to-implementers">
        <name>Catering to Implementers</name>
        <t>Implementers require a clear, concise, and unambiguous specification
to develop production-grade software.</t>
        <t>To cater to implementers:</t>
        <ul spacing="normal">
          <li>
            <t>Provide step-by-step instructions for implementing algorithms or
processes, ensuring that all required inputs, outputs, and
intermediate steps are defined.  Where exceptional cases occur,
those should be noted and recommended error-handling steps should
be given.  Include test vectors to help implementers verify the
correctness of their implementations.</t>
          </li>
          <li>
            <t>Describe best practices for representing components of the
specification in code, addressing exceptional cases and
recommended error handling procedures, as well as aspects of the
specification that are difficult to implement correctly (e.g.,
where side-channel attacks might be possible).</t>
          </li>
          <li>
            <t>Clearly indicate any optional features, variations, or extensions,
specifying their impact on interoperability and security.</t>
          </li>
        </ul>
        <section anchor="test-vectors">
          <name>Test vectors</name>
          <t>Test vectors ideally cover all branches of the specification, with
reasonable exceptions, such as branches that occur with negligible
probability and as such are computationally infeasible to reproduce.
To facilitate writing tests, where possible, all functions should be
written with determinism in mind.  In particular, this means that
functions that produce random outputs, such as a function that
produces random elements in a prime-order group, should accept
randomness as input and test vectors should specify this randomness as
an input to the function.  Specifications should minimize internal
calls to PRNGs or similar and emphasize determinism.</t>
          <t>Finally, specifications should make the connection between
specification and test vectors clear by including explicit
reproducibility steps that describe how test vectors were derived for
parts of the specification.  This might mean pointing to a reference
implementation with instructions for how to run it, where the
reference implementation is written in a way that is clearly
consistent with the specification.</t>
          <t>It's possible to include too many test vectors in a specification,
which increases document length and decreases readability.  Authors
should provide test vectors that cover:</t>
          <ul spacing="normal">
            <li>
              <t>Typical test cases that exercise all logical pathways within an
algorithm</t>
            </li>
            <li>
              <t>All valid but degenerate cases that result in error or early exit of
an algorithm</t>
            </li>
            <li>
              <t>Exceptions that can be reached by attacker-controlled inputs</t>
            </li>
          </ul>
          <t>It is NOT necessary to include test vectors for cases that are
statistically improbable to be triggered, even by attacker-controlled
input, based on the underlying cryptographic assumptions.  For example,
if an error case is only reachable when an intermediate data point
matches the pre-image of a hash value that was randomly generated,
finding a test vector to trigger that case would require the ability
to compute a hash pre-image, which is deemed unfeasible for
sufficiently strong hash functions.  Exceptional cases that don't have
test vectors should be explicitly noted in the algorithm description.</t>
          <t>Lastly, specifications should provide references to machine-readable
test vectors (e.g., in JSON format) that persist alongside the
specification.  This helps avoid possibly error-prone parsing in
translating test vectors from a textual specification to test code
inputs.</t>
        </section>
      </section>
      <section anchor="catering-to-researchers">
        <name>Catering to Researchers</name>
        <t>Researchers need to understand the syntax and functionality of the
cryptographic protocol or primitive to ensure its correctness and
analyze its security properties.  To cater to researchers:</t>
        <ul spacing="normal">
          <li>
            <t>Clearly define the underlying mathematical concepts and notations
used in the specification, ensuring that all symbols, functions, and
variables are consistently and accurately represented as explained in
the section Representing Mathematical Operations.</t>
          </li>
          <li>
            <t>Provide detailed security definitions, goals, and threat models,
including the capabilities and limitations of adversaries and their
impact on parameter selection.  In general, authors should make input
requirements that are important for the security of the protocol or
construction maximally clear.  See: Defining Security Definitions and
Threat Models.</t>
          </li>
          <li>
            <t>Describe any assumptions made about the underlying primitives or
protocols and the justifications for these assumptions.  Such
assumptions should include references to external documents that
describe these underlying primitives or protocols where appropriate,
unless there are gaps between how the underlying primitive or protocol
is used and how it is described externally.</t>
          </li>
          <li>
            <t>Clearly present any security proofs, analysis, or references to
existing literature that support the security claims of the
specification.  If there are gaps between the specification and formal
security analysis, these gaps should be noted, along with rationale
that justifies the gaps.</t>
          </li>
        </ul>
      </section>
      <section anchor="catering-to-protocol-designers">
        <name>Catering to Protocol Designers</name>
        <t>Protocol designers in the standards community use specifications to
understand how to safely use the cryptographic protocol or primitive
when designing a higher-level protocol that depends on it.  To cater to
protocol designers:</t>
        <ul spacing="normal">
          <li>
            <t>Clearly define the interfaces, APIs, or functions exposed by the
protocol or primitive, indicating how they should be used and any
potential risks associated with their misuse.  For example, for each
input to the protocol, it should be made clear whether or not these
are attacker controlled and, if so, describe what steps must be taken
to validate that input.</t>
          </li>
          <li>
            <t>Describe any corner cases or situations that may impact security,
providing guidance on how to avoid or mitigate potential risks.  This
includes explicitly stating the probability of an algorithm failing
due to invalid operations occurring (such as divide-by-zero) both in
the typical case and under attacker-controlled inputs.</t>
          </li>
          <li>
            <t>Explain any dependencies or interactions with other protocols,
primitives, or system components, highlighting potential compatibility
or interoperability issues.</t>
          </li>
          <li>
            <t>Provide guidance on configuration, parameter selection, or deployment
considerations that may affect the security or performance of the
protocol in real-world scenarios.  This includes the impact of new
discoveries that weaken the security assumptions of a primitive.</t>
          </li>
        </ul>
        <t>By addressing the specific needs of implementers, researchers, and
protocol designers, a specification can be more effectively
understood, implemented, and analyzed, leading to more secure and
interoperable systems.</t>
      </section>
    </section>
    <section anchor="general-recommendations">
      <name>General Recommendations</name>
      <t>Developing effective cryptography specifications often requires
collaboration between multiple stakeholders in the target audience,
including engineers, researchers, and standardization organizations,
and engaging in a collaborative process helps ensure that diverse
perspectives and expertise are considered, resulting in more robust
and widely applicable specifications.  This section discusses the
importance of collaboration and compromise in specification development
and offers recommendations for fostering a collaborative environment.</t>
      <section anchor="encourage-open-communication-and-feedback">
        <name>Encourage Open Communication and Feedback</name>
        <t>Effective collaboration relies on open communication and an ongoing
exchange of ideas and feedback.  By creating channels for
communication, such as mailing lists, pull request threads (as
described in <xref target="RFC8874"/>), or regular meetings, authors can facilitate
discussions, address concerns, and gather valuable input from various
stakeholders.  Encouraging an environment where feedback is welcomed
and valued helps ensure that the specification benefits from diverse
expertise and experiences.</t>
      </section>
      <section anchor="seek-external-expertise">
        <name>Seek External Expertise</name>
        <t>Involving external experts, such as researchers or engineers from
different organizations, can help identify potential issues, uncover
new insights, and provide a broader perspective on the specification.
Engaging with experts such as those in the IRTF Crypto Review Panel
who have different backgrounds or areas of expertise can also help
identify potential gaps in the specification or highlight areas where
further research or clarification is needed.</t>
      </section>
      <section anchor="recognize-and-address-conflicting-interests">
        <name>Recognize and Address Conflicting Interests</name>
        <t>Collaboration often involves addressing conflicting interests or
opinions among stakeholders.  It is essential to acknowledge these
differences and work towards finding mutually agreeable solutions.
This may require making compromises or revisiting previous decisions
to ensure that the specification meets the needs of all involved
parties.  By maintaining a flexible and open-minded approach, authors
can:</t>
        <ul spacing="normal">
          <li>
            <t>Build consensus among diverse stakeholders with varying priorities
and technical perspectives.</t>
          </li>
          <li>
            <t>Develop a more robust specification that addresses real-world
implementation and deployment challenges.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="examples-of-well-written-specifications">
      <name>Examples of Well-Written Specifications</name>
      <t>To provide a better understanding of how to write high-quality
cryptography specifications, we will analyze specific sections from a
well-written example: ChaCha20 and Poly1305 for IETF Protocols
(<xref target="RFC8439"/>).</t>
      <section anchor="chacha20-and-poly1305-for-ietf-protocols-rfc-8439">
        <name>ChaCha20 and Poly1305 for IETF Protocols (RFC 8439)</name>
        <t><xref target="RFC8439"/> is a specification that describes the use of the ChaCha20
stream cipher and the Poly1305 message authentication code for IETF
protocols.  It demonstrates how to write a clear, comprehensive, and
precise specification while catering to different audiences.</t>
        <section anchor="introduction-and-overview">
          <name>Introduction and Overview</name>
          <t>The introduction in <xref target="RFC8439"/> clearly defines the purpose and
motivation for the specification.  It provides context on the origins
of ChaCha20 and Poly1305, and how they are used together to provide
confidentiality and data integrity.  By presenting a concise and
informative introduction, the specification sets the stage for the
detailed technical descriptions that follow.</t>
        </section>
        <section anchor="algorithm-descriptions">
          <name>Algorithm Descriptions</name>
          <t>The specification provides detailed and precise descriptions of the
ChaCha20 and Poly1305 algorithms, including pseudocode, constants,
and mathematical operations.  This section caters to implementers,
ensuring that they have all the necessary information to create
consistent and correct implementations.  The mathematical operations
are expressed in a clear and unambiguous manner, which helps both
implementers and researchers understand the algorithms better.</t>
        </section>
        <section anchor="test-vectors-1">
          <name>Test Vectors</name>
          <t><xref target="RFC8439"/> includes test vectors for both ChaCha20 and Poly1305,
providing concrete examples of inputs and expected outputs for the
algorithms.  This section is invaluable for implementers, allowing them
to verify that their implementations are correct and compatible with
others.</t>
        </section>
        <section anchor="security-considerations">
          <name>Security Considerations</name>
          <t>The specification dedicates an entire section to security
considerations, catering to researchers and protocol designers.  It
discusses potential attacks and their mitigations, recommendations for
nonce usage, and the security properties of the algorithms.  This
section also provides references to academic papers and other
resources for further reading, enabling researchers to delve deeper
into the security aspects of the specified algorithms.</t>
        </section>
        <section anchor="iana-considerations-and-references">
          <name>IANA Considerations and References</name>
          <t><xref target="RFC8439"/> concludes with IANA considerations and a list of
references, ensuring that the specification is well-integrated with
existing IETF processes and standards.  The IANA considerations section
is essential for protocol designers who need to register new values or
coordinate with existing registries.</t>
        </section>
        <section anchor="problematic-aspects">
          <name>Problematic Aspects</name>
          <t>A criticism of this document is that it does not cater enough to
protocol designers in that it does not explicitly define a decryption
algorithm.  Researchers familiar with the concept of a stream cipher
understand that decryption and encryption are identical in stream
cipher constructions, but this may not be clear to implementers.</t>
          <t>In summary, <xref target="RFC8439"/> serves as an excellent example of a
well-written cryptography specification, providing clear, precise, and
comprehensive information for implementers, researchers, and protocol <br/>
designers alike.  By studying and emulating the structure and content
of specifications like <xref target="RFC8439"/>, authors can create high-quality
specifications that cater to the diverse needs of their target
audiences.</t>
        </section>
      </section>
    </section>
    <section anchor="examples-of-specifications-that-could-be-improved">
      <name>Examples of Specifications That Could Be Improved</name>
      <t><xref target="RFC8032"/> is a specification that describes the Edwards-curve
Digital Signature Algorithm (EdDSA).  This specification had several
errata filed against it for corrections and has had documented
criticisms published online.</t>
      <section anchor="test-vectors-2">
        <name>Test Vectors</name>
        <t>The test vectors included in this document were not comprehensive and
did not cover all the cases described in the algorithm, resulting in
multiple incompatible implementations.  There were also issues with a
"greater than" comparison which should have been a "greater than or
equal to" which were not explicitly covered by the test vectors.</t>
      </section>
      <section anchor="unnecessary-branching">
        <name>Unnecessary Branching</name>
        <t>Some parts of EdDSA permit more than one verification path, which can
split implementations.  For Ed25519, <xref target="RFC8032"/> gives two options:
8<em>S</em>B = 8<em>R + 8</em>k<em>A' (where * denotes scalar multiplication, '
denotes a derived point, and = denotes equality) or S</em>B = R + k*A'
(shortcut).  The shortcut saves cycles but lets libraries disagree on
which signatures are valid.  Specs should avoid such optional
branches—especially performance-only shortcuts—to keep implementations
interoperable.</t>
      </section>
      <section anchor="compatibility-and-modularity">
        <name>Compatibility and Modularity</name>
        <t>EdDSA is a variant of the Schnorr signature scheme, but with some small
variations that make it incompatible with other related Schnorr
signature schemes.  This includes a "clamping" operation that makes
EdDSA keys and operations incompatible with x25519 (<xref target="RFC7748"/>).  Many
of the issues in the specification derive from the fact that the
specification was written to match an existing implementation rather
than define an algorithm.  This limited the authors from focusing on
compatibility with other related standards and primitives, resulting
in numerous issues.</t>
      </section>
    </section>
    <section anchor="conclusion">
      <name>Conclusion</name>
      <t>Quality matters in cryptographic specification writing.  This document
provides guidelines for writing effective cryptography specifications,
emphasizing the importance of catering to different audiences, such as
target audiences, with the end goal of enabling high-assurance
cryptographic software.  By focusing on simplicity, precision,
consistency, reusability, collaboration, and compromise, specification
writers can create documents that are easier to understand, implement,
and analyze.</t>
      <t>We have also discussed the representation of mathematical operations
and the importance of clearly defining security definitions and threat
models.  These elements are critical in ensuring that specifications
are not only technically accurate but also convey the necessary
information to properly assess the security properties of cryptographic
algorithms and protocols.</t>
      <t>Finally, we have examined a well-written example, <xref target="RFC8439"/>, to
demonstrate how these guidelines can be applied in practice, and by
highlighting specific sections of this specification, we have shown
how authors can create high-quality specifications that cater to the
diverse needs of their target audiences.</t>
      <t>In conclusion, the process of writing cryptography specifications is
both an art and a science.  The guidelines presented in this document
should serve as a foundation for authors, but it is essential to
remain open to feedback and collaboration with the broader community.
By doing so, we can continue to develop and refine the specifications
that underpin the secure and reliable communication systems of today
and the future.</t>
    </section>
    <section anchor="security-considerations-1">
      <name>Security Considerations</name>
      <t>This document discusses best practices for writing and editing
cryptography specifications.  It does not provide any guidance for the
semantic contents of those specifications.</t>
      <t>Poor specification practices can lead to serious security
vulnerabilities.  Ambiguous algorithm descriptions may result in
incompatible implementations with different security properties.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8439">
          <front>
            <title>ChaCha20 and Poly1305 for IETF Protocols</title>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This document defines the ChaCha20 stream cipher as well as the use of the Poly1305 authenticator, both as stand-alone algorithms and as a "combined mode", or Authenticated Encryption with Associated Data (AEAD) algorithm.</t>
              <t>RFC 7539, the predecessor of this document, was meant to serve as a stable reference and an implementation guide. It was a product of the Crypto Forum Research Group (CFRG). This document merges the errata filed against RFC 7539 and adds a little text to the Security Considerations section.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8439"/>
          <seriesInfo name="DOI" value="10.17487/RFC8439"/>
        </reference>
        <reference anchor="RFC8874">
          <front>
            <title>Working Group GitHub Usage Guidance</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="B. Stark" initials="B." surname="Stark"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document provides a set of guidelines for working groups that choose to use GitHub for their work.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8874"/>
          <seriesInfo name="DOI" value="10.17487/RFC8874"/>
        </reference>
        <reference anchor="RFC3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="B. Korver" initials="B." surname="Korver"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak. This document provides guidelines to RFC authors on how to write a good Security Considerations section. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
      </references>
    </references>
    <?line 1075?>

<!-- # Acknowledgments
{:numbered="false"} -->



  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA6192ZIc15ne/XmKHPBCAFTV4mpSTUnjZgOg4CGWAUBpJhwe
I6vqVHUKWZmlzKxuFEVGTDhiHA7PncO+83bjF/Gj6En8f/9ylszsJjVhBUV2
V1eePMu/fP96lsulG6qh9ufFva+P1cbXVeP7Ytt2xe+7aqiaXXHZnQ5Du+vK
w9WpeH3w62pbrcuhapv+nitXq85f08PyLf47fbxp1025p0E3XbkdllU3bJfr
bbdbrpPBln062PLDjx395HdtdzovqmbbujW9wjf9sT8vtmXde9cfV/uq7+nb
w+lAoz999eaJu2m7d7uuPR7iLJ603XFfvPK9L7v1VfE1/nrP0TQ/ca48Dldt
d+6KpSvof1VDoz8/K14f67q6Lhv+UOb+vFq/yz9vu915vh+XNMVjzfv0zTeX
/KV1NdACXpdN8aQrm3XVr1v5vD02A9b2bVMNflO8Hmi1fdFui4u972gX+Ft+
X1b1edFU66u2LvuzXt//88oP23+9w1/P1u0+m/7lWXFxVvy+bTfJ7C+vuqof
2sOV77K/yhrq9rjZ1mXnF8XTZn3Gf+mHzvvhvPjow4+KN+0N9h6z/P+3qHV5
86+vfHmg3VpVQ3/W+ME5nHS3JxK49nQoxasnl198+skv7ccvPv9Uf/zks88+
1h8///zTL+wLH35Cnzq3XC6LckUrKNc05purqi+IBo973wzFoWuvibL7YhcJ
vKSlrXyPP9IT1Vpp/kZo3g1+fUVHUNZFRqPypZSGMfjQrttahjx01b7CUvqF
G8pu55kyhitfNN5veF+q/aH2mJfv+kXRKY3yLzKCjOdowtWuoc/PiuLpUFxV
u6ua/j/0PByN0nYDnYTHmLdN12HEDR3Wse9phdgeYrDK2zp8yfPD2Ms/Hsua
Dnk8wnBVDgX4siuIsbKV+JJ4i2hxf6SzPy2IFtf1cYMBsdEyt8Z1/oBFNvwm
Oucrj8PGXNuD7+Qti6L362OH12/8tqLh5FOaPk0A0yz2LR1dfyYn3bSD//fM
/KOjpp9LbOHmuB54Y2i+d8iE4v7lk1dfPyAa5G9iRNrtfMh9eaJFNkNJX9pj
HyqaOu/KVdljJnSGa09HvqGlXlf+pth27Z7Hs8ONm8Sjy4uKw3FVV/2V7+27
JEewry48xqfnr33dHngqoNRr2hvfyzh9fGwP0uDZrCAmq6Fc1Z5PeeMPdXvC
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
dJKNw0TlRjax4UnJYl7c2NfayBvS4uYizFTotqcKh1M7loTCd5pae4USSqno
kc7SpUk+ekMo+V84zd2lJ5LdY2Eou2HH1HtNszLEy95Gq0hqVXl5e3OYTXIj
3MYTmwIUB7UGWdIfLcbO3skOZigPEdQLLIMJNhKR1TY/Gzjv0M2J/ZVPPZ8C
LjXrfLbXCHH9N2U/3C6UjQvHjX6588tSGLgezUXL0+i9/+b1i+dap/VAVSZh
UVQZlrjWp9cOCZMoSXL5gKQxqVQ6KTKWjESSyb3k67uBDrqvy4AKIk/ALC65
hO04vheSz5wlB1oHaDrh1BZKrqJFgXn0pVkS0vimOqkZY++bHmhZR8+8m2QU
ioMhLfFJ2nVX3L02wvVQS/Od/G3G1NZaJbOiEkuUheZl6tHxY2bOer1Z+6Os
m1jvsv45oytXJjaVVsAvInXrNa6h6jK/YqYOBYB2G0fa+K7s7YI4noJTrxAf
509pjnmWWJESzkhrlhIPxCI3uhPX1vjy9SzDY8YbNRPEqbhhqgL74M4rgjtP
kKjefjlxZkriFacrTi9/LjufeDJCM/xpToZRHUMDgyA09nvkZtfq+AMm9P78
x7NtXJZtk9mOo/hNMYrfJLSXpMYDckVPnXIW7gxNRJQuDmo+0znoi+HSN44c
/7ksm+n7zGA9jYT1t08zcSgKVEvCNwt3bGr1teMvnc/TXi3eMDd2OjSabkoS
O20EHhKHVQw22xrqU2qJWktQHEAqJtptvyjihb1syyc74oIjuEapTzkEL71e
Dp1TlAQGZuNhoSHy3OJnAi2NVl3XLslesGmqF7Q89GP3yUK0iQDbTq1Jbcip
JKOIAU/PSPiXxg2PQnzFvZwGqE3ihWtqQ90bZ+qNS1SzqzkU1SPTqj6FfpE/
QRW4GykktCvJyzxtP8/wkutkOBGtGnI1MJModZs2SFNCL14+FRKJpi+q9XtB
rupon856YW4QTFnJ/JScW6BmXMgzyc6aZspUndbzjCCldD9AYVFm0tqc2LWb
plyHOD7tKufE0OPIN5CqNU4FVPxbJGC8xB2K1ZarJINYuJGb02FMWvIwLuBm
R6fdCa9mGKY2EYmk1BtvgJ0taL0qI7lqU5WEccPCxazfJJJlxCVQCS2LNEg5
znuzFvOxViKPkptGG18qlhg0nMGP4MXmqCaiVh/Egg92AzFr3TdHCN+R6uGx
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
hCpWsGF+fW9LktXf+6FYLn/j/h8chuJsjbgAAA==

-->

</rfc>
