<?xml version="1.0" encoding="US-ASCII"?>
<!-- this is version 5 of this xml2rfc template -->
<!--
    DOCTYPE processing

To use this XML template, the rfc2629.dtd from the xml2rfc distribution should 
be in the local directory. The xml2rfc distribution is available from 
http://xml.resource.org/

 The ENTITY clauses create an include of the named XML files, which
contains references written in xml2rfc format.

 XML2RFC offers an include feature described in the XML2RFC README
  file.  That syntax, however, contradicts the DTD requirements to
  have <reference> elements within the <references> element, so an 
  XML parser is likely to find your XML file invalid.  It may be
  possible that XML2RFC will change their DTD so that the XML file
  remains valid when their style of include is used.

Some editors, such as XXE, resolve the ENTITY clauses before displaying the 
document to be edited.
-->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc2223 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2223.xml">
<!ENTITY rfc2578 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2578.xml">
<!ENTITY rfc2579 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2579.xml">
<!ENTITY rfc2580 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2580.xml">
<!ENTITY rfc2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY rfc3410 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3410.xml">
<!ENTITY rfc4181 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4181.xml">
]>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc strict="no"?>
<?rfc rfcedstyle="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc category="std" docName="draft-ietf-acme-client-07" ipr="trust200902">
  <front>
    <title abbrev="draft-ietf-acme-client-07">ACME End User Client and Code
    Signing Certificates</title>

    <author fullname="Kathleen M. Moriarty" initials="K" surname="Moriarty">
      <organization>Dell Technologies</organization>

      <address>
        <postal>
          <street>176 South Street</street>

          <city>Hopkinton</city>

          <country>US</country>
        </postal>

        <email>Kathleen.Moriarty.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2023"/>

    <area>Security</area>

    <workgroup>IETF</workgroup>

    <keyword>ACME</keyword>

    <keyword>Certificate</keyword>

    <keyword>Client</keyword>

    <keyword>CodeSigning</keyword>

    <abstract>
      <t>Automated Certificate Management Environment (ACME) core protocol
      addresses the use case of web server certificates for TLS. This document
      extends the ACME protocol to support end user client, device client, and
      code signing certificates.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>ACME <xref target="RFC8555"/> is a mechanism for automating
      certificate management on the Internet. It enables administrative
      entities to prove effective control over resources like domain names,
      and automates the process of generating and issuing certificates.</t>

      <t>The core ACME protocol defined challenge types specific to web server
      certificates with the possibility to create extensions, or additional
      challenge types for other use cases and certificate types. Client
      certificates, such as end user and code signing may also benefit from
      automated management to ease the deployment and maintenance of these
      certificate types, thus the definition of this extension defining
      challenge types for end users.</t>
    </section>

    <section title="Identity Proofing for Client Certificates">
      <t>As with the TLS certificates defined in the core ACME document
      &lt;xref target="RFC8555"/&gt;, identity proofing for ACME issued end
      user client, device client, and code signing certificates is a separate
      process outside of the automation of ACME. Identity proofing may be an
      out-of-band process, if needed, and for this draft is likely tied to the
      credentials used for the defined challenge types.</t>

      <t>Identity proofing for these certificate types present some challenges
      for process automation. <xref target="NIST800-63r3">NIST SP 800-63
      r3</xref> serves as guidance for identity proofing further detailed in
      <xref target="NIST800-63A">NIST SP 800-63A</xref> that may occur prior
      to the ability to automate certificate management via ACME or may
      obviate the need for it weighing end user privacy as a higher concern
      and allowing for credential issuance to be decoupled from identity
      proofing (IAL1). Using this guidance, a CA might select from the
      identity proofing levels to assert claims on the issued certificates as
      described in <xref target="NIST800-63r3">NIST SP 800-63 r3</xref>.</t>

      <t>The certificate issuing CA may make this choice by certificate type
      issued. Once identity proofing has been performed, in cases where this
      is part of the process, and certificates have been issued, <xref
      target="NIST800-63r3">NIST SP 800-63 r3</xref> includes recommendations
      for authentication or in the context of ACME, management of issuance for
      subsequent client, device, or code-signing certificates:</t>

      <t>If federations and assertions are used for authorizing certificate
      issuance, <xref target="NIST800-63C">NIST SP 800-63 C</xref> may be
      referenced for guidance on levels of assurance.</t>

      <t>Existing PKI certification authorities (CAs) tend to use a set of ad
      hoc protocols for certificate issuance and identity verification. For
      each certificate usage type, a basic process will be described to obtain
      an initial certificate and for the certificate renewal process. If
      higher assurance levels are desired, the guidance from <xref
      target="NIST800-63r3">NIST SP 800-63 r3</xref> may be useful and
      out-of-band identity proofing options are possible options for
      pre-authorization challenges or notifications.</t>
    </section>

    <section title="End User Client Certificates">
      <t>A client certificate used to authenticate an end user may be used for
      mutual authentication in TLS, EAP-TLS, or messaging. The client
      certificate and key in this case may be stored in a browser, PKCS-#11
      container, Key Management Interoperability Protocol (KMIP) (possible,
      but just code signing and device client certificates in practice), or
      another key container. To obtain an end user client certificate and
      associated key pair, there are several possibilities to automate
      authentication of an identity credential intended to be tied to an end
      user.</t>

      <t>[We need to determine if it is important in ACME to define an
      automated method that tests the identity or the user or to just have
      consistent credentials for the authentication challenges. The
      credentials may be distributed through an out-of-band method that
      involves identity proofing.]</t>

      <t>A trusted federated service that ties the user to an email address
      with a reputation of the user attached to the email may be possible. One
      such example might be the use of a JSON Web Token (JWT) signed OAuth
      token.</t>

      <t>Risk based authentication used for identity proofing with red herring
      questions is a third option that could utilize public information on
      individuals to authenticate. This would be similar to the signup process
      used in some financial applications.</t>

      <t>Existing credentials - for instance, FIDO. FIDO uses a public key
      pair and does not perform identity proofing. FIDO authentication
      provides a different key pair to each service using FIDO for
      authentication, which are generated at the client and registered by the
      server. This may require using the FIDO credentials from a specific
      service for authentication to gain ACME issued crededentials (not
      advised based on how FIDO credentials are supposed to be used). Are
      there instances where the same provider would issue both sets of
      credentials? You wouldn't want to expose your FIDO credentials to a
      different party, that's why each service has their own. Would you set up
      a mechanism to get FIDO credentials to then obtain a certificate? (What
      use cases would this be necessary? When do you need a certificate where
      you already have a specific public/private key pair?) This can be
      defined as an auth type, but should it be?</t>

      <t>One-time password (OTP) authentication is a secure option. In cases
      where a higher assurance level is needed, OTP may be a good choice and
      many options exist today for OTP that could use an app on a phone for
      instance tied to an existing (or newly established) password. The OTP
      may be tied to an out-of-band process and may be associated with a
      username/password and other accounts.</t>

      <t>One consideration is to understand if the use case could just use
      FIDO and not create anything new (ACME client certificates). FIDO
      provides a mechanism to have unique public key pair based access for
      client authentication to web sites and they are working on non-web.
      Identity proofing is intentionally decoupled from authentication in this
      model as that is in line with NIST 800-63r3 recommendations for privacy
      protections of the user. The credential in this case is authenticated
      and would be consistent for it's use, but the identity proofing for that
      credential is not performed. Obviously, identity proofing is more
      important for some services, like financial applications where tying the
      user to the identity for access to financial information is important.
      However, is automated identity proofing important for any user
      certificate or should it remain decoupled where it could be automated by
      a service offering or is there a need for a standardized mechanism to
      support it for user certificates?</t>

      <t>Three methods for ACME client authentication, not identity proofing,
      are proposed in the Challenge Type Section.</t>
    </section>

    <section title="CodeSigning Certificates">
      <t>The process to retrieve a code signing certificate is similar to that
      of a web server certificate, with differences primarily in the CSR
      request and the resulting certificate properties. [The storage and
      access of a code signing certificate must be protected and is typically
      done through hardware, a hardware security module (HSM), which likely
      has a PKCS#11 interface. A code signing certificate may either be a
      standard one or an extended validation (EV) certificate.]</t>

      <t>For automation purposes, the process described in this document will
      follow the standard process and any out-of-band preprocessing can
      increase the level of the issued certificate if the CA offers such
      options and has additional identity proofing mechanisms (in band or
      out-of-band).</t>

      <t>Strict vetting processes are necessary for many code signing
      certificates to provide a high assurance on the signer. In some cases,
      issuance of a standard CodeSigning certificate will be appropriate and
      no additional "challenges" [RFC8555 Section 8] will be necessary. In
      this case, the standard option could be automated very similar to Web
      server certificates with the only changes being in the CSR properties.
      However, this may not apply to all scenarios, such as those requiring EV
      certificates with the possibility for required out-of-band initial
      authentication and identity proofing.</t>

      <t>EV code signing certificates have a distinct set of requirements from
      EV web certificates. In particular, they don't have associated domain
      names, nor is CAA checking done. The code signing certificate links a
      public key to an organization, not a domain. CAs may chose different
      methods to enable the use of ACME for EV code signing certificates. The
      intent of this work is to provide additional authentication challenge
      types that may enable their automation process.</t>

      <t>Organization validation is required for standard code signing
      certificates from most issuers. The CSR is used to identify the
      organization from the included domain name in the request. The resulting
      certificate, however, instead contains the organization's name and for
      EV certificates, other identifying information for the organization. For
      EV certificates, this could require that the domain is registered with
      the Certificate Authority provider, listed in CAA [RFC6844], and
      administrators for the account are named with provided portal access for
      certificate issuance and management options.</t>

      <t>While ACME allows for the client to directly establish an account
      with a CA, an initial out-of-band process for this step may assist with
      the additional requirements for EV certificates and assurance levels
      typically required for code signing certificates. For standard
      certificates, with a recommendation for additional vetting through
      extended challenge options to enable ACME to establish the account
      directly. In cases where code signing certificates are used heavily for
      an organization, having the portal access replaced with ACME
      authenticated client access with extra challenges for authentication may
      be an option to automate the functionality.</t>

      <t>To improve the vetting process, ACME's optional use of CAA [RFC6844]
      with the Directory "meta" data "caaIdentities" (<xref target="RFC8555"/>
      Section 9.7.6) assists with the validation that a CA may have issue
      certificates for any particular domain and is RECOMMENDED for use with
      code signing certificates for this additional level of validation
      checking on issued certificates.</t>

      <t>As noted in RFC8555, "the external account binding feature (see
      Section 7.3.4) can allow an ACME account to use authorizations that have
      been granted to an external, non-ACME account. This allows ACME to
      address issuance scenarios that cannot yet be fully automated, such as
      the issuance of "Extended Validation" certificates."</t>

      <t>The ACME challenge object, <xref target="RFC8555"/> Section 7.1.5 is
      RECOMMENDED for use for Pre-authorization (<xref target="RFC8555"/>
      Section 7.4.1). Additional challenge types are added to provide higher
      levels of security for this issuance verification step. The use of OTP,
      FIDO credentials (public/private key pairs), or validation from a
      certificate issued at account setup time are defined in Section 8.
      Pre-Authoriziation.</t>

      <t>ACME provides an option for notification of the operator via email or
      SMS upon issuance/renewal of a certificate after the domain has been
      validated as owned by the requestor. This option is RECOMMENDED due to
      the security considerations of code signing certificates as a way to
      limit or reduce the possibility of a third party gaining access to a
      code signing certificate inappropriately. Development of additional
      challenge types is included in this document to support this for
      pre-authorization, which would better match the security considerations
      for this certificate type. Additional types may be added if agreed upon
      by the working group.</t>

      <t>Since DNS is used to identify the organization in the request, the
      identifier "type" (<xref target="RFC8555"/>Section 7.4) is set to dns,
      not requiring any additions to the ACME protocol for this type of
      certificate. The distinction lies in the CSR, where the values are set
      to request a CodeSigning certificate for a client certificate.
      [Question: Is it helpful to define an identifier for the administrator
      or for the developer to distinguish the certificate type in ACME and not
      just the CSR?]</t>

      <t>KeyUsage (DigitalSignature) and ExtendedKeyUsage (CodeSigning) in the
      CSR MUST be set to the correct values for the CA to see the request is
      for a Code Signing certificate. The Enhanced Key Usage SHOULD be set to
      show this is a client certificate., using OID "1.3.6.1.5.5.7.3.2". The
      CN MUST be set to the expected registered domain with the CA
      account.</t>

      <t>An advantage of ACME is the ability to automate rollover to allow for
      easy management of short expiry times on certificates. The lifetime of
      CodeSigning certificates is typically a year or two, but automation
      could allow for shorter expiry times becoming feasible. However,
      lifetimes are less of an issue for code signing certificates than other
      certificate types. however there is a legitmate case for "one signature
      per certificate." Automation might be helpful in this case if patches or
      software updates were frequent or to minimize the knowledge needed for
      the organization using this method.</t>

      <t>Automation of storage to a hardware security module (HSM), which
      typically requires authentication is intentionally left
      out-of-scope.</t>
    </section>

    <section title="Pre-authorization">
      <t>Additional challenge types are defined here for the verification of
      administrators at an organization requesting CodeSigning certificates.
      Email is listed as possible in RFC8555 and may be used singularly or in
      combination as the ACME protocol allows for multiple pre-authorization
      challenges to be issued. Additional pre-authorization types are defined
      that provide a higher level of assurance to authorize a request.</t>
    </section>

    <section title="Challenge Types">
      <t>The challenge types defined in the following subsections are to
      authenticate individuals or holders of specific pre-issued credentials
      (users acting in roles for an organization). The challenge types can be
      used to obtain end user certificate types or as a pre-authorization
      challenges with certificate types such as the Code Signing Certificate.
      Please note that the pre-authorization challenge is also coupled with
      the account certificate in ACME for verification. The process for
      obtaining EV Code Signing Certificates typically requires authorization
      from one or more individuals in a role for the organization. The use of
      pre-issued secure credentials, at an assurance level appropriate for the
      certificate type being issued, provides a way to automate the issuance
      and renewal process.</t>

      <section title="One Time Password (OTP)">
        <t>There are numerous one time password technologies with slight
        variations between implementations. The response to the challenge is
        entered in the provided URL, offering flexibility to those using this
        challenge type to acomodate the specific requirements of their
        solution. Looking at 2 OTP solutions, the challenge response is
        provided via a tool or app without any user interaction of information
        required from the server to generate the challenge. The 2 solutions
        that operate in this manner include SecureID and Duo Security. If a
        challenge is required to generate the response to be provided in the
        URL, the token can supply the challenge.</t>

        <t><list style="empty">
            <t>type (required, string): The string "otp-01".</t>

            <t>token (required, string): A random value that uniquely
            identifies the challenge. OTP types and input vary between
            technologies. The token value will match the type expected for the
            pre-issued OTP credential. The user will be able to supply a
            response in the provided URL from this challenge. It MUST NOT
            contain any characters outside the base64url alphabet and MUST NOT
            include base64 padding characters ("=").</t>
          </list></t>

        <figure>
          <artwork><![CDATA[
   {
     "type": "otp-01",
     "url": "https://example.com/acme/chall/WrV_H87EyD3",
     "status": "pending",
     "token": "challenge"
   }
    ]]></artwork>
        </figure>

        <section title="HMAC-Based One-Time Password (HOTP)">
          <t>HOTP(<xref target="RFC4226"/>) describes an algorithm for the
          generation of time-based password values.</t>

          <t><list style="empty">
              <t>type (required, string): The string "hotp-01".</t>

              <t>token (required, string): The HOTP value. This SHOULD be the
              6 digit representation.</t>
            </list></t>

          <figure>
            <artwork><![CDATA[
    {
      "type": "hotp-01",
      "url": "https://example.com/acme/chall/WrV_H87EyD3",
      "status": "pending",
      "token": "123456"
    }
      ]]></artwork>
          </figure>
        </section>

        <section title="Time-Based One-Time Password (TOTP)">
          <t>TOTP(<xref target="RFC6238"/>) describes an algorithm for the
          generation of time-based password values, an extension from
          HOTP.</t>

          <t><list style="empty">
              <t>type (required, string): The string "totp-01".</t>

              <t>token (required, string): The TOTP value. This SHOULD be the
              6 digit representation.</t>
            </list></t>

          <figure>
            <artwork><![CDATA[
    {
      "type": "totp-01",
      "url": "https://example.com/acme/chall/WrV_H87EyD3",
      "status": "pending",
      "token": "123456"
    }
      ]]></artwork>
          </figure>
        </section>

        <section title="Generic One Time Password (OTP)">
          <t>There are numerous other one time password technologies with
          slight variations between implementations. The response to the
          challenge is entered in the provided URL, offering flexibility to
          those using this challenge type to acomodate the specific
          requirements of their solution. Looking at 2 OTP solutions, the
          challenge response is provided via a tool or app without any user
          interaction of information required from the server to generate the
          challenge. The 2 solutions that operate in this manner include
          SecureID and Duo Security. If a challenge is required to generate
          the response to be provided in the URL, the token can supply the
          challenge.</t>

          <t><list style="empty">
              <t>type (required, string): The string "otp-01".</t>

              <t>token (required, string): A random value that uniquely
              identifies the challenge. OTP types and input vary between
              technologies. The token value will match the type expected for
              the pre-issued OTP credential. The user will be able to supply a
              response in the provided URL from this challenge. It MUST NOT
              contain any characters outside the base64url alphabet and MUST
              NOT include base64 padding characters ("=").</t>
            </list></t>

          <figure>
            <artwork><![CDATA[
    {
      "type": "otp-01",
      "url": "https://example.com/acme/chall/WrV_H87EyD3",
      "status": "pending",
      "token": "challenge"
    }
      ]]></artwork>
          </figure>
        </section>
      </section>

      <section title="Public Key Cryptography">
        <t>Certificates may be pre-issued and stored according to assurance
        level requirements for the purpose of identifying a user's identity.
        If a higher assurance level is needed for a user serving in a specific
        role or for that individual, it is possible for identity proofing to
        occur in person using identifiers acceptable for the specified process
        and the private key stored appropriately for the required assurance
        level. PKCS#11 software or hardware tokens are both possible options.
        This model assumes that there may be multiple authorized users with
        different certificates that can be used for the authorization or
        pre-authentication challenge. As such, the user first provides the
        digital signature, so the account management can determine if one of
        the acceptable certificates was used to digitally sign the token.</t>

        <t><list style="empty">
            <t>type (required, string): The string "cert-01".</t>

            <t>token (required, string): A random value that uniquely
            identifies the challenge. The token for a certificate
            authentication challenge includes a value for the recipeint to
            digitally sign using their private key and post to the provided
            URL. The ACME server then uses the digitally signed content to
            verify that the challenge was signed using authorized credentials
            (certificate issued and authorized for this challenge type). It
            MUST NOT contain any characters outside the base64url alphabet and
            MUST NOT include base64 padding characters ("=").</t>
          </list></t>

        <figure>
          <artwork><![CDATA[
   {
     "type": "cert-01",
     "url": "https://example.com/acme/chall/WrV_H87EyD3",
     "status": "pending",
     "token": "Some challenge to digitally sign"
   }
    ]]></artwork>
        </figure>
      </section>

      <section title="WebAuthn or Public/Private Key Pairs">
        <t>W3C's WebAuthn uses raw public/private key pairs that are issued
        specific to a service. If WebAuthn or public/private key pairs (PPKP)
        are selected as the challenge type, the account and credential
        issuance will have to occur prior to use of this challenge type. The
        WebAuthn or public/private key pair credentials would be specific to
        the certificate management account and would be created by the client,
        then registered with the service as occurs with normal WebAuthn
        regisration of credentials. As with normal WebAuthn and public/private
        key pairs, the token or challenge is digitally signed to prove
        possession of the private key.</t>

        <t><list style="empty">
            <t>type (required, string): The string "ppkp-01".</t>

            <t>token (required, string): A random value that uniquely
            identifies the challenge. This challenge will operate much in the
            same way as the certificate challenge as the operations are
            largely the same. The user will be able to supply a response in
            the provided URL from this challenge. It MUST NOT contain any
            characters outside the base64url alphabet and MUST NOT include
            base64 padding characters ("=").</t>
          </list></t>

        <figure>
          <artwork><![CDATA[
   {
     "type": "ppkp-01",
     "url": "https://example.com/acme/chall/WrV_H87EyD3",
     "status": "pending",
     "token": "Some challenge to sign"
   }
    ]]></artwork>
        </figure>
      </section>
    </section>

    <section title="Security Considerations">
      <t>The additional challenge types may be used for any certificate type
      as ACME's design allows for that flexibility. Careful consideration is
      recommended when selecting the appropriate challenge types for
      certificate and key pairs. In the case of code signing certificate and
      key pairs, policy for an issuing organization may require processes
      involving challenges to more than one person in the organization with
      specific challenge types required. The challenge type may be tied back
      to specific authentication levels, for istance the authentication levels
      defined in NIST SP 800-63. The authentication process may also be tied
      to roles in the organization as opposed to individuals. POlicy and
      application of policy is outside the scope of this document.</t>
    </section>

    <section title="IANA Considerations">
      <t>This memo includes no request to IANA, yet.</t>
    </section>

    <!-- The Author's Addresses section will be generated automatically by XML2RFC 
    from the front information. -->

    <section title="Contributors">
      <t>Thank you to reviewers and contributors who helped to improve this
      document. Thank you to Thomas Peterson who added the one-time password
      types, HOTP and TOTP. Thank you to Tim Hollebeek for your early review
      and added text specific to EV certificate issuance and one time use code
      signing certificates. Thank you to Andrei Popov and Deb Cooley for your
      reviews and suggestions made in -04. Thank you to those who reviewed the
      CAA text removed in version -05 including: Carl Mehner, Roland
      Shoemaker, Ben Schwartz, and Ryan Sleevi. Posted WG version. -02 updates
      authors email address.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.4226'?>

      <?rfc include='reference.RFC.6238'?>

      <?rfc include='reference.RFC.8174'?>

      <?rfc include='reference.RFC.8555'?>

      <?rfc include='reference.RFC.7030'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.ietf-acme-ip'?>
    </references>

    <references title="URL References">
      <reference anchor="NIST800-63r3">
        <front>
          <title>https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63-3.pdf</title>

          <author>
            <organization>US National Institute of Standards and
            Technology</organization>
          </author>

          <date year=""/>
        </front>
      </reference>

      <reference anchor="NIST800-63A">
        <front>
          <title>https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63a.pdf</title>

          <author>
            <organization>US National Institute of Standards and
            Technology</organization>
          </author>

          <date year=""/>
        </front>
      </reference>

      <reference anchor="NIST800-63B">
        <front>
          <title>https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63b.pdf</title>

          <author>
            <organization>US National Institute of Standards and
            Technology</organization>
          </author>

          <date year=""/>
        </front>
      </reference>

      <reference anchor="NIST800-63C">
        <front>
          <title>https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63c.pdf</title>

          <author>
            <organization>US National Institute of Standards and
            Technology</organization>
          </author>

          <date year=""/>
        </front>
      </reference>
    </references>

    <section title="Change Log ">
      <t>Note to RFC Editor: if this document does not obsolete an existing
      RFC, please remove this appendix before publication as an RFC.</t>

      <t>02 draft added subsections contributed from Thomas Peterson on HOTP
      and TOTP.</t>
    </section>

    <section title="Open Issues">
      <t>Note to RFC Editor: please remove this appendix before publication as
      an RFC.</t>

      <!--
		 <t><list style="numbers">
          <t>Contributor addresses need to be updated</t>
        </list></t>
        -->
    </section>
  </back>
</rfc>
