<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-contario-totp-secure-enrollment-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="totp-secure-enrollment">TOTP Secure Enrollment</title>
    <seriesInfo name="Internet-Draft" value="draft-contario-totp-secure-enrollment-02"/>
    <author fullname="Brian Contario">
      <organization>Silent Sector</organization>
      <address>
        <email>bcontario@silentsector.com</email>
      </address>
    </author>
    <date year="2025" month="September" day="27"/>
    <keyword>MFA</keyword>
    <keyword>2FA</keyword>
    <keyword>TOTP</keyword>
    <keyword>otpauth</keyword>
    <abstract>
      <?line 71?>

<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 75?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The common practice of presenting a QR Code for Time-Based One-Time Password (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 request the secret key over a secure network transport without authentication.  The URL provided uses an atomic 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 to prevent reuse.</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 Time-Based One-Time Password (TOTP) <xref target="RFC6238"/> is a symmetric algorithm for both the prover and the verifier to combine a string containing a shared TOTP secret key and the current Unix epoch seconds <xref target="RFC3339"/> 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 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. Typical strengths are &gt;= 160 bits.</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)
  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, the redeem is atomic.  The TOTP service looks up the nonce from temporary secure storage and if the nonce is not expired it atomically expires the nonce and 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 stores 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 96 bits of entropy.  Newly-generated GUID v4 or UUID v4 values with 122 bits of entropy 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 whose secret parameter value is the Secure Enrollment URL, percent-encoded per <xref target="RFC3986"/> section 2. The Secure Enrollment URL <bcp14>MUST NOT</bcp14> include credentials and <bcp14>MUST</bcp14> only include the nonce and necessary routing parameters.</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 TOTP service <bcp14>SHOULD NOT</bcp14> issue http redirects. Redirects <bcp14>MUST NOT</bcp14> downgrade confidentiality (e.g., to http).</t>
          </li>
          <li>
            <t>The authenticator application <bcp14>MUST NOT</bcp14> follow http redirects.</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/account 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 atomically redeem it 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. On success, the endpoint <bcp14>MUST</bcp14> return HTTP 200 with a body containing the otpauth URI 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. The response <bcp14>SHOULD</bcp14> include Cache-Control: no-store and <bcp14>SHOULD</bcp14> include Pragma: no-cache. Implementations <bcp14>MUST NOT</bcp14> log the returned secret key or full otpauth URI.</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 specification defines Secure Enrollment only over HTTPS. Use of other transports is out of scope. Implementations <bcp14>MAY</bcp14> define private extensions, but interoperability is not expected.</t>
      </section>
      <section anchor="applicability-to-other-algorithms">
        <name>Applicability to Other Algorithms</name>
        <t>Other multi-factor authentication algorithms / protocols could benefit by adapting this secure enrollment process to exchange shared secrets.  The following is a non-exhaustive list of possible candidates:</t>
        <ul spacing="normal">
          <li>
            <t>HMAC-based One-Time Password (HOTP) <xref target="RFC4226"/></t>
          </li>
          <li>
            <t>OATH Challenge-Response Algorithm (OCRA) <xref target="RFC6287"/></t>
          </li>
        </ul>
      </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 <bcp14>SHOULD</bcp14> only allow HTTPS TLS ciphers that are not deprecated by the industry.</t>
          </li>
          <li>
            <t>TOTP service API endpoints and authenticator applications <bcp14>SHOULD</bcp14> negotiate 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>Clients and servers <bcp14>SHOULD</bcp14> perform certificate validation per the HTTPS PKI; endpoints <bcp14>SHOULD</bcp14> enable HSTS; deployments <bcp14>SHOULD</bcp14> avoid user-modifiable TLS downgrade mechanisms.</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="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>This protocol proposes processing enrollment data (the one-time Secure Enrollment URL/nonce, server-observed timing/network data, and optional client metadata such as device class/OS version and coarse location). Consistent with <xref target="RFC6973"/>, servers <bcp14>SHOULD</bcp14> minimize collection and use enrollment data only to complete enrollment and related security functions (e.g., abuse detection); clients <bcp14>SHOULD NOT</bcp14> transmit optional metadata unless the user has clearly opted in or a managed-device policy authorizes it; if location is sent, it <bcp14>SHOULD</bcp14> be coarse (no precise coordinates).</t>
    </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="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="RFC4226">
          <front>
            <title>HOTP: An HMAC-Based One-Time Password Algorithm</title>
            <author fullname="D. M'Raihi" initials="D." surname="M'Raihi"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="F. Hoornaert" initials="F." surname="Hoornaert"/>
            <author fullname="D. Naccache" initials="D." surname="Naccache"/>
            <author fullname="O. Ranen" initials="O." surname="Ranen"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an algorithm to generate one-time password values, based on Hashed Message Authentication Code (HMAC). A security analysis of the algorithm is presented, and important parameters related to the secure deployment of the algorithm are discussed. The proposed algorithm can be used across a wide range of network applications ranging from remote Virtual Private Network (VPN) access, Wi-Fi network logon to transaction-oriented Web applications.</t>
              <t>This work is a joint effort by the OATH (Open AuTHentication) membership to specify an algorithm that can be freely distributed to the technical community. 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 memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4226"/>
          <seriesInfo name="DOI" value="10.17487/RFC4226"/>
        </reference>
        <reference anchor="RFC6287">
          <front>
            <title>OCRA: OATH Challenge-Response Algorithm</title>
            <author fullname="D. M'Raihi" initials="D." surname="M'Raihi"/>
            <author fullname="J. Rydell" initials="J." surname="Rydell"/>
            <author fullname="S. Bajaj" initials="S." surname="Bajaj"/>
            <author fullname="S. Machani" initials="S." surname="Machani"/>
            <author fullname="D. Naccache" initials="D." surname="Naccache"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes an algorithm for challenge-response authentication developed by the Initiative for Open Authentication (OATH). The specified mechanisms leverage the HMAC-based One-Time Password (HOTP) algorithm and offer one-way and mutual authentication, and electronic signature capabilities. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6287"/>
          <seriesInfo name="DOI" value="10.17487/RFC6287"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </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 408?>

<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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
y7JOk0j6RJHAtx42euMGW7mOt/5vi7in7/CMAAA=

-->

</rfc>
