<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-contario-totp-secure-enrollment-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.1 -->
  <front>
    <title abbrev="totp-secure-enrollment">TOTP Secure Enrollment</title>
    <seriesInfo name="Internet-Draft" value="draft-contario-totp-secure-enrollment-00"/>
    <author fullname="Brian Contario">
      <organization>Silent Sector</organization>
      <address>
        <email>bcontario@silentsector.com</email>
      </address>
    </author>
    <date year="2024" month="September" day="25"/>
    <keyword>MFA</keyword>
    <keyword>2FA</keyword>
    <keyword>TOTP</keyword>
    <keyword>otpauth</keyword>
    <abstract>
      <?line 70?>

<t>This document describes a secure key exchange scheme that extends the Time-Based One-Time Password (TOTP) <xref target="RFC6238"/> de facto enrollment method to prevent compromise of the non-expiring TOTP key by photographic capture of the QR code or by intentional or unintentional persistence of the key string in email, SMS, or other systems outside of the TOTP authenticator system itself.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://Silent-Sector.github.io/totp-secure-enrollment/draft-contario-totp-secure-enrollment.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-contario-totp-secure-enrollment/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/Silent-Sector/totp-secure-enrollment"/>.</t>
    </note>
  </front>
  <middle>
    <?line 74?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The common practice of presenting a QR Code for TOTP enrollment exposes the actual shared TOTP secret key used by the TOTP algorithm for multi-factor authentication. A fallback method of showing the key string to be typed or copied and pasted into a multi-factor authenticator application also exposes the key. In both cases the key that is exposed is the permanent shared TOTP secret key that, by current standards and processes, is expected to never expire.</t>
      <t>The below process instead replaces the secret key in the QR code with a URL to the TOTP service for the authenticator application to get the secret key over a secure network transport.  The URL provided uses a one-time use data token (nonce) so only one request for the secret key is honored. If both the user and an attacker use the URL, only one will get the secret key, and only the user will have an active session to complete enrollment by entering the proper TOTP value derived from the secret key.  If the attacker gets the secret key, the user will not and the user will be forced to generate a new QR code with a URL to a new secret key until they successfully get the secret key and complete TOTP Verification by entering the current one-time password, meaning the attacker will be guaranteed to not have the same secret key.
In cases where the URL to the TOTP service is not accessible, the legacy shared TOTP secret key exchange via QR Code or text string may be offered as a fallback with appropriate warnings displayed against key exposure.</t>
      <section anchor="terminologies">
        <name>Terminologies</name>
        <dl>
          <dt>TOTP:</dt>
          <dd>
            <t>Time-Based One-Time Password as described in <xref target="RFC6238"/>, and by itself in this document referring only to the algorithm, not the implementation.</t>
          </dd>
          <dt>TOTP secret key:</dt>
          <dd>
            <t>the hexadecimal <xref target="RFC6238"/> string representing a value unique to each prover, per <xref target="RFC6238"/> section 3.</t>
          </dd>
          <dt>hardware token:</dt>
          <dd>
            <t>Usually a dedicated-purpose hardware device that is issued to users.  In this document it refers to a device that is pre-set with a TOTP secret key used to display one-time passwords that provide prover functionality.</t>
          </dd>
          <dt>soft token:</dt>
          <dd>
            <t>Usually a software application that provides enrollment and prover functionality without dedicated hardware, usually running on a smartphone, tablet, personal computer, or password manager application.  In this document it refers specifically to an application that stores a TOTP secret key and provides TOTP prover functionality.  Sometimes referred to in other documents as a “soft token” or “software token”, as opposed to a “hardware token”.</t>
          </dd>
          <dt>prover:</dt>
          <dd>
            <t>In this document referring to an implementation of the TOTP protocol that provides a periodically changing one-time password based on the time and a TOTP secret key. A prover may be implemented as an authenticator application (software token) or implemented as a hardware token.</t>
          </dd>
          <dt>nonce:</dt>
          <dd>
            <t>a randomly-generated cryptographic data token that is used to prevent replay attacks by only allowing the value to be used once, somewhat analogous to a paper ticket that is torn in half or scanned and invalidated when presented for admission to a venue.</t>
          </dd>
          <dt>TOTP service:</dt>
          <dd>
            <t>A service used to enroll and verify the TOTP one-time password provided by a prover and associated with a specific authentication request.  Also referred to as a “verifier” in <xref target="RFC6238"/>, as described below.</t>
          </dd>
          <dt>verifier:</dt>
          <dd>
            <t>Per <xref target="RFC6238"/> section 3.R1, an authentication or validation server, and in this case for TOTP.</t>
          </dd>
          <dt>enrollment:</dt>
          <dd>
            <t>also referred to as <em>provisioning</em> per <xref target="RFC6238"/> section 4.2, and <em>registration</em> in <xref target="draft-strbac-totp2"/>, the exchange of the TOTP secret key between the verifier and the prover, followed by the verification of the prover's one-time password by the verifier, and the respective secure storage and linking of TOTP secret key to an identity for MFA.</t>
          </dd>
          <dt>URL:</dt>
          <dd>
            <t>used explicitly in this document to specify a "Uniform Resource Locator" providing a location and means of access to obtain information via a transfer request. In this document expect the URL to require a transfer using the specified protocol to get the desired information.</t>
          </dd>
          <dt>otpauth URI:</dt>
          <dd>
            <t>used explicitly in this document to specify a "Uniform Resource Identifier" providing information for immediate use for TOTP enrollment, per <xref target="totp-uri-format"/> and <xref target="draft-linuxgemini-otpauth-uri"/>. In this document expect the otpauth URI to convey the desired information in a single step without an additional transfer step required.</t>
          </dd>
        </dl>
      </section>
      <section anchor="requirements-language">
        <name>Requirements Language</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>
        <?line -18?>

</section>
    </section>
    <section anchor="totp-background">
      <name>TOTP Background</name>
      <t>The basis of TOTP <xref target="RFC6238"/> is a symmetric algorithm for both the prover and the verifier to combine a string containing a hexadecimal shared TOTP secret key and the current Unix time <xref target="UT"/> which are hashed using SHA-1 or a similar cryptographic hash algorithm. The result is converted to a decimal number and truncated, typically to 6 or 8 digits, to be used as the one-time password value that the prover supplies and the verifier accepts as valid only if it calculates the same one-time password value.</t>
      <t>TOTP requires that the TOTP secret key, as defined in <xref target="RFC6238"/> section 3 requirement R2, must be known by both the prover and the verifier. The original implementation of TOTP may have been intended for use primarily in hardware tokens that were factory-issued with an unchangeable TOTP secret key, which was a common practice for hardware tokens, since <xref target="RFC6238"/> did not define a protocol for the TOTP secret key exchange. However, increased use of mobile devices that synchronize their time with wireless communication providers and NTP servers have allowed for the proliferation of authenticator applications running on mobile devices, laptops, and desktop computers, all of which require receiving a unique TOTP secret key from each new verifier. Therefore, a protocol evolved as a de facto industry standard for enrollment to exchange the TOTP secret key, described in the next section.</t>
    </section>
    <section anchor="totp-enrollment">
      <name>TOTP Enrollment</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>For consistency and specificity, the remainder of this document will use the term “TOTP service” in place of “verifier”.</t>
        <t>For TOTP enrollment using an authenticator application, it is most logical for the TOTP service to generate the shared TOTP secret key using cryptographically secure random number generators to ensure that each prover has a unique TOTP secret key that has not been used elsewhere. Therefore it is an accepted standard for the TOTP service to generate the key and store it securely, and for the authenticator application to simply accept and store the key in a secure manner. The current TOTP enrollment protocol was likely influenced or established by the <xref target="GoogleAuth"/> project, which provided a working reference system of two complementary methods for the TOTP service to share the TOTP secret key with the prover during enrollment, described as follows.</t>
      </section>
      <section anchor="hexadecimal-string-enrollment">
        <name>Hexadecimal String Enrollment</name>
        <t>The TOTP secret key itself is expressed as a hexadecimal string of an arbitrary length chosen by the TOTP service. During enrollment the TOTP service can display the randomly generated hexadecimal string to the user for them to type or paste into an authenticator application.</t>
      </section>
      <section anchor="qr-code-enrollment">
        <name>QR Code Enrollment</name>
        <t>To avoid typographic errors when the user enters the TOTP secret key into the prover that was provided by the TOTP service, the use of a <xref target="QR_Code"/> was introduced so that manual data entry was not required by the user. The QR Code encodes an otpauth URI scheme, per the <xref target="totp-uri-format"/> and proposed as a draft IETF standard <xref target="draft-linuxgemini-otpauth-uri"/> with the following parameters:</t>
        <artwork><![CDATA[
algorithm=(SHA1|SHA256|SHA512|MD5)
  OPTIONAL, defaults to SHA1.

secret=[websafe Base32 encoded TOTP secret key, no padding]
  REQUIRED, 128 bits or more.

digits=(6|8)
  OPTIONAL, defaults to 6.

period=N  (totp specific)
  OPTIONAL, defaults to 30.
]]></artwork>
        <t>The otpauth URI also includes a human-readable Label to identify the issuer and account name. Some TOTP services also supply a "user" parameter. Both the account name and user parameter could disclose the complete identity that the TOTP secret key applies to. Below is a fictitious example otpauth URI that could be encoded into a QR Code for the user "human@domain.com" using the ExampleCorp service:</t>
        <artwork><![CDATA[
otpauth://totp/ExampleCorp%3Ahuman%40domain.com?secret=bl4gbf4ab5l3rj3d6htrxc6bqhrx3m7u&issuer=ExampleCorp
]]></artwork>
        <t>and a urldecoded version of the text:</t>
        <artwork><![CDATA[
otpauth://totp/ExampleCorp:human@domain.com?secret=bl4gbf4ab5l3rj3d6htrxc6bqhrx3m7u&issuer=ExampleCorp
]]></artwork>
        <t>Of particular note is that the TOTP secret key value of the "secret" parameter is provided in BASE32 plaintext with no cryptographic protections of any kind, and no expiration or method of revocation for the TOTP secret key if the QR Code or otpauth URI is stored, copied, or transmitted beyond the intended use, or if the TOTP secret key is discovered compromised in any other way.</t>
      </section>
    </section>
    <section anchor="enrollment-vulnerabilities">
      <name>Enrollment Vulnerabilities</name>
      <t>The above two enrollment methods do not follow the recommendations listed in <xref target="RFC6238"/> section 5.1 stating:</t>
      <ul empty="true">
        <li>
          <t>All the communications <bcp14>SHOULD</bcp14> take place over a secure channel, e.g., Secure Socket Layer/Transport Layer Security (SSL/TLS) <xref target="RFC5246"/> or IPsec connections <xref target="RFC4301"/>.</t>
        </li>
      </ul>
      <t>This results in a wide range of vulnerabilities.</t>
      <section anchor="hexadecimal-string-enrollment-vulnerabilities">
        <name>Hexadecimal String Enrollment Vulnerabilities</name>
        <t>Hexadecimal String Enrollment where the TOTP secret key string is visibly presented to the user is often vulnerable to compromise by the following non-exhaustive list of vectors:</t>
        <ol spacing="normal" type="1"><li>
            <t>a nearby observer viewing and remembering the visible TOTP secret key</t>
          </li>
          <li>
            <t>a nearby observer photographing the visible TOTP secret key</t>
          </li>
          <li>
            <t>the user copying the key to the computer's clipboard and then pasting the TOTP secret key into the prover during enrollment (which exposes the key to potentially malicious applications that monitor the clipboard contents)</t>
          </li>
          <li>
            <t>the user copying the TOTP secret key to the computer's clipboard and then pasting the TOTP secret key into an email, instant message, or SMS message to send to another user for enrollment (which may persist the TOTP secret key in external or internal systems indefinitely)</t>
          </li>
          <li>
            <t>the user copying the TOTP secret key to a computer's clipboard and then pasting into a file for later use (which which may persist the TOTP secret key to local or cloud storage)</t>
          </li>
        </ol>
      </section>
      <section anchor="qr-code-enrollment-vulnerabilities">
        <name>QR Code Enrollment Vulnerabilities</name>
        <t>Enrollment via <xref target="QR_Code"/> where the encoded TOTP secret key is visible presented to the user is often vulnerable to compromise by the following non-exhaustive list of vectors:</t>
        <ol spacing="normal" type="1"><li>
            <t>a nearby observer photographing the QR Code</t>
          </li>
          <li>
            <t>the user copying the QR Code image into an email or SMS message to send to another user for enrollment (which may persist the TOTP secret key in external or internal systems indefinitely)</t>
          </li>
          <li>
            <t>the user photographing the QR Code image on their mobile device for later use by the authenticator application (which may persist the TOTP secret key in external or internal systems indefinitely)</t>
          </li>
          <li>
            <t>the user photographing the QR Code image on their mobile device to send to another user via email, instant message, cloud service, or SMS for enrollment (which may persist the TOTP secret key in external or internal systems indefinitely)</t>
          </li>
          <li>
            <t>the user printing the QR Code image to complete enrollment later</t>
          </li>
        </ol>
      </section>
      <section anchor="elevated-risk-for-qr-code-enrollment">
        <name>Elevated Risk for QR Code Enrollment</name>
        <t>As described earlier, the string encoded in the QR Code is a <xref target="RFC3986"/> URI that contains all of the needed information to link the key to the TOTP service and the user with which it is associated, referred to in this document as an otpauth URI. The information provided in the QR Code greatly simplifies the TOTP enrollment since the user does not need to name the entry in their authenticator application or type in a hexadecimal string, so most users opt for the QR Code enrollment method.</t>
        <t>However, the tradeoff for this convenience is that the QR Code potentially contains all of the information needed by an attacker to log in to the associated target system as the associated user, except for the user's first factor password. If the target system is internet-facing and the login page can be identified by name or other intelligence, and the user's identifier is an email address that can be found in a database of accounts with compromised passwords, then having the TOTP secret key, also in the QR Code, potentially gives the attacker all of the factors needed to log in as the user to the target system.</t>
        <t>Because of the vectors by which the QR Code could be unintentionally exposed or stored on systems outside of the user's control for later harvesting, a secure enrollment method that does not expose the TOTP secret key is needed.</t>
      </section>
    </section>
    <section anchor="totp-secure-enrollment">
      <name>TOTP Secure Enrollment</name>
      <t>The following method protects the TOTP secret key via HTTPS/TLS as recommended in <xref target="RFC6238"/> section 5.1 when the TOTP service is accessible on a public or private network via a URL that can be generated by the TOTP service.</t>
      <t>Since this document is dealing only with TOTP implementations, the remainder of this document will prefer the shortened form of “Secure Enrollment” in place of “TOTP Secure Enrollment”, and “authenticator application” in place of “TOTP authenticator application”</t>
      <section anchor="mechanism-of-operation">
        <name>Mechanism of Operation</name>
        <t>The "secret" parameter of the otpauth URI, as described in <xref target="totp-uri-format"/>, normally only accepts a BASE32 encoded hexadecimal secret key.  However, in a “Secure Enrollment otpauth URI”, the “secret” parameter <bcp14>MUST</bcp14> accept a urlencoded URL with a HTTPS protocol string.  This URL, referred to from here forward as the “Secure Enrollment URL”, is how the authenticator application connects to the TOTP service to get a copy of the legacy otpauth URI that contains the secret key.</t>
        <t>The <xref target="RFC3986"/> URL specification requires the protocol in a URL be separated by a colon (“:”) which is urlencoded into “%3A”.  Because both the “%” and “:” characters are not valid in BASE32 encoding, their presence in the “secret” parameter can effectively be used as a signal that the value of the “secret” parameter should be urldecoded and the resulting value used as the Secure Enrollment URL to request the original format TOTP otpauth URI containing the plaintext TOTP secret key via a network connection.</t>
        <t>To minimize the data that is stored in the Secure Enrollment QR code, all of the optional fields <bcp14>SHOULD NOT</bcp14> be included in the Secure Enrollment otpauth URI. Only the “secret” parameter of the otpauth URI should be populated (as shown below).</t>
        <t><strong>The actual enrollment data, in the form of an otpauth URI, used by the authenticator application does not change. The enrollment data simply gets delivered via HTTPS instead of embedded in a QR code.</strong></t>
        <t>The Secure Enrollment URL <bcp14>MUST</bcp14> include a nonce value that will be marked as invalid after first use by the TOTP service to insure that the request is only ever responded to one time only (not more than once). The Secure Enrollment URL gets added to the “Secure Enrollment otpauth URI”, then encoded into a QR Code, then displayed to the user, and then decoded by the user's authenticator application.</t>
        <t>A sample Secure Enrollment otpauth URI for ExampleCorp:</t>
        <artwork><![CDATA[
otpauth://totp/?secret=https%3A%2F%2Fexamplecorp.com%2Fapi%2Fenrollmfa%2F16062671560671769238465892
]]></artwork>
        <t>The Secure Enrollment URL portion of the URI follows the “?secret=” portion and decodes to:</t>
        <artwork><![CDATA[
https://examplecorp.com/api/enrollmfa/16062671560671769238465892
]]></artwork>
        <t>The authenticator application <bcp14>MUST</bcp14> make a HTTP POST request using the Secure Enrollment URL to retrieve the otpauth URI text string in the same legacy format used by authenticator applications prior to adoption of TOTP Secure Enrollment.</t>
        <t>It should also be noted that the use of a QR code is not required for Secure Enrollment.  The user’s authenticator application could accept the Secure Enrollment URL via QR code, copy and paste, or manual entry of the Secure Enrollment URL text itself.</t>
      </section>
      <section anchor="device-enrollment-data">
        <name>Device Enrollment Data</name>
        <t>TOTP enrollment has historically been a “blind” process because there was no direct interaction between the authenticator application and the TOTP service. Administrators had no information to help end-users that forgot what device or authenticator application they to use to get their 6 digit TOTP codes.</t>
        <t>Now the authenticator application makes a HTTP POST request to the TOTP service during Secure Enrollment, so there is an opportunity to send and capture information for administrators to provide hints about which device and authenticator application an end user should use to log in.</t>
        <t>When the authenticator application makes the POST request it <bcp14>SHOULD</bcp14> send a request body with device enrollment data in JSON format using Content-Type set to “application/json”.  The sending of this enrollment data is optional.  The recommended content of the JSON data is as follows:</t>
        <artwork><![CDATA[
{
    "event_type":"totp-secure-enrollment",
    "time_local":"Sun, 22 Sep 2024 23:46:30 -0400",
    "time_utc":"2024-09-23T03:46:30.637Z",
    "device_model":"F990",
    "device_manufacturer":"Foo",
    "os_name":"android",
    "os_version":"12",
    "application_name":"Aegis",
    "application_version":"3.1.1",
    "location_description":"Cincinnati, Ohio, USA",
    "location_longitude":"-84.512",
    "location_latitude":"39.103"
}
]]></artwork>
        <t>All element values should be evaluated as strings and contain the following information:</t>
        <dl>
          <dt>event_type:</dt>
          <dd>
            <t>always the literal string "totp-secure-enrollment" for easy identification by humans and machine</t>
          </dd>
          <dt>time_local:</dt>
          <dd>
            <t>time of enrollment, recommended formatted as RFC 1123 Date Time for local time of the device for human readability</t>
          </dd>
          <dt>time_utc:</dt>
          <dd>
            <t>time of enrollment, ISO-8601 instant format recommended for machine readability</t>
          </dd>
          <dt>device_model:</dt>
          <dd>
            <t>the device model name or the model number</t>
          </dd>
          <dt>device_manufacturer:</dt>
          <dd>
            <t>the device manufacturer name</t>
          </dd>
          <dt>os_name:</dt>
          <dd>
            <t>the operating system name</t>
          </dd>
          <dt>os_version:</dt>
          <dd>
            <t>the operating system version in human readable form</t>
          </dd>
          <dt>application_name:</dt>
          <dd>
            <t>the authenticator application name or title</t>
          </dd>
          <dt>application_version:</dt>
          <dd>
            <t>the authenticator application version in human readable form</t>
          </dd>
          <dt>location_description:</dt>
          <dd>
            <t>if available and permitted, a descriptive name for the location of the device at the time of enrollment, preferably showing country, region / state / province, and municipality</t>
          </dd>
          <dt>location_longitude:</dt>
          <dd>
            <t>if available and permitted, the coarse longitude of the device at the time of enrollment</t>
          </dd>
          <dt>location_latitude:</dt>
          <dd>
            <t>if available and permitted, the coarse latitude of the device at the time of enrollment</t>
          </dd>
        </dl>
        <t>It is also optional, but recommended, for the TOTP service to store and/or parse the device enrollment data for future use. The data can be used for both end user assistance and administrative review of the different devices being used for TOTP Secure Enrollment.</t>
      </section>
      <section anchor="secure-enrollment-qr-code-workflow">
        <name>Secure Enrollment QR code Workflow</name>
        <t>The Secure Enrollment ideal workflow will follow these general steps when using a QR code is viable:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Enrollment Request</strong>: The user initiates the enrollment process for TOTP for 2FA or MFA on their account. The user experience is then passed to the TOTP service.</t>
          </li>
          <li>
            <t><strong>Secure Enrollment Preparation</strong>: The TOTP service generates a nonce and a random TOTP secret key, storing them both temporarily in a secure location with a configurable validity period (expiration) for human interaction, such as 5 minutes.</t>
          </li>
          <li>
            <t><strong>Secure Enrollment Presentation</strong>: The TOTP service generates and presents to the user a QR Code that contains an otpauth URI in the format established by <xref target="GoogleAuth"/>, but instead of the "secret" parameter containing the TOTP secret key, it contains a urlencoded network-accessible HTTPS URL with only a nonce and no secret key.</t>
          </li>
          <li>
            <t><strong>User Interaction</strong>: The user interacts with the TOTP authenticator application to scan the QR Code presented.</t>
          </li>
          <li>
            <t><strong>Secure Key Request</strong>: When the authenticator application detects a “%” or “:” character in the "secret" parameter value of the otpauth URI, the authenticator application performs the new Secure Enrollment functionality by urldecoding the “secret” parameter and using that value in a HTTP POST request.</t>
          </li>
          <li>
            <t><strong>Secure Key Response</strong>: When the TOTP service receives the HTTP POST request with the nonce, it looks up the nonce from temporary secure storage and if the nonce is not expired it returns the response (over the HTTPS/TLS secure channel) with the otpauth URI containing the secret key in the legacy de facto format, the same data that would normally be provided in the QR Code by the <xref target="GoogleAuth"/> code prior to implementation of Secure Enrollment.  At the same time, the TOTP service optionally saves the JSON device enrollment data contained in the POST request body for future use.</t>
          </li>
          <li>
            <t><strong>TOTP Enrollment</strong>: The authenticator application extracts the "issuer", "secret", "digits", and other parameters from the otpauth URI and registers a new entry in the authenticator application. This step is unchanged from the previous process, except the otpauth URI with the secret key is delivered via HTTPS rather than the QR Code.</t>
          </li>
          <li>
            <t><strong>TOTP Verification</strong>: The TOTP service presents a user interface that requires the user to enter the current one-time password and verify it before considering the user fully enrolled.</t>
          </li>
          <li>
            <t><strong>Secure Enrollment Flag</strong>: It is <bcp14>RECOMMENDED</bcp14> that in addition to the new TOTP secret key, the enrollment data stored by the TOTP service should include a Secure Enrollment flag to indicate that this enrollment was completed over a secure channel. This can be used for auditing purposes and to force users to re-enroll their TOTP authenticator application entries that were not completed in a secure manner in the past.</t>
          </li>
        </ol>
      </section>
      <section anchor="secure-enrollment-copy-paste-workflow">
        <name>Secure Enrollment Copy Paste Workflow</name>
        <t>The Secure Enrollment ideal workflow will follow the same general steps as the above QR code workflow when it is easier to copy and paste a text string than to use a QR code, with the exception of the following two steps which are slightly modified and used instead of the same numbered steps:
3. <strong>Secure Enrollment Presentation</strong>: The TOTP service displays in selectable text the otpauth URI in the format established by <xref target="GoogleAuth"/>, but instead of the "secret" parameter containing the TOTP secret key, it contains a urlencoded network-accessible HTTPS URL with only a nonce and no actual secret key.  The user optionally copies the otpauth URI text into the clipboard or transfers it electronically.
4. <strong>User Interaction</strong>: The user interacts with the authenticator application by pasting or typing in the otpauth URI text and submitting it.</t>
      </section>
      <section anchor="workflow-notes">
        <name>Workflow Notes</name>
        <t>In both the Copy Paste Workflow and the QR code Workflow, the final secret key that is enrolled is never exposed to the user, attackers, or other systems.  The secret key is directly exchanged via HTTPS between the TOTP service and the authenticator application.</t>
      </section>
      <section anchor="requirements">
        <name>Requirements</name>
        <t>Secure Enrollment requires the following that is not already defined in <xref target="RFC6238"/>:</t>
        <ol spacing="normal" type="1"><li>
            <t>The TOTP service <bcp14>MUST</bcp14> be able to create a Secure Enrollment URL to an API endpoint that can accept an anonymous HTTPS POST request.</t>
          </li>
          <li>
            <t>The TOTP service API endpoint <bcp14>SHOULD</bcp14> be configured to require non-deprecated TLS ciphers via HTTPS.</t>
          </li>
          <li>
            <t>The Secure Enrollment URL <bcp14>MUST</bcp14> be resolvable and accessible to the authenticator application via internet or private network connection at the time of enrollment.</t>
          </li>
          <li>
            <t>The TOTP service <bcp14>MUST</bcp14> generate a cryptographically secure random string data token to be used as a nonce to both include in the URL and store in secure temporary storage to be accessed by the API endpoint. It is recommended that the nonce have at least 64 bits of entropy.  Newly-generated GUID v4 or UUID v4 values are acceptable nonce values at the time of this writing.</t>
          </li>
          <li>
            <t>The TOTP service <bcp14>MUST</bcp14> set a nonce validity period (expiration) for completion of the human actions. The nonce validity period <bcp14>SHOULD</bcp14> be reasonable for authorized users, such as 5 minutes into the future.</t>
          </li>
          <li>
            <t>The TOTP service <bcp14>MUST NOT</bcp14> permanently store the generated secret key as enrolled until after the user has completed TOTP Verification by entering the current one-time password as a part of an existing user session authenticated with a previous factor.</t>
          </li>
          <li>
            <t>The TOTP service <bcp14>MUST</bcp14> generate an otpauth URI that sets the "secret" parameter value to the Secure Enrollment URL generated per above requirements (instead of the actual TOTP secret key), encoding the parameter value per <xref target="RFC3986"/> section 2.</t>
          </li>
          <li>
            <t>The TOTP service <bcp14>MUST</bcp14> exclude optional parts (per <xref target="totp-uri-format"/>) from the Secure Enrollment otpauth URI that is presented to the end user as a QR code or text string to limit data exposure.</t>
          </li>
          <li>
            <t>The authenticator application <bcp14>MUST</bcp14> allow the otpauth QR code to exclude all optional data from the otpauth URI, including the Label and User parameter, only providing the “secret” parameter that is populated with the Secure Enrollment URL.</t>
          </li>
          <li>
            <t>The TOTP service API endpoint <bcp14>MUST</bcp14> invalidate the nonce after its expiration period or upon first use by the API endpoint, whichever comes first, using appropriate concurrency locking mechanisms to avoid race conditions.</t>
          </li>
          <li>
            <t>The TOTP service <bcp14>MUST</bcp14> generate a new secret key any time a new nonce value is generated for a Secure Enrollment URL.  To avoid any race conditions or other security concerns, if the user requests a new QR code or refreshes the page containing the otpauth URI or QR code, a new secret key and nonce value <bcp14>MUST</bcp14> be generated and supplied.</t>
          </li>
          <li>
            <t>The TOTP service API endpoint <bcp14>MUST NOT</bcp14> respond with an actual secret key unless the nonce is found in secure temporary storage, is unused, and the current time is within the validity period. An affirmative response with a secret key <bcp14>MUST</bcp14> return an HTTP 200 success code with a response body containing a URL in the same format established by <xref target="GoogleAuth"/> as described in <xref target="totp-uri-format"/> with the “secret” parameter containing the BASE32 encoded secret key.</t>
          </li>
          <li>
            <t>The TOTP service API endpoint <bcp14>SHOULD</bcp14> respond with a uniform HTTP 4xx series response error code and message whether the nonce is invalid or expired, preferably a 403 Forbidden response. In environments with specialized security needs the TOTP service API endpoint <bcp14>MAY</bcp14> choose to respond with any other non-usable response, including a TCP disconnect, 200 success code with a blank response, a URL with a decoy TOTP secret key, or any other response that serves the purpose of thwarting an attacker with a false positive response.</t>
          </li>
          <li>
            <t>The TOTP service <bcp14>MAY</bcp14> offer a user-initiated option in the UI to switch to legacy enrollment. Prior to redirecting the user to legacy enrollment the UI <bcp14>SHOULD</bcp14> display a localizable message that warns the user to protect the legacy QR Code and/or the TOTP secret key string from observation and photographic or video capture, and avoid saving, sending, or transmitting them in any form to prevent compromise of the TOTP secret key.</t>
          </li>
        </ol>
      </section>
      <section anchor="reference-code">
        <name>Reference Code</name>
        <t>Pull requests illustrating reference implementations based on working open source code bases can be found here:</t>
        <t>TOTP Secure Enrollment authenticator application reference code
<xref target="totp-secure-enrollment-reference-authenticator"/></t>
        <t>TOTP Secure Enrollment server framework demo code
<xref target="totp-secure-enrollment-reference-server"/></t>
      </section>
      <section anchor="exclusions">
        <name>Exclusions</name>
        <t>TOTP Secure Enrollment does not claim or provide any additional benefit in the following non-exhaustive list of areas:</t>
        <ol spacing="normal" type="1"><li>
            <t>Protection of the secret key once it is stored in the authenticator application after successful Secure Enrollment.</t>
          </li>
          <li>
            <t>If the device containing the authenticator application is obtained by an attacker or is compromised by malware.</t>
          </li>
          <li>
            <t>Assisting in inventorying or tracking enrolled systems to invalidate the enrolled secret key.</t>
          </li>
          <li>
            <t>Purposefully setting up the same TOTP enrollment on multiple authenticator applications for redundancy or shared accounts.  This is a usage scenario for TOTP outside of industry best practices and incurs elevated risk.  Secure Enrollment is not intended to protect or facilitate this.</t>
          </li>
        </ol>
      </section>
      <section anchor="alternative-network-transports">
        <name>Alternative Network Transports</name>
        <t>This document describes the Secure Enrollment process specifically using HTTPS as a secure network transport.  In exceptional cases an alternative transport, such as SSH-2 or another protocol, might be required instead of HTTPS due to specialized requirements.  The <xref target="RFC3986"/> URL value in the “secret” parameter of the  <xref target="totp-uri-format"/> when using Secure Enrollment allows for other network transport protocols to be specified.  Some of the functionality provided by the HTTPS POST request may not map directly to all network transport protocols, which may preclude the authenticator application from transmitting device and location information to the TOTP service, but should still allow for the secure exchange of the TOTP secret key.</t>
      </section>
    </section>
    <section anchor="related-enhancements">
      <name>Related Enhancements</name>
      <t>There are other efforts to improve the TOTP experience and security, such as proposed in draft <xref target="draft-strbac-totp2"/>.  It is believed that the Secure Enrollment method described here can work in conjunction with and enhance the enrollment / registration process as described in <xref target="draft-strbac-totp2"/> section "3. Authentication Scheme Overview" to improve the security of the "TOTP2 Registration" step.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="general">
        <name>General</name>
        <t>All security considerations for the execution of TOTP and storage of the TOTP secret key are covered in <xref target="RFC6238"/>.</t>
      </section>
      <section anchor="totp-secret-key-exchange">
        <name>TOTP secret key exchange</name>
        <t>The secure exchange of the TOTP secret key <bcp14>MUST</bcp14> use a secure network transport protocol, such as HTTPS.  The implementation of the protocol <bcp14>SHOULD</bcp14> follow industry best practices, such as:</t>
        <ol spacing="normal" type="1"><li>
            <t>TOTP service API endpoints only allow HTTPS SSL/TLS ciphers that are not deprecated by the industry.</t>
          </li>
          <li>
            <t>TOTP service API endpoints advertise/enumerate the supported ciphers in preferred order of perceived security by traditional and quantum standards at the time of the exchange, always preferring ciphers that are deemed the most secure against "harvest now, decrypt later" attacks.</t>
          </li>
          <li>
            <t>Authenticator applications negotiate the HTTPS SSL/TLS connection with ciphers in the order advertised/enumerated by the TOTP service API endpoint.</t>
          </li>
        </ol>
      </section>
      <section anchor="secret-key-harvesting">
        <name>Secret key harvesting</name>
        <t>Once it is common knowledge that the legacy QR codes used for TOTP enrollment have no encryption or safeguards, and they can be reused since they contain the non-expiring secret key, attackers may start scanning images in cloud storage or sent via MMS that contain QR codes to harvest the secret key, along with the other details in the QR code otpauth URI.  Identification of a target QR code is trivial once decoded into a text string since they all start with “otpauth://”.</t>
      </section>
      <section anchor="secure-enrollment-flag">
        <name>Secure Enrollment Flag</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> in the workflow above that in addition to the new TOTP secret key, the enrollment data stored by the TOTP service should include a Secure Enrollment flag to indicate that this enrollment was completed over a secure channel.  It is also <bcp14>RECOMMENDED</bcp14> that action be taken against user accounts that do not have the Secure Enrollment Flag set on their accounts.  This action could include, but is not limited to, one or more of the following options that could be happen after a given date for each option:</t>
        <ol spacing="normal" type="1"><li>
            <t>Manual human intervention and verification that the authorized user completes the new Secure Enrollment process.</t>
          </li>
          <li>
            <t>Disable the user accounts until option 1 is performed.</t>
          </li>
          <li>
            <t>When the TOTP service detects success for a user with the Secure Enrollment flag set to false, fail the login, and send the user through the Secure Enrollment process.  Once they complete it, the Secure Enrollment flag will be set to true and they will be able to log in normally using TOTP authentication.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6238">
          <front>
            <title>TOTP: Time-Based One-Time Password Algorithm</title>
            <author fullname="D. M'Raihi" initials="D." surname="M'Raihi"/>
            <author fullname="S. Machani" initials="S." surname="Machani"/>
            <author fullname="M. Pei" initials="M." surname="Pei"/>
            <author fullname="J. Rydell" initials="J." surname="Rydell"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>This document describes an extension of the One-Time Password (OTP) algorithm, namely the HMAC-based One-Time Password (HOTP) algorithm, as defined in RFC 4226, to support the time-based moving factor. The HOTP algorithm specifies an event-based OTP algorithm, where the moving factor is an event counter. The present work bases the moving factor on a time value. A time-based variant of the OTP algorithm provides short-lived OTP values, which are desirable for enhanced security.</t>
              <t>The proposed algorithm can be used across a wide range of network applications, from remote Virtual Private Network (VPN) access and Wi-Fi network logon to transaction-oriented Web applications. The authors believe that a common and shared algorithm will facilitate adoption of two-factor authentication on the Internet by enabling interoperability across commercial and open-source implementations. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6238"/>
          <seriesInfo name="DOI" value="10.17487/RFC6238"/>
        </reference>
        <reference anchor="GoogleAuth" target="https://github.com/google/google-authenticator">
          <front>
            <title>Google Authenticator OpenSource</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="totp-uri-format" target="https://github.com/google/google-authenticator/wiki/Key-Uri-Format">
          <front>
            <title>TOTP URI Format</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="UT" target="http://en.wikipedia.org/wiki/Unix_time/">
          <front>
            <title>Wikipedia, "Unix time", February 2011</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="QR_Code" target="https://www.iso.org/standard/62021.html">
          <front>
            <title>ISO/IEC 18004, currently ISO/IEC 18004:2015 Information technology — Automatic identification and data capture techniques — QR Code bar code symbology specification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="draft-strbac-totp2" target="https://datatracker.ietf.org/submit/status/135578/">
          <front>
            <title>TOTP2 Authentication Scheme</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="draft-linuxgemini-otpauth-uri" target="https://datatracker.ietf.org/doc/draft-linuxgemini-otpauth-uri/">
          <front>
            <title>The otpauth URI Scheme</title>
            <author fullname="Linux Gemini">
              <organization/>
            </author>
            <date year="2023" month="August"/>
          </front>
          <seriesInfo name="I-D" value="draft-linuxgemini-otpauth-uri"/>
        </reference>
        <reference anchor="totp-secure-enrollment-reference-authenticator" target="https://github.com/silentbrianc/Aegis/pull/1/">
          <front>
            <title>TOTP Secure Enrollment reference authenticator application pull request</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="totp-secure-enrollment-reference-server" target="https://github.com/silentbrianc/aspnetcore/pull/2/">
          <front>
            <title>TOTP Secure Enrollment reference server pull request</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC5246">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author fullname="T. Dierks" initials="T." surname="Dierks"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol. The TLS protocol provides communications security over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5246"/>
          <seriesInfo name="DOI" value="10.17487/RFC5246"/>
        </reference>
        <reference anchor="RFC4301">
          <front>
            <title>Security Architecture for the Internet Protocol</title>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="K. Seo" initials="K." surname="Seo"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer. This document obsoletes RFC 2401 (November 1998). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4301"/>
          <seriesInfo name="DOI" value="10.17487/RFC4301"/>
        </reference>
      </references>
    </references>
    <?line 395?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thank you to Lauro Chavez and Zach Fuller at Silent Sector for their reviews, suggestions, and support.</t>
      <t>Thank you to Al Katawazi and Craig Tulli of Blueshift Technologies for reviews and feedback.</t>
      <t>Thank you to Mike Amundsen of Amundsen.com for guidance in starting the IETF draft process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
