<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-lamps-crmf-update-algs-07" indexInclude="true" ipr="pre5378Trust200902" number="9045" prepTime="2021-06-08T15:42:16" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" updates="4211" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-lamps-crmf-update-algs-07" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9045" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="CRMF Algorithm Requirements Update">Algorithm Requirements Update to the Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)</title>
    <seriesInfo name="RFC" value="9045" stream="IETF"/>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security" showOnFrontPage="true">Vigil Security, LLC</organization>
      <address>
        <postal>
          <street>516 Dranesville Road</street>
          <city>Herndon</city>
          <region>VA</region>
          <code>20170</code>
          <country>United States of America</country>
        </postal>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <date month="06" year="2021"/>
    <area>Security</area>
    <keyword>Authentication</keyword>
    <keyword>Message Authentication Code</keyword>
    <keyword>Password-Based Message Authentication Code</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document updates the cryptographic algorithm requirements for the
Password-Based Message Authentication Code in the Internet X.509 Public
Key Infrastructure Certificate Request Message Format (CRMF) specified in
RFC 4211.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9045" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2021 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
        <t indent="0" pn="section-boilerplate.2-3">
            This document may contain material from IETF Documents or IETF
            Contributions published or made publicly available before November
            10, 2008. The person(s) controlling the copyright in some of this
            material may not have granted the IETF Trust the right to allow
            modifications of such material outside the IETF Standards Process.
            Without obtaining an adequate license from the person(s)
            controlling the copyright in such materials, this document may not
            be modified outside the IETF Standards Process, and derivative
            works of it may not be created outside the IETF Standards Process,
            except to format it for publication as an RFC or to translate it
            into languages other than English.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-signature-key-pop">Signature Key POP</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-password-based-message-auth">Password-Based Message Authentication Code</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction-paragraph">Introduction Paragraph</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-one-way-function">One-Way Function</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iteration-count">Iteration Count</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-mac-algorithm">MAC Algorithm</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">This document updates the cryptographic algorithm requirements for the
Password-Based Message Authentication Code (MAC) in the Internet X.509
Public Key Infrastructure Certificate Request Message Format (CRMF)
<xref target="RFC4211" format="default" sectionFormat="of" derivedContent="RFC4211"/>.  The algorithms specified in <xref target="RFC4211" format="default" sectionFormat="of" derivedContent="RFC4211"/> were appropriate in
2005; however, these algorithms are no longer considered the best
choices:

</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-2">
        <li pn="section-1-2.1">HMAC-SHA1 <xref target="HMAC" format="default" sectionFormat="of" derivedContent="HMAC"/> <xref target="SHS" format="default" sectionFormat="of" derivedContent="SHS"/> is not broken yet, but there are much stronger alternatives <xref target="RFC6194" format="default" sectionFormat="of" derivedContent="RFC6194"/>.</li>
        <li pn="section-1-2.2">DES-MAC <xref target="PKCS11" format="default" sectionFormat="of" derivedContent="PKCS11"/> provides 56 bits of security, which is no longer considered secure <xref target="WITHDRAW" format="default" sectionFormat="of" derivedContent="WITHDRAW"/>.</li>
        <li pn="section-1-2.3">Triple-DES-MAC <xref target="PKCS11" format="default" sectionFormat="of" derivedContent="PKCS11"/> provides 112 bits of security, which is now deprecated <xref target="TRANSIT" format="default" sectionFormat="of" derivedContent="TRANSIT"/>.</li>
      </ul>
      <t indent="0" pn="section-1-3">This update specifies algorithms that are more appropriate today.</t>
      <t indent="0" pn="section-1-4">CRMF is defined using Abstract Syntax Notation One (ASN.1) <xref target="X680" format="default" sectionFormat="of" derivedContent="X680"/>.</t>
    </section>
    <section anchor="terms" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <section anchor="signature-key-pop" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-signature-key-pop">Signature Key POP</name>
      <t indent="0" pn="section-3-1"><xref target="RFC4211" sectionFormat="of" section="4.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4211#section-4.1" derivedContent="RFC4211"/> specifies the proof-of-possession (POP)
processing.  This section is updated to explicitly allow the use
of the PBMAC1 algorithm presented in <xref target="RFC8018" sectionFormat="of" section="7.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8018#section-7.1" derivedContent="RFC8018"/>.</t>
      <t indent="0" pn="section-3-2">OLD:</t>
      <blockquote pn="section-3-3">
       algId identifies the algorithm used to compute the MAC value.  All
   implementations <bcp14>MUST</bcp14> support id-PasswordBasedMAC.  The details on
   this algorithm are presented in section <xref target="RFC4211" sectionFormat="bare" section="4.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4211#section-4.4" derivedContent="RFC4211"/>.
 </blockquote>
      <t indent="0" pn="section-3-4">NEW:</t>
      <blockquote pn="section-3-5">
        algId identifies the algorithm used to compute the MAC value.  All
   implementations <bcp14>MUST</bcp14> support id-PasswordBasedMAC as presented in
   <xref target="RFC4211" sectionFormat="of" section="4.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4211#section-4.4" derivedContent="RFC4211"/>.  Implementations <bcp14>MAY</bcp14> also support
   PBMAC1 as presented in <xref target="RFC8018" sectionFormat="of" section="7.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8018#section-7.1" derivedContent="RFC8018"/>.
</blockquote>
    </section>
    <section anchor="password-based-message-authentication-code" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-password-based-message-auth">Password-Based Message Authentication Code</name>
      <t indent="0" pn="section-4-1"><xref target="RFC4211" sectionFormat="of" section="4.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4211#section-4.4" derivedContent="RFC4211"/> specifies a Password-Based MAC that relies on
a one-way function to compute a symmetric key from the password and a MAC
algorithm.  This section specifies algorithm requirements for the one-way
function and the MAC algorithm.</t>
      <section anchor="introduction-paragraph" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-introduction-paragraph">Introduction Paragraph</name>
        <t indent="0" pn="section-4.1-1">Add guidance about limiting the use of the password as follows:</t>
        <t indent="0" pn="section-4.1-2">OLD:</t>
        <blockquote pn="section-4.1-3">
          This MAC algorithm was designed to take a shared secret (a password)
   and use it to compute a check value over a piece of information.  The
   assumption is that, without the password, the correct check value
   cannot be computed.  The algorithm computes the one-way function
   multiple times in order to slow down any dictionary attacks against
   the password value.
</blockquote>
        <t indent="0" pn="section-4.1-4">NEW:</t>
        <blockquote pn="section-4.1-5">
          This MAC algorithm was designed to take a shared secret (a password)
   and use it to compute a check value over a piece of information.  The
   assumption is that, without the password, the correct check value
   cannot be computed.  The algorithm computes the one-way function
   multiple times in order to slow down any dictionary attacks against
   the password value.  The password used to compute this MAC <bcp14>SHOULD NOT</bcp14>
   be used for any other purpose.
  </blockquote>
      </section>
      <section anchor="one-way-function" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-one-way-function">One-Way Function</name>
        <t indent="0" pn="section-4.2-1">Change the paragraph describing the "owf" as follows:</t>
        <t indent="0" pn="section-4.2-2">OLD:</t>
        <blockquote pn="section-4.2-3">
          owf identifies the algorithm and associated parameters used to
   compute the key used in the MAC process.  All implementations <bcp14>MUST</bcp14>
   support SHA-1.
</blockquote>
        <t keepWithNext="true" indent="0" pn="section-4.2-4">NEW:</t>
        <blockquote pn="section-4.2-5">
          owf identifies the algorithm and associated parameters used to
   compute the key used in the MAC process.  All implementations <bcp14>MUST</bcp14>
   support SHA-256 <xref target="SHS" format="default" sectionFormat="of" derivedContent="SHS"/>.
</blockquote>
      </section>
      <section anchor="iteration-count" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-iteration-count">Iteration Count</name>
        <t indent="0" pn="section-4.3-1">Update the guidance on appropriate iteration count values as follows:</t>
        <t indent="0" pn="section-4.3-2">OLD:</t>
        <blockquote pn="section-4.3-3">
          iterationCount identifies the number of times the hash is applied
   during the key computation process.  The iterationCount <bcp14>MUST</bcp14> be a
   minimum of 100.  Many people suggest using values as high as 1000
   iterations as the minimum value.  The trade off here is between
   protection of the password from attacks and the time spent by the
   server processing all of the different iterations in deriving
   passwords.  Hashing is generally considered a cheap operation but
   this may not be true with all hash functions in the future.
  </blockquote>
        <t indent="0" pn="section-4.3-4">NEW:</t>
        <blockquote pn="section-4.3-5">
          iterationCount identifies the number of times the hash is applied
   during the key computation process.  The iterationCount <bcp14>MUST</bcp14> be a
   minimum of 100; however, the iterationCount <bcp14>SHOULD</bcp14> be as large as
   server performance will allow, typically at least 10,000
   <xref target="DIGALM" format="default" sectionFormat="of" derivedContent="DIGALM"/>.  There is a trade-off between protection of the
   password from attacks and the time spent by the server processing
   the iterations.  As part of that trade-off, an iteration count
   smaller than 10,000 can be used when automated generation produces
   shared secrets with high entropy.
      </blockquote>
      </section>
      <section anchor="mac-algorithm" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-mac-algorithm">MAC Algorithm</name>
        <t indent="0" pn="section-4.4-1">Change the paragraph describing the "mac" as follows:</t>
        <t indent="0" pn="section-4.4-2">OLD:</t>
        <blockquote pn="section-4.4-3">
          mac identifies the algorithm and associated parameters of the MAC
   function to be used.  All implementations <bcp14>MUST</bcp14> support HMAC-SHA1
   <xref target="HMAC" format="default" sectionFormat="of" derivedContent="HMAC"/>.  All implementations <bcp14>SHOULD</bcp14> support DES-MAC and Triple-DES-MAC <xref target="PKCS11" format="default" sectionFormat="of" derivedContent="PKCS11"/>.
      </blockquote>
        <t keepWithNext="true" indent="0" pn="section-4.4-4">NEW:</t>
        <blockquote pn="section-4.4-5">
          mac identifies the algorithm and associated parameters of the MAC
   function to be used.  All implementations <bcp14>MUST</bcp14> support HMAC-SHA256
   <xref target="HMAC" format="default" sectionFormat="of" derivedContent="HMAC"/>.  All implementations <bcp14>SHOULD</bcp14> support AES-GMAC <xref target="AES" format="default" sectionFormat="of" derivedContent="AES"/> <xref target="GMAC" format="default" sectionFormat="of" derivedContent="GMAC"/>
   with a 128-bit key.
	     </blockquote>
        <t indent="0" pn="section-4.4-6">For convenience, the identifiers for these two algorithms are
repeated here.</t>
        <t indent="0" pn="section-4.4-7">The ASN.1 algorithm identifier for HMAC-SHA256 is defined in <xref target="RFC4231" format="default" sectionFormat="of" derivedContent="RFC4231"/>:</t>
        <sourcecode name="" type="asn.1" markers="false" pn="section-4.4-8">
   id-hmacWithSHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
      us(840) rsadsi(113549) digestAlgorithm(2) 9 }
</sourcecode>
        <t indent="0" pn="section-4.4-9">When this object identifier is used in the ASN.1 algorithm identifier, the
parameters <bcp14>SHOULD</bcp14> be present.  When present, the parameters <bcp14>MUST</bcp14> contain a
type of NULL as specified in <xref target="RFC4231" format="default" sectionFormat="of" derivedContent="RFC4231"/>.</t>
        <t indent="0" pn="section-4.4-10">The ASN.1 algorithm identifier for AES-GMAC <xref target="AES" format="default" sectionFormat="of" derivedContent="AES"/> <xref target="GMAC" format="default" sectionFormat="of" derivedContent="GMAC"/> with a 128-bit
key is defined in <xref target="RFC9044" format="default" sectionFormat="of" derivedContent="RFC9044"/>:</t>
        <sourcecode name="" type="asn.1" markers="false" pn="section-4.4-11">
   id-aes128-GMAC OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
      country(16) us(840) organization(1) gov(101) csor(3)
      nistAlgorithm(4) aes(1) 9 }
</sourcecode>
        <t indent="0" pn="section-4.4-12">When this object identifier is used in the ASN.1 algorithm identifier, the
parameters <bcp14>MUST</bcp14> be present, and the parameters <bcp14>MUST</bcp14> contain the
GMACParameters structure as follows:</t>
        <sourcecode name="" type="asn.1" markers="false" pn="section-4.4-13">
   GMACParameters ::= SEQUENCE {
      nonce        OCTET STRING,
      length       MACLength DEFAULT 12 }

   MACLength ::= INTEGER (12 | 13 | 14 | 15 | 16)
</sourcecode>
        <t indent="0" pn="section-4.4-14">The GMACParameters nonce parameter is the GMAC initialization vector.  The
nonce may have any number of bits between 8 and (2^64)-1, but it <bcp14>MUST</bcp14> be a
multiple of 8 bits.  Within the scope of any GMAC key, the nonce value
<bcp14>MUST</bcp14> be unique.  A nonce value of 12 octets can be processed more
efficiently, so that length for the nonce value is <bcp14>RECOMMENDED</bcp14>.</t>
        <t indent="0" pn="section-4.4-15">The GMACParameters length parameter field tells the size of the
message authentication code in octets.  GMAC supports lengths between
12 and 16 octets, inclusive.  However, for use with CRMF, the maximum
length of 16 octets <bcp14>MUST</bcp14> be used.</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-5-1">This document has no IANA actions.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">The security of the Password-Based MAC relies on the number of times the
hash function is applied as well as the entropy of the shared secret (the
password).  Hardware support for hash calculation is available at very low
cost <xref target="PHS" format="default" sectionFormat="of" derivedContent="PHS"/>, which reduces the protection provided by a high iterationCount
value.  Therefore, the entropy of the password is crucial for the security of
the Password-Based MAC function.  In 2010, researchers showed that about half
of the real-world passwords in a leaked corpus can be broken with less than
150 million trials, indicating a median entropy of only 27 bits <xref target="DMR" format="default" sectionFormat="of" derivedContent="DMR"/>.  Higher
entropy can be achieved by using randomly generated strings.  For example,
assuming an alphabet of 60 characters, a randomly chosen password with 10 characters
offers 59 bits of entropy, and 20 characters offers 118 bits of entropy.  Using
a one-time password also increases the security of the MAC, assuming that the
integrity-protected transaction will complete before the attacker is able to
learn the password with an offline attack.</t>
      <t indent="0" pn="section-6-2">Please see <xref target="RFC8018" format="default" sectionFormat="of" derivedContent="RFC8018"/> for security considerations related to PBMAC1.</t>
      <t indent="0" pn="section-6-3">Please see <xref target="HMAC" format="default" sectionFormat="of" derivedContent="HMAC"/> and <xref target="SHS" format="default" sectionFormat="of" derivedContent="SHS"/> for security considerations related to HMAC-SHA256.</t>
      <t indent="0" pn="section-6-4">Please see <xref target="AES" format="default" sectionFormat="of" derivedContent="AES"/> and <xref target="GMAC" format="default" sectionFormat="of" derivedContent="GMAC"/> for security considerations related to AES-GMAC.</t>
      <t indent="0" pn="section-6-5">Cryptographic algorithms age; they become weaker with time.  As new
cryptanalysis techniques are developed and computing capabilities
improve, the work required to break a particular cryptographic
algorithm will reduce, making an attack on the algorithm more
feasible for more attackers.  While it is unknown how cryptanalytic
attacks will evolve, it is certain that they will get better.  It is
unknown how much better they will become or when the advances will
happen.  For this reason, the algorithm requirements for CRMF are
updated by this specification.</t>
      <t indent="0" pn="section-6-6">When a Password-Based MAC is used, implementations must protect the
password and the MAC key.  Compromise of either the password or the MAC
key may result in the ability of an attacker to undermine authentication.</t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="AES" quoteTitle="true" target="https://doi.org/10.6028/NIST.FIPS.197" derivedAnchor="AES">
          <front>
            <title>Advanced Encryption Standard (AES)</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date year="2001" month="November"/>
          </front>
          <seriesInfo name="FIPS PUB" value="197"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.197"/>
        </reference>
        <reference anchor="GMAC" quoteTitle="true" target="https://doi.org/10.6028/NIST.SP.800-38D" derivedAnchor="GMAC">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
            <author surname="Dworkin" initials="M."/>
            <date year="2007" month="November"/>
          </front>
          <seriesInfo name="NIST Special Publication" value="800-38D"/>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-38D"/>
        </reference>
        <reference anchor="HMAC" target="https://www.rfc-editor.org/info/rfc2104" quoteTitle="true" derivedAnchor="HMAC">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Bellare" fullname="M. Bellare">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Canetti" fullname="R. Canetti">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="February"/>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">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="RFC4211" target="https://www.rfc-editor.org/info/rfc4211" quoteTitle="true" derivedAnchor="RFC4211">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)</title>
            <author initials="J." surname="Schaad" fullname="J. Schaad">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="September"/>
            <abstract>
              <t indent="0">This document describes the Certificate Request Message Format (CRMF) syntax and semantics.  This syntax is used to convey a request for a certificate to a Certification Authority (CA), possibly via a Registration Authority (RA), for the purposes of X.509 certificate production.  The request will typically include a public key and the associated registration information.  This document does not define a certificate request protocol.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4211"/>
          <seriesInfo name="DOI" value="10.17487/RFC4211"/>
        </reference>
        <reference anchor="RFC8018" target="https://www.rfc-editor.org/info/rfc8018" quoteTitle="true" derivedAnchor="RFC8018">
          <front>
            <title>PKCS #5: Password-Based Cryptography Specification Version 2.1</title>
            <author initials="K." surname="Moriarty" fullname="K. Moriarty" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Kaliski" fullname="B. Kaliski">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Rusch" fullname="A. Rusch">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="January"/>
            <abstract>
              <t indent="0">This document provides recommendations for the implementation of password-based cryptography, covering key derivation functions, encryption schemes, message authentication schemes, and ASN.1 syntax identifying the techniques.</t>
              <t indent="0">This document represents a republication of PKCS #5 v2.1 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series.  By publishing this RFC, change control is transferred to the IETF.</t>
              <t indent="0">This document also obsoletes RFC 2898.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8018"/>
          <seriesInfo name="DOI" value="10.17487/RFC8018"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">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="RFC9044" target="https://www.rfc-editor.org/info/rfc9044" quoteTitle="true" derivedAnchor="RFC9044">
          <front>
            <title>Using the AES-GMAC Algorithm with the Cryptographic Message Syntax (CMS)</title>
            <author initials="R." surname="Housley" fullname="Russ Housley">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="May" year="2021"/>
          </front>
          <seriesInfo name="RFC" value="9044"/>
          <seriesInfo name="DOI" value="10.17487/RFC9044"/>
        </reference>
        <reference anchor="SHS" quoteTitle="true" target="https://doi.org/10.6028/NIST.FIPS.180-4" derivedAnchor="SHS">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <seriesInfo name="FIPS PUB" value="180-4"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/>
        </reference>
        <reference anchor="X680" quoteTitle="true" derivedAnchor="X680">
          <front>
            <title>Information technology -- Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
        </reference>
      </references>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="DIGALM" quoteTitle="true" target="https://doi.org/10.6028/NIST.SP.800-63B" derivedAnchor="DIGALM">
          <front>
            <title>Digital Identity Guidelines: Authentication and Lifecycle Management</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date year="2017" month="June"/>
          </front>
          <seriesInfo name="NIST Special Publication" value="800-63B"/>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-63B"/>
        </reference>
        <reference anchor="DMR" quoteTitle="true" target="https://doi.org/10.1109/INFCOM.2010.5461951" derivedAnchor="DMR">
          <front>
            <title>Password Strength: An Empirical Analysis</title>
            <author initials="M." surname="Dell'Amico">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Michiardi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Roudier">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2010" month="March"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/INFCOM.2010.5461951"/>
        </reference>
        <reference anchor="PHS" quoteTitle="true" derivedAnchor="PHS">
          <front>
            <title>Energy Efficient Bitcoin Mining to Maximize the Mining Profit: Using Data from 119 Bitcoin Mining Hardware Setups</title>
            <author initials="A." surname="Pathirana" fullname="Amila Pathirana">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Halgamuge" fullname="Malka Halgamuge">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Syed" fullname="Ali Syed">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="November"/>
          </front>
          <refcontent>International Conference on Advances in Business Management and Information Technology, pp. 1-14</refcontent>
        </reference>
        <reference anchor="PKCS11" quoteTitle="true" derivedAnchor="PKCS11">
          <front>
            <title>PKCS #11 v2.11: Cryptographic Token Interface Standard</title>
            <author>
              <organization showOnFrontPage="true">RSA Laboratories</organization>
            </author>
            <date year="2001" month="November"/>
          </front>
        </reference>
        <reference anchor="RFC4231" target="https://www.rfc-editor.org/info/rfc4231" quoteTitle="true" derivedAnchor="RFC4231">
          <front>
            <title>Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512</title>
            <author initials="M." surname="Nystrom" fullname="M. Nystrom">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="December"/>
            <abstract>
              <t indent="0">This document provides test vectors for the HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 message authentication schemes.  It also provides ASN.1 object identifiers and Uniform Resource Identifiers (URIs) to identify use of these schemes in protocols.  The test vectors provided in this document may be used for conformance testing.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4231"/>
          <seriesInfo name="DOI" value="10.17487/RFC4231"/>
        </reference>
        <reference anchor="RFC6194" target="https://www.rfc-editor.org/info/rfc6194" quoteTitle="true" derivedAnchor="RFC6194">
          <front>
            <title>Security Considerations for the SHA-0 and SHA-1 Message-Digest Algorithms</title>
            <author initials="T." surname="Polk" fullname="T. Polk">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Chen" fullname="L. Chen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="March"/>
            <abstract>
              <t indent="0">This document includes security considerations for the SHA-0 and SHA-1 message digest algorithm.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6194"/>
          <seriesInfo name="DOI" value="10.17487/RFC6194"/>
        </reference>
        <reference anchor="TRANSIT" quoteTitle="true" target="https://doi.org/10.6028/NIST.SP.800-131Ar2" derivedAnchor="TRANSIT">
          <front>
            <title>Transitioning the Use of Cryptographic Algorithms and Key Lengths</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date year="2019" month="March"/>
          </front>
          <seriesInfo name="NIST Special Publication" value="800-131Ar2"/>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-131Ar2"/>
        </reference>
        <reference anchor="WITHDRAW" target="https://www.nist.gov/news-events/news/2005/06/nist-withdraws-outdated-data-encryption-standard" quoteTitle="true" derivedAnchor="WITHDRAW">
          <front>
            <title>NIST Withdraws Outdated Data Encryption Standard</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date year="2005" month="June"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">Many thanks to 
<contact fullname="Hans Aschauer"/>,
<contact fullname="Hendrik Brockhaus"/>,
<contact fullname="Quynh Dang"/>,
<contact fullname="Roman Danyliw"/>,
<contact fullname="Lars Eggert"/>,
<contact fullname="Tomas Gustavsson"/>,
<contact fullname="Jonathan Hammell"/>,
<contact fullname="Tim Hollebeek"/>,
<contact fullname="Ben Kaduk"/>,
<contact fullname="Erik Kline"/>,
<contact fullname="Lijun Liao"/>,
<contact fullname="Mike Ounsworth"/>,
<contact fullname="Francesca Palombini"/>,
<contact fullname="Tim Polk"/>,
<contact fullname="Ines Robles"/>,
<contact fullname="Mike StJohns"/>, and
<contact fullname="Sean Turner"/>
for their careful review and improvements.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="R." surname="Housley" fullname="Russ Housley">
        <organization abbrev="Vigil Security" showOnFrontPage="true">Vigil Security, LLC</organization>
        <address>
          <postal>
            <street>516 Dranesville Road</street>
            <city>Herndon</city>
            <region>VA</region>
            <code>20170</code>
            <country>United States of America</country>
          </postal>
          <email>housley@vigilsec.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
