<?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.20 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mattsson-tls-compact-ecc-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Compact ECDSA and ECDHE">Compact ECDHE and ECDSA Encodings for TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-mattsson-tls-compact-ecc-02"/>
    <author initials="J." surname="Preuß Mattsson" fullname="John Preuß Mattsson">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>john.mattsson@ericsson.com</email>
      </address>
    </author>
    <date year="2023" month="January" day="19"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <t>The encodings used in the ECDHE groups secp256r1, secp384r1, and secp521r1 and the ECDSA signature algorithms ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, and ecdsa_secp521r1_sha512 have significant overhead and the ECDSA encoding produces variable-length signatures. This document defines new optimal fixed-length encodings and registers new ECDHE groups and ECDSA signature algorithms using these new encodings. The new encodings reduce the size of the ECDHE groups with 33, 49, and 67 bytes and the ECDSA algorithms with an average of 7 bytes. These new encodings also work in DTLS 1.3 and are especially useful in cTLS.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://emanjon.github.io/draft-mattsson-tls-compact-ecc/draft-mattsson-tls-compact-ecc.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mattsson-tls-compact-ecc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transport Layer Security Working Group mailing list (<eref target="mailto:tls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/emanjon/draft-mattsson-tls-compact-ecc"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The encodings used in the ECDHE groups secp256r1, secp384r1, and secp521r1 and the ECDSA signature algorithms ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, and ecdsa_secp521r1_sha512 have significant overhead and the ECDSA encodings produces variable-length signatures. This document defines new optimal fixed-length encodings and registers new ECDHE groups and ECDSA signature algorithms using these new encodings. The new encodings reduce the size of the ECDHE groups with 33, 49, and 67 bytes and the ECDSA algorithms with an average of 7 bytes. These new encodings also work in DTLS 1.3 <xref target="RFC9147"/> and are especially useful in cTLS <xref target="I-D.ietf-tls-ctls"/>. When secp256r1 and ecdsa_secp256r1_sha256 are used as a replacement for the the old encdodings they reduce the size of the TLS handshake with on average 80 bytes. The new encodings have the same security properties and requirements as the old encodings.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <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>
    </section>
    <section anchor="compact-ecdhe-encoding">
      <name>Compact ECDHE Encoding</name>
      <t>The encoding specified in <xref target="RFC8446"/> of the ECDHE groups secp256r1, secp384r1, and secp521r1 <xref target="RFC8422"/> have significant overhead. This document specifies a new optimal fixed-length encoding for the groups. The new encoding is defined as a compression of the UncompressedPointRepresentation structure. Given a UncompressedPointRepresentation structure <xref target="RFC8446"/></t>
      <artwork><![CDATA[
      struct {
          uint8 legacy_form = 4;
          opaque X[coordinate_length];
          opaque Y[coordinate_length];
      } UncompressedPointRepresentation;
]]></artwork>
      <t>the legacy_form and Y field are omitted to create a CompactRepresentation structure.</t>
      <artwork><![CDATA[
      struct {
          opaque X[coordinate_length];
      } CompactRepresentation;
]]></artwork>
      <t>The resulting groups are called secp256r1_compact, secp384r1_compact, and secp521r1_compact. The new encodings have CompactRepresentation structures of length 32, 48, and 66 bytes, and reduce the size with 33, 49, and 67 bytes respectively. For secp256r1_compact, secp384r1_compact, and secp521r1_compact the opaque key_exchange field contains the serialized value of the CompactRepresentation struct:</t>
      <table anchor="ecdhe-table">
        <name>Compact ECDHE Groups</name>
        <thead>
          <tr>
            <th align="right">Value</th>
            <th align="left">Description</th>
            <th align="right">Recommended</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">TBD1</td>
            <td align="left">secp256r1_compact</td>
            <td align="right">Y</td>
            <td align="left">[This-Document]</td>
          </tr>
          <tr>
            <td align="right">TBD2</td>
            <td align="left">secp384r1_compact</td>
            <td align="right">Y</td>
            <td align="left">[This-Document]</td>
          </tr>
          <tr>
            <td align="right">TBD3</td>
            <td align="left">secp521r1_compact</td>
            <td align="right">Y</td>
            <td align="left">[This-Document]</td>
          </tr>
        </tbody>
      </table>
      <section anchor="example-compact-ecdhe-encoding">
        <name>Example Compact ECDHE Encoding</name>
        <t>The following shows an example compact ECDHE encoding. <xref target="ecdhe-old"/> shows a 65 bytes ecdsa_secp256r1_sha256 UncompressedPointRepresentation structure.</t>
        <figure anchor="ecdhe-old">
          <name>secp256r1</name>
          <artwork><![CDATA[
          04 A6 DA 73 92 EC 59 1E 17 AB FD 53 59 64 B9 98
          94 D1 3B EF B2 21 B3 DE F2 EB E3 83 0E AC 8F 01
          51 81 26 77 C4 D6 D2 23 7E 85 CF 01 D6 91 0C FB
          83 95 4E 76 BA 73 52 83 05 34 15 98 97 E8 06 57
          80
]]></artwork>
        </figure>
        <t><xref target="ecdhe-new"/> shows the 32 bytes secp256r1_compact CompactRepresentation structure encoding of the same key share.</t>
        <figure anchor="ecdhe-new">
          <name>secp256r1_compact</name>
          <artwork><![CDATA[
          A6 DA 73 92 EC 59 1E 17 AB FD 53 59 64 B9 98 94
          D1 3B EF B2 21 B3 DE F2 EB E3 83 0E AC 8F 01 51
]]></artwork>
        </figure>
      </section>
      <section anchor="implementation-considerations-for-compact-representation">
        <name>Implementation Considerations for Compact Representation</name>
        <t>For compatibility with APIs a compressed y-coordinate might be required. For validation or for compatibility with APIs that do not support the full <xref target="SECG"/> format an uncompressed y-coordinate might be required (using the notation in <xref target="SECG"/>):</t>
        <ul spacing="normal">
          <li>If a compressed y-coordinate is required, then the value ~yp set to zero can be used. The compact representation described above can in such a case be transformed into the SECG point compressed format by prepending X with the single byte 0x02 (i.e., M = 0x02 || X).</li>
          <li>If an uncompressed y-coordinate is required, then a y-coordinate has to be calculated following Section 2.3.4 of <xref target="SECG"/> or Appendix C of <xref target="RFC6090"/>. Any of the square roots (see <xref target="SECG"/> or <xref target="RFC6090"/>) can be used. The uncompressed SECG format is M = 0x04 || X || Y.</li>
        </ul>
        <t>For example: The curve P-256 has the parameters (using the notation in <xref target="RFC6090"/>)</t>
        <ul spacing="normal">
          <li>p = 2<sup>256</sup> - 2<sup>224</sup> + 2<sup>192</sup> + 2<sup>96</sup> - 1</li>
          <li>a = -3</li>
          <li>b = 410583637251521421293261297800472684091144410159937255
54835256314039467401291</li>
        </ul>
        <t>Given an example x:</t>
        <ul spacing="normal">
          <li>x = 115792089183396302095546807154740558443406795108653336
398970697772788799766525</li>
        </ul>
        <t>we can calculate y as the square root w = (x<sup>3</sup> + a <contact fullname="⋅"/> x + b)<sup>((p + 1)/4)</sup> (mod p)</t>
        <ul spacing="normal">
          <li>y = 834387180070192806820075864918626005281451259964015754
16632522940595860276856</li>
        </ul>
        <t>Note that this does not guarantee that (x, y) is on the correct elliptic curve. A full validation according to Section 5.6.2.3.3 of <xref target="SP-800-56A"/> is done by also checking that 0 <contact fullname="≤"/> x &lt; p and that y<sup>2</sup> <contact fullname="≡"/> x<sup>3</sup> + a <contact fullname="⋅"/> x + b (mod p). The implementation <bcp14>MUST</bcp14> perform public-key validation.</t>
      </section>
    </section>
    <section anchor="compact-ecdsa-encoding">
      <name>Compact ECDSA Encoding</name>
      <t>The variable-length encoding of the ECDSA signature algorithms ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, and ecdsa_secp521r1_sha512 specified in <xref target="RFC8446"/> have significant overhead.</t>
      <t>This document specifies a new optimal fixed-length encoding for the algorithms. The new encoding is defined as a compression of the DER-encoded ECDSA-Sig-Value structure. Given a DER-encoded ECDSA-Sig-Value structure <xref target="RFC8422"/></t>
      <artwork><![CDATA[
      Ecdsa-Sig-Value ::= SEQUENCE {
          r       INTEGER,
          s       INTEGER
      }
]]></artwork>
      <t>the SEQUENCE type, INTEGER type, and length fields are omitted and if necessary the two INTEGER value fields are truncated (at most a single zero byte) or left padded with zeroes to the fixed length L. For secp256r1, secp384r1, and secp521r1, L is 32, 48, and 66 bytes respectively. The resulting signatures are called ecdsa_secp256r1_sha256_compact, ecdsa_secp384r1_sha384_compact, and ecdsa_secp521r1_sha512_compact and has length 64, 96, and 132 bytes respectively. The new encodings reduce the size of the signatures with an average of 7 bytes. For secp256r1_compact, secp384r1_compact, and secp521r1_compact the opaque signature field contains the compressed Ecdsa-Sig-Value.</t>
      <table anchor="ecdsa-table">
        <name>Compact ECDSA Signature Algorithms</name>
        <thead>
          <tr>
            <th align="right">Value</th>
            <th align="left">Description</th>
            <th align="right">Recommended</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">TBD4</td>
            <td align="left">ecdsa_secp256r1_sha256_compact</td>
            <td align="right">Y</td>
            <td align="left">[This-Document]</td>
          </tr>
          <tr>
            <td align="right">TBD5</td>
            <td align="left">ecdsa_secp384r1_sha384_compact</td>
            <td align="right">Y</td>
            <td align="left">[This-Document]</td>
          </tr>
          <tr>
            <td align="right">TBD6</td>
            <td align="left">ecdsa_secp521r1_sha512_compact</td>
            <td align="right">Y</td>
            <td align="left">[This-Document]</td>
          </tr>
        </tbody>
      </table>
      <section anchor="example-compact-ecdsa-encoding">
        <name>Example Compact ECDSA Encoding</name>
        <t>The following shows an example compact ECDSA encoding. <xref target="ecdsa-old"/> shows a 71 bytes DER encoded ecdsa_secp256r1_sha256 ECDSA-Sig-Value structure. The values on the left are the ASN.1 tag (in hexadecimal) and the length (in decimal).</t>
        <figure anchor="ecdsa-old">
          <name>ecdsa_secp256r1_sha256</name>
          <artwork><![CDATA[
30  69: SEQUENCE {
02  33:  INTEGER
          00 D7 A4 D3 4B D5 4F 55 FE E1 A8 96 25 67 8C 3D
          D5 E5 F6 0D AC 73 EC 94 0C 5C 7B 93 04 A0 20 84
          A9
02  32:  INTEGER
          28 9F 59 5E D4 88 B9 AC 68 9A 3D 19 2B 1A 8B B3
          8F 34 AF 78 74 C0 59 C9 80 6A 1F 38 26 93 53 E8
          }
]]></artwork>
        </figure>
        <t><xref target="ecdsa-new"/> shows the 64 bytes ecdsa_secp256r1_sha256_compact encoding of the same signature.</t>
        <figure anchor="ecdsa-new">
          <name>ecdsa_secp256r1_sha256_compact</name>
          <artwork><![CDATA[
          D7 A4 D3 4B D5 4F 55 FE E1 A8 96 25 67 8C 3D D5
          E5 F6 0D AC 73 EC 94 0C 5C 7B 93 04 A0 20 84 A9
          28 9F 59 5E D4 88 B9 AC 68 9A 3D 19 2B 1A 8B B3
          8F 34 AF 78 74 C0 59 C9 80 6A 1F 38 26 93 53 E8
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The new encodings are just encodings and have the same security properties and security requirements as the old encodings. Compact representation of a ECDHE key share produces the same shared secret as the uncompressed encoding and does not change any requirements on point validation, the peers <bcp14>MUST</bcp14> validate each other's public key shares.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to update the TLS Supported Groups registry <xref target="RFC8447"/> under the Transport Layer Security (TLS) Parameters heading with the contents of <xref target="ecdhe-table"/>.</t>
      <t>IANA is requested to update the TLS SignatureScheme registry <xref target="RFC8447"/> under the Transport Layer Security (TLS) Parameters heading with the contents of <xref target="ecdsa-table"/>.</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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
        <reference anchor="RFC8422">
          <front>
            <title>Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier</title>
            <author fullname="Y. Nir" initials="Y." surname="Nir">
              <organization/>
            </author>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <author fullname="M. Pegourie-Gonnard" initials="M." surname="Pegourie-Gonnard">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes key exchange algorithms based on Elliptic Curve Cryptography (ECC) for the Transport Layer Security (TLS) protocol.  In particular, it specifies the use of Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) key agreement in a TLS handshake and the use of the Elliptic Curve Digital Signature Algorithm (ECDSA) and Edwards-curve Digital Signature Algorithm (EdDSA) as authentication mechanisms.</t>
              <t>This document obsoletes RFC 4492.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8422"/>
          <seriesInfo name="DOI" value="10.17487/RFC8422"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8447">
          <front>
            <title>IANA Registry Updates for TLS and DTLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes a number of changes to TLS and DTLS IANA registries that range from adding notes to the registry all the way to changing the registration policy.  These changes were mostly motivated by WG review of the TLS- and DTLS-related registries undertaken as part of the TLS 1.3 development process.</t>
              <t>This document updates the following RFCs: 3749, 5077, 4680, 5246, 5705, 5878, 6520, and 7301.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8447"/>
          <seriesInfo name="DOI" value="10.17487/RFC8447"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC6090">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew">
              <organization/>
            </author>
            <author fullname="K. Igoe" initials="K." surname="Igoe">
              <organization/>
            </author>
            <author fullname="M. Salter" initials="M." surname="Salter">
              <organization/>
            </author>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier.  These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years.  Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu">
              <organization/>
            </author>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="I-D.ietf-tls-ctls">
          <front>
            <title>Compact TLS 1.3</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Google</organization>
            </author>
            <date day="3" month="January" year="2023"/>
            <abstract>
              <t>   This document specifies a "compact" version of TLS and DTLS.  It is
   logically isomorphic to ordinary TLS, but saves space by trimming
   obsolete material, tighter encoding, a template-based specialization
   technique, and alternative cryptographic techniques. cTLS is not
   directly interoperable with TLS or DTLS, but it should eventually be
   possible for a single server port to offer cTLS alongside TLS or
   DTLS.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ctls-07"/>
        </reference>
        <reference anchor="SECG" target="https://www.secg.org/sec1-v2.pdf">
          <front>
            <title>Standards for Efficient Cryptography 1 (SEC 1)</title>
            <author>
              <organization/>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
        <reference anchor="SP-800-56A" target="https://doi.org/10.6028/NIST.SP.800-56Ar3">
          <front>
            <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
            <author initials="E." surname="Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen">
              <organization/>
            </author>
            <author initials="A." surname="Roginsky">
              <organization/>
            </author>
            <author initials="A." surname="Vassilev">
              <organization/>
            </author>
            <author initials="R." surname="Davis">
              <organization/>
            </author>
            <date year="2018" month="April"/>
          </front>
          <seriesInfo name="NIST" value="Special Publication 800-56A Revision 3"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors want to thank
<contact fullname="Dan Brown"/>,
<contact fullname="Scott Fluhrer"/>,
and
<contact fullname="Erik Thormarker"/>
for their valuable comments and feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
tO0ArSwAAA==

-->

</rfc>
