<?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.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-cryptography-specification-00" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="Crypto Specs">Guidelines for Writing Cryptography Specifications</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-cryptography-specification-00"/>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cloudflare, Inc.</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>nick@cloudflare.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="2023" month="July" day="10"/>
    <abstract>
      <?line 37?>

<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 removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/grittygrease/draft-sullivan-cryptography-specification"/>.</t>
    </note>
  </front>
  <middle>
    <?line 47?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>High-quality cryptography specifications are critical for the for development
and deployment of secure cryptographic protocols. This document provides
guidelines for specification writers to follow to help ensure that their
specifications are of high quality and are useful for their intended audience.
This document provides guidelines for writing clear, precise, and consistent
specifications covering topics such as representing mathematical operations,
defining security definitions, and describing threat models. 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. 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>Minimize ambiguity and misinterpretations, leading to clearer specifications
and more accurate implementations.</li>
        <li>Ensure consistent and correct implementations by providing a clear
description of both algorithms and their underlying mathematical foundation.</li>
        <li>Facilitate review and analysis by the research community, allowing for the
verification of security properties and the identification of potential
vulnerabilities.</li>
        <li>Enable interoperability of implementations of these specifications, promoting
collaboration and compatibility between various systems and protocols.</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>Engineering community: This community identifies technical problems to be
solved and have the skills and resources necessary to build solutions using
computing tools. Engineers focus on why certain 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.</li>
        <li>Research community: Researchers
are experts who explore the design space of different subject areas and
evaluate potential solutions to problems with the goal of better understanding
a topic. This group develops methods for designing tools and performing
experiments to validate hypotheses. The research community 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.</li>
        <li>Standardization community: This group is responsible for developing
technical specifications of protocols that others can implement, analyze, and
verify. The standardization community produces technical specifications that
capture the details of a solution. These specifications serve as a foundation
for creating interoperable systems and ensuring the correct implementation of
cryptographic algorithms and protocols.</li>
      </ol>
      <t>By following these guidelines and addressing the distinct needs of each
stakeholder group, specification authors can create well-structured,
informative specfications 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, specification 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, specification authors should focus on:</t>
        <ul spacing="normal">
          <li>Clearly defining the problem: 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. Ideally,
each specification addresses precisely one clearly defined problem.</li>
          <li>Reducing complex concepts to component parts: When explaing with 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.</li>
          <li>Using straightforward language and terminology: Write the specification using
clear, concise language, and consistent and broadly understood terminology.</li>
          <li>Avoid overly technical jargon, and define any terms that may be unfamiliar to
some readers.  Limiting scope: 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.</li>
          <li>Providing clear examples and diagrams: Include examples and visual aids, such
as diagrams or visualizations, to help illustrate complex concepts or
processes. These tools can greatly improve the readability and understanding
of the specification.</li>
        </ul>
        <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 a crucial aspect of writing high-quality specifications,
particularly for cryptography, where small deviations or ambiguities can lead
to severe security vulnerabilities. A precise specification ensures that
resulting implementations are consistent and correct, and that any analysis
done matches the specification.</t>
        <t>To achieve precision in your specifications, consider the following recommendations:</t>
        <ol spacing="normal" type="1"><li>Use clear and concise language: Write your specification using
straightforward and unambiguous language. Avoid 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.</li>
          <li>Provide explicit instructions and avoid undefined behavior: When describing
algorithms, protocols, or procedures, provide step-by-step instructions that
can be easily followed by implementers with minimal or zero risk of
misinterpretation. This will help ensure that all implementations are
consistent with the intended design and minimize the risk of errors or
vulnerabilities.</li>
          <li>Provide test vectors. Test vectors help 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.</li>
          <li>Employ formal notation or pseudocode: Using formal notation or pseudocode
can help provide a precise description of algorithms, data structures, and
protocols. This will ensure that implementers, researchers, and protocol
designers can accurately understand the intended behavior and interactions of
the components within the specification.</li>
          <li>Specify data formats and encodings: Clearly define data formats, encoding
schemes, and serialization methods for all data types used in the
specification. This will help ensure that different implementations can
interoperate seamlessly and reduce the likelihood of incompatibilities or
communication errors.</li>
          <li>Document assumptions and dependencies: Clearly state 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 will help implementers and researchers understand the context
in which your specification operates and any potential limitations or risks.</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>When a document is self-consistent and consistent with the expectations of
documents of its type, it helps reduce ambiguity and is easier to consume.
Ensuring consistency across concepts, vocabulary, language, and presentation
helps lower the cognitive load necessary for readers to understand and work
with the specification. To achieve consistency in your specifications, consider
the following recommendations:</t>
        <ol spacing="normal" type="1"><li>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.</li>
          <li>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.</li>
          <li>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.</li>
          <li>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.</li>
          <li>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.</li>
          <li>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.</li>
          <li>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.</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>Mathematical operations are fundamental to cryptographic algorithms and
protocols, and their clear and precise representation in specifications is
crucial for correct implementation and analysis. This section provides
guidelines for representing mathematical operations in cryptography
specifications in a way that is both comprehensible and unambiguous to the
target audiences, including implementers, researchers, and protocol designers.</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. 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>Specification authors should use standard mathematical symbols to represent
mathematical operations whenever possible. This approach promotes clarity and
reduces the risk of misinterpretation. It is important to remember that some
symbols may have different meanings in different contexts or disciplines. In
such cases, specification authors should clarify the intended meaning of a
symbol within the context of the specification. For example, when describing
group operations using multiplicative notation, the multiplication symbol *
should be used instead of the x symbol.</t>
          </section>
          <section anchor="explicitly-defining-custom-operations">
            <name>Explicitly Defining Custom Operations</name>
            <t>When a specification requires custom mathematical operations or notation, these
should be explicitly defined and accompanied by clear explanations and
examples. Specification authors should take care to minimize the use of custom
operations to avoid creating unnecessary complexity and potential confusion.
When using custom operations, it is essential to ensure their definitions are
unambiguous and easily understandable to the target audiences. A glossary of
terms <bcp14>MAY</bcp14> be useful when there are multiple custom or uncommon operations
introduced in the specification.</t>
          </section>
          <section anchor="pseudocode-and-algorithmic-descriptions">
            <name>Pseudocode and Algorithmic Descriptions</name>
            <t>Providing algorithmic descriptions or pseudocode alongside mathematical
expressions can greatly improve the clarity of a specification, particularly
for implementers. Pseudocode should be clear, concise, and closely resemble the
structure of actual programming languages. Including comments and explanations
within the pseudocode can further enhance its readability and ease of
understanding. Consistent notation for describing loops or if/then statements
should be used throughout the document.</t>
          </section>
          <section anchor="visual-representations">
            <name>Visual Representations</name>
            <t>Visual representations, such as diagrams, tables or visualizations, can be a
valuable tool for conveying complex mathematical concepts or relationships in a
more digestible form. When including visual representations, specification
authors should ensure they are clear, accurately labeled, and consistent with
the overall notation system.</t>
          </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. By doing so, specification 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 authors 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.</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. Well-defined interfaces enable
developers to understand and interact with a component without needing to know
the details of its internal implementation. 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. 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 help make the job of using the object in higher-level algorithms
easier and less prone to code duplication.</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>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. 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>
        </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. The formal definitions
should be accompanied by clear explanations and examples to make them more
accessible to implementers and protocol designers who may not be familiar with
formal methods.</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.</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, specification 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. Following these guidelines
and the recommendations from <xref target="RFC3552"/> help make for a robust security
considerations section for the specification. Having a complete discussion of
the threat model and security definitions helps prevent the use of
cryptographic algorithms in insecure contexts.</t>
        </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. To cater to implementers:</t>
        <ul spacing="normal">
          <li>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.</li>
          <li>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).</li>
          <li>Clearly indicate any optional features, variations, or extensions, specifying
their impact on interoperability and security.</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>Typical test cases that exercise all logical pathways within an algorithm</li>
            <li>All valid but degenerate cases that result in error or early exit of an algorithm</li>
            <li>Exceptions that can be reached by attacker-controlled inputs</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>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.</li>
          <li>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.</li>
          <li>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.</li>
          <li>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.</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>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.</li>
          <li>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.</li>
          <li>Explain any dependencies or interactions with other protocols, primitives, or
system components, highlighting potential compatibility or interoperability
issues.</li>
          <li>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.</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. 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,
specification 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,
specification authors can build consensus and develop a more robust
specification.</t>
      </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 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 components of the cryptographic algorithms in EdDSA had branches that
sometimes led to different implementation behavior. In particular, in the
verification step for Ed25519, the following text exists: "Check the group
equation [8][S]B = [8]R + [8][k]A'.  It's sufficient, but not
required, to instead check [S]B = R + [k]A'." This alternative branch has
led to disagreement between what signatures are valid or not, which has a
profound effect on applications. Minimizing and removing similar branches -
especially those that exist in the name of performance - should be a goal of
all cryptographic specifications.</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>This document provides guidelines for writing effective cryptography
specifications, emphasizing the importance of catering to different audiences,
such as implementers, researchers, and protocol designers, with the end goal of
enabling high-assurance cryptographic software. By focusing on simplicity,
precision, consistency, reusability, collaboration, and compromise,
specification authors 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. 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>
    </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="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>
        <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 839?>

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



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

-->

</rfc>
