<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" docName="draft-camwinget-tls-ts13-macciphersuites-12" indexInclude="true" ipr="trust200902" number="9150" prepTime="2022-04-21T15:42:15" scripts="Common,Latin" sortRefs="true" submissionType="independent" symRefs="true" tocDepth="2" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-camwinget-tls-ts13-macciphersuites-12" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9150" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="HMAC-Only Ciphers">TLS 1.3 Authentication and Integrity-Only Cipher Suites</title>
    <seriesInfo name="RFC" value="9150" stream="independent"/>
    <author fullname="Nancy Cam-Winget" initials="N" surname="Cam-Winget">
      <organization showOnFrontPage="true">Cisco Systems</organization>
      <address>
        <postal>
          <street>3550 Cisco Way</street>
          <city>San Jose</city>
          <country>United States of America</country>
          <code>95134</code>
          <region>CA</region>
        </postal>
        <email>ncamwing@cisco.com</email>
      </address>
    </author>
    <author fullname="Jack Visoky" initials="J" surname="Visoky">
      <organization showOnFrontPage="true">ODVA</organization>
      <address>
        <postal>
          <street>1 Allen Bradley Dr</street>
          <city>Mayfield Heights</city>
          <code>44124</code>
          <country>United States of America</country>
          <region>OH</region>
        </postal>
        <email>jmvisoky@ra.rockwell.com</email>
      </address>
    </author>
    <date month="04" year="2022"/>
    <area>Security</area>
    <workgroup>TLS</workgroup>
    <keyword>HMAC</keyword>
    <keyword>IoT</keyword>
    <keyword>constrained devices</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document defines the use of cipher suites for TLS 1.3 based on Hashed  Message Authentication Code (HMAC). Using these cipher suites provides server and, optionally, mutual authentication and data authenticity, but not data confidentiality.
 Cipher suites with these properties are not of general applicability, but there are use cases, specifically in Internet of Things (IoT) and constrained environments, that do not require confidentiality of exchanged messages while still requiring integrity protection, server authentication, and optional client authentication. This document gives examples of such use cases, with the caveat that prior to using these integrity-only cipher suites, a threat model for the situation at hand is needed, and a threat analysis must be performed within that model to determine whether the use of integrity-only cipher suites is appropriate. The approach described in this document is not endorsed by the IETF and does not have IETF consensus, but it is presented here to enable interoperable implementation of a reduced-security mechanism that provides authentication and message integrity without supporting confidentiality.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This is a contribution to the RFC Series, independently of any
            other RFC stream.  The RFC Editor has chosen to publish this
            document at its discretion and makes no statement about its value
            for implementation or deployment.  Documents approved for
            publication by the RFC Editor are not candidates for any level of
            Internet Standard; see Section 2 of RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9150" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2022 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-applicability-statement">Applicability Statement</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cryptographic-negotiation-u">Cryptographic Negotiation Using Integrity-Only Cipher Suites</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-record-payload-protection-f">Record Payload Protection for Integrity-Only Cipher Suites</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-schedule-when-using-int">Key Schedule when Using Integrity-Only Cipher Suites</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-error-alerts">Error Alerts</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-and-privacy-consid">Security and Privacy Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.10.2">
              <li pn="section-toc.1-1.10.2.1">
                <t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.2">
                <t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">There are several use cases in which communications privacy is not strictly needed, although authenticity of the communications transport is still very important. For example, within the industrial automation space, there could be TCP or UDP communications that command a robotic arm to move a certain distance at a certain speed. Without authenticity guarantees, an attacker could modify the packets to change the movement of the robotic arm, potentially causing physical damage. However, the motion control commands are not always considered to be sensitive information, and thus there is no requirement to provide confidentiality. Another Internet of Things (IoT) example with no strong requirement for confidentiality is the reporting of weather information; however, message authenticity is required to ensure integrity of the message.</t>
      <t indent="0" pn="section-1-2">There is no requirement to encrypt messages in environments where the information is not confidential, such as when there is no intellectual property associated with the processes, or where the threat model does not indicate any outsider attacks (such as in a closed system). Note, however, that this situation will not apply equally to all use cases (for example, in one case a robotic arm might be used for a process that does not involve any intellectual property but in another case might be used in a different process that does contain intellectual property). Therefore, it is important that a user or system developer carefully examine both the sensitivity of the data and the system threat model to determine the need for encryption before deploying equipment and security protections.</t>
      <t indent="0" pn="section-1-3">Besides having a strong need for authenticity and no need for confidentiality, many of these systems also have a strong requirement for low latency. Furthermore, several classes of IoT devices (industrial or otherwise) have limited processing capability. However, these IoT systems still gain great benefit from leveraging TLS 1.3 for secure communications. Given the reduced need for confidentiality, TLS 1.3 cipher suites <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> that maintain data integrity without confidentiality are described in this document. These cipher suites are not meant for general use, as they do not meet the confidentiality and privacy goals of TLS. They should only be used in cases where confidentiality and privacy are not a concern and there are constraints on using cipher suites that provide the full set of security properties. The approach described in this document is not endorsed by the IETF and does not have IETF consensus, but it is presented here to enable interoperable implementation of a reduced-security mechanism that provides authentication and message integrity with supporting confidentiality. </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-1">This document adopts the conventions for normative language to provide 
      clarity of instructions to the implementer.
      The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
      "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
      "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
      "<bcp14>SHOULD NOT</bcp14>",
      "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
      "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
      are to be interpreted as described in BCP 14
      <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only
      when, they appear in all capitals, as shown here.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-applicability-statement">Applicability Statement</name>
      <t indent="0" pn="section-3-1">The two cipher suites defined in this document, which are based on Hashed Message Authentication Code (HMAC) SHAs <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/>, are intended for a small limited set of applications where confidentiality requirements are relaxed and the need to minimize the number of cryptographic algorithms is prioritized. This section describes some of those applicable use cases. </t>
      <t indent="0" pn="section-3-2">Use cases in the industrial automation industry, while requiring data integrity, often do not require confidential communications. Mainly, data communicated to unmanned machines to execute repetitive
            tasks does not convey private information. For example, there could be a system with a robotic arm that paints the body of a car. This equipment is used within a car manufacturing plant and is just
                        one piece of equipment in a multi-step manufacturing process. The movements of this robotic arm are likely not a trade secret or sensitive intellectual property, although some portions of the manufacturing of the car
                        might very well contain sensitive intellectual property. Even the mixture for the paint itself might be confidential, but the mixing is done by a completely different piece of equipment and therefore communication to/from that equipment can be encrypted without requiring the communication to/from the robotic arm to be encrypted.
                        Modern manufacturing often has segmented equipment with different levels of risk related to intellectual property, although nearly every communication interaction has strong data authenticity requirements. </t>
      <t indent="0" pn="section-3-3">Another use case that is closely related is that of fine-grained time updates. Motion systems often rely on time synchronization to ensure proper execution. Time updates are essentially public; there is no threat from an attacker knowing the time update information. This should make intuitive sense to those not familiar with these applications; rarely if ever does time information present a serious attack surface dealing with privacy. However, the authenticity is still quite important. The consequences of maliciously modified time data can vary from mere denial of service to actual physical damage, depending on the particular situation and attacker capability. As these time synchronization updates are very fine-grained, it is again important for latency to be very low.</t>
      <t indent="0" pn="section-3-4">A third use case deals with data related to alarms. Industrial control sensing equipment can be configured to send alarm information when it meets certain conditions -- for example, temperature goes above or below a given threshold. Oftentimes, this data is used to detect certain out-of-tolerance conditions, allowing an operator or automated system to take corrective action. Once again, in many systems the reading of this data doesn't grant the attacker information that can be exploited; it is generally just information regarding the physical state of the system. At the same time, being able to modify this data would allow an attacker to either trigger alarms falsely or cover up evidence of an attack that might allow for detection of their malicious activity. Furthermore, sensors are often low-powered devices that might struggle to process encrypted and authenticated data. These sensors might be very cost sensitive such that there is not enough processing power for data encryption. Sending data that is just authenticated but not encrypted eases the burden placed on these devices yet still allows the data to be protected against any tampering threats. A user can always choose to pay more for a sensor with encryption capability, but for some, data authenticity will be sufficient. </t>
      <t indent="0" pn="section-3-5">A fourth use case considers the protection of commands in the railway industry. In railway control systems, no confidentiality requirements are applied for the command exchange between an interlocking controller and a railway equipment controller (for instance, a railway point controller of a tram track where the position of the controlled point is publicly available).
            However, protecting the integrity and authenticity of those commands is vital; otherwise, an adversary could change the target position of the point by modifying the commands, which consequently could lead to the derailment of a passing train.
            Furthermore, requirements for providing flight-data recording of the
safety-related network traffic can only be fulfilled through using authenticity-only ciphers as, typically, the recording is used by a third party responsible for the analysis after an accident. The analysis requires such third party to extract the safety-related commands from the recording.
</t>
      <t indent="0" pn="section-3-6">The fifth use case deals with data related to civil aviation airplanes and ground communication. Pilots can send and receive messages to/from ground control, such as airplane route-of-flight updates, weather information, controller and pilot communication, and airline back-office communication. Similarly, the Air Traffic Control (ATC) service uses air-to-ground communication to receive the surveillance data that relies on (is dependent on) downlink reports from an airplane's avionics. This communication occurs automatically in accordance with contracts established between the ATC ground system and the airplane's avionics. Reports can be sent whenever specific events occur or specific time intervals are reached. In many systems, the reading of this data doesn't grant the attacker information that can be exploited; it is generally just information regarding the states of the airplane, controller pilot communication, meteorological information, etc. At the same time, being able to modify this data would allow an attacker to either put aircraft in the wrong flight trajectory or provide false information to ground control that might delay flights, damage property, or harm life. Sending data that is not encrypted but is authenticated allows the data to be protected against any tampering threats. Data authenticity is sufficient for the air traffic, weather, and surveillance information exchanges between airplanes and the ground systems. </t>
      <t indent="0" pn="section-3-7"> The above use cases describe the requirements where confidentiality is not needed and/or interferes with other requirements. Some of these use cases are based on devices that come with a small runtime memory footprint and reduced processing power; therefore, the need to minimize the number of cryptographic algorithms used is a priority. Despite this, it is noted that memory, performance, and processing power implications of any given algorithm or set of algorithms are highly dependent on hardware and software architecture. Therefore, although these cipher suites may provide performance benefits, they will not necessarily provide these benefits in all cases on all platforms. Furthermore, in some use cases, third-party inspection of data is specifically needed, which is also supported through the lack of confidentiality mechanisms. </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-cryptographic-negotiation-u">Cryptographic Negotiation Using Integrity-Only Cipher Suites</name>
      <t indent="0" pn="section-4-1">The cryptographic negotiation as specified in <xref target="RFC8446" sectionFormat="comma" section="4.1.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-4.1.1" derivedContent="RFC8446"/> remains the same, with the inclusion of the following cipher suites: </t>
      <ul empty="true" indent="3" bare="false" spacing="normal" pn="section-4-2">
        <li pn="section-4-2.1">TLS_SHA256_SHA256 {0xC0,0xB4}</li>
        <li pn="section-4-2.2">TLS_SHA384_SHA384 {0xC0,0xB5}</li>
      </ul>
      <t indent="0" pn="section-4-3">
            As defined in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>, TLS 1.3 cipher suites denote the Authenticated Encryption with Associated Data (AEAD) algorithm for record protection and the hash algorithm to use with the HMAC-based Key Derivation Function (HKDF). The cipher suites provided by this document are defined in a similar way, but they use the HMAC authentication tag to model the AEAD interface, as only an HMAC is provided for record protection (without encryption). These cipher suites allow the use of SHA-256 or SHA-384 as the HMAC for data integrity protection as well as its use for the HKDF. The authentication mechanisms remain unchanged with the intent to only update the cipher suites to relax the need for confidentiality.</t>
      <t indent="0" pn="section-4-4"> Given that these cipher suites do not support confidentiality, they <bcp14>MUST NOT</bcp14> be used with authentication and key exchange methods that rely on confidentiality. </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-record-payload-protection-f">Record Payload Protection for Integrity-Only Cipher Suites</name>
      <t indent="0" pn="section-5-1">Record payload protection as defined in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> is retained in modified form when integrity-only cipher suites are used. Note that due to the purposeful use of hash algorithms, instead of AEAD algorithms, confidentiality protection of the record payload is not provided.
            This section describes the mapping of record payload structures when integrity-only cipher suites are employed. </t>
      <t indent="0" pn="section-5-2"> Given that there is no encryption to be done at the record layer, the operations "Protect" and "Unprotect" take the place of "AEAD-Encrypt" and "AEAD-Decrypt" <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>, respectively.</t>
      <t indent="0" pn="section-5-3"> As integrity protection is provided over the full record, the encrypted_record in the TLSCiphertext along with the additional_data input to protected_data (termed AEADEncrypted data in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>) as defined in <xref target="RFC8446" sectionFormat="of" section="5.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-5.2" derivedContent="RFC8446"/> remain the same.
            The TLSCiphertext.length for the integrity cipher suites will be: </t>
      <artwork name="" type="" align="left" alt="" pn="section-5-4">
TLS_SHA256_SHA256:
   TLSCiphertext.length = TLSInnerPlaintext_length + 32

TLS_SHA384_SHA384:
   TLSCiphertext.length = TLSInnerPlaintext_length + 48
</artwork>
      <t indent="0" pn="section-5-5"> Note that TLSInnerPlaintext_length is not defined as an explicit field in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>; this refers to the length of the encoded TLSInnerPlaintext structure.</t>
      <t indent="0" pn="section-5-6"> The resulting protected_record is the concatenation of the TLSInnerPlaintext with the resulting HMAC. Note that this is analogous to the "encrypted_record" as defined in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>, although it is referred to as a "protected_record" because of the lack of confidentiality via encryption. With this mapping, the record validation order as defined in <xref target="RFC8446" sectionFormat="of" section="5.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-5.2" derivedContent="RFC8446"/> remains the same. That is, the encrypted_record field of TLSCiphertext is set to: </t>
      <artwork name="" type="" align="left" alt="" pn="section-5-7">
   encrypted_record = TLS13-HMAC-Protected = TLSInnerPlaintext ||
   HMAC(write_key, nonce || additional_data || TLSInnerPlaintext)
</artwork>
      <t indent="0" pn="section-5-8">Here, "nonce" refers to the per-record nonce described in <xref target="RFC8446" sectionFormat="of" section="5.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-5.3" derivedContent="RFC8446"/>.</t>
      <t indent="0" pn="section-5-9"> For DTLS 1.3, the DTLSCiphertext is set to:</t>
      <artwork name="" type="" align="left" alt="" pn="section-5-10">
   encrypted_record = DTLS13-HMAC-Protected = DTLSInnerPlaintext ||
   HMAC(write_key, nonce || additional_data || DTLSInnerPlaintext)
</artwork>
      <t indent="0" pn="section-5-11"> The DTLS "nonce" refers to the per-record nonce described in <xref target="RFC9147" sectionFormat="of" section="4.2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9147#section-4.2.2" derivedContent="DTLS13"/>.</t>
      <t indent="0" pn="section-5-12"> The Protect and Unprotect operations provide the integrity protection using HMAC SHA-256 or HMAC SHA-384 as described in <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/>.</t>
      <t indent="0" pn="section-5-13"> Due to the lack of encryption of the plaintext, record padding does not provide any obfuscation as to the plaintext size, although it can be optionally included.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-key-schedule-when-using-int">Key Schedule when Using Integrity-Only Cipher Suites</name>
      <t indent="0" pn="section-6-1"> The key derivation process for integrity-only cipher suites remains the same as that defined in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>. The only difference is that the keys used to protect the tunnel apply to the negotiated HMAC SHA-256 or HMAC SHA-384 ciphers. Note that the traffic key material (client_write_key, client_write_iv, server_write_key, and server_write_iv) <bcp14>MUST</bcp14> be calculated as per <xref target="RFC8446" sectionFormat="comma" section="7.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-7.3" derivedContent="RFC8446"/>. The key lengths and Initialization Vectors (IVs) for these cipher suites are according to the hash output lengths. In other words, the following key lengths and IV lengths <bcp14>SHALL</bcp14> be: </t>
      <table align="center" pn="table-1">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Cipher Suite</th>
            <th align="left" colspan="1" rowspan="1">Key Length</th>
            <th align="left" colspan="1" rowspan="1">IV Length</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">TLS_SHA256_SHA256</td>
            <td align="left" colspan="1" rowspan="1">32 Bytes</td>
            <td align="left" colspan="1" rowspan="1">32 Bytes</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">TLS_SHA384_SHA384</td>
            <td align="left" colspan="1" rowspan="1">48 Bytes</td>
            <td align="left" colspan="1" rowspan="1">48 Bytes</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-error-alerts">Error Alerts</name>
      <t indent="0" pn="section-7-1">The error alerts as defined by <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> remain the same; in particular: </t>
      <dl newline="false" spacing="normal" indent="3" pn="section-7-2">
        <dt pn="section-7-2.1">bad_record_mac:</dt>
        <dd pn="section-7-2.2">This alert can also occur for a record whose message authentication code cannot be validated. Since these cipher suites do not involve record encryption, this alert will only occur when the HMAC fails to verify.</dd>
        <dt pn="section-7-2.3">decrypt_error:</dt>
        <dd pn="section-7-2.4">This alert, as described in <xref target="RFC8446" sectionFormat="comma" section="6.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-6.2" derivedContent="RFC8446"/>, occurs when the signature or message authentication code cannot be validated. Note that this error is only sent during the handshake, not for an error in validating record HMACs.</dd>
      </dl>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-8-1">IANA has registered the following cipher suites, defined by this document, in the "TLS Cipher Suites" registry:</t>
      <table anchor="iana_table" align="center" pn="table-2">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Value</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
            <th align="left" colspan="1" rowspan="1">DTLS-OK</th>
            <th align="left" colspan="1" rowspan="1">Recommended</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">0xC0,0xB4</td>
            <td align="left" colspan="1" rowspan="1">TLS_SHA256_SHA256</td>
            <td align="left" colspan="1" rowspan="1">Y</td>
            <td align="left" colspan="1" rowspan="1">N</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0xC0,0xB5</td>
            <td align="left" colspan="1" rowspan="1">TLS_SHA384_SHA384</td>
            <td align="left" colspan="1" rowspan="1">Y</td>
            <td align="left" colspan="1" rowspan="1">N</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-security-and-privacy-consid">Security and Privacy Considerations</name>
      <t indent="0" pn="section-9-1">In general, except for confidentiality and privacy, the security considerations detailed in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> and <xref target="RFC5246" format="default" sectionFormat="of" derivedContent="RFC5246"/> apply to this document. Furthermore, as the cipher suites described in this document do not provide any confidentiality, it is important that they only be used in cases where there are no confidentiality or privacy requirements and concerns; the runtime memory requirements can accommodate support for authenticity-only cryptographic constructs.</t>
      <t indent="0" pn="section-9-2">With the lack of data encryption specified in this specification, no confidentiality or privacy is provided for the data transported via the TLS session. That is, the record layer is not encrypted when using these cipher suites, nor is the handshake. To highlight the loss of privacy, the information carried in the TLS handshake, which includes both the server and client certificates, while integrity protected, will be sent unencrypted. Similarly, other TLS extensions that may be carried in the server's EncryptedExtensions message will only be integrity protected without provisions for confidentiality. Furthermore, with this lack of confidentiality, any private Pre-Shared Key (PSK) data <bcp14>MUST NOT</bcp14> be sent in the handshake while using these cipher suites. However, as PSKs may be loaded externally, these cipher suites can be used with the 0-RTT handshake defined in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>, with the same security implications discussed therein applied. </t>
      <t indent="0" pn="section-9-3">Application protocols that build on TLS or DTLS for protection (e.g., HTTP) may have implicit assumptions of data confidentiality. Any assumption of data confidentiality is invalidated by the use of these cipher suites, as no data confidentiality is provided. This applies to any data sent over the application-data channel (e.g., bearer tokens in HTTP), as data requiring confidentiality <bcp14>MUST NOT</bcp14> be sent using these cipher suites.</t>
      <t indent="0" pn="section-9-4">  Limits on key usage for AEAD-based ciphers are described in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>. However, as the cipher suites discussed here are not AEAD, those same limits do not apply. The general security properties of HMACs discussed in <xref target="RFC2104" format="default" sectionFormat="of" derivedContent="RFC2104"/> and <xref target="BCK1" format="default" sectionFormat="of" derivedContent="BCK1"/> apply.  Additionally, security considerations on the algorithm's strength based on the HMAC key length and truncation length further described in <xref target="RFC4868" format="default" sectionFormat="of" derivedContent="RFC4868"/> also apply. Until further cryptanalysis demonstrates limitations on key usage for HMACs, general practice for key usage recommends that implementations place limits on the lifetime of the HMAC keys and invoke a key update as described in <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> prior to reaching this limit. </t>
      <t indent="0" pn="section-9-5">DTLS 1.3 defines a mechanism for encrypting the DTLS record sequence numbers. However, as these cipher suites do not utilize encryption, the record sequence numbers are sent unencrypted. That is, the procedure for DTLS record sequence number protection is to apply no protection for these cipher suites. </t>
      <t indent="0" pn="section-9-6">Given the lack of confidentiality, these cipher suites <bcp14>MUST NOT</bcp14> be enabled by default. As these cipher suites are meant to serve the IoT market, it is important that any IoT endpoint that uses them be explicitly configured with a policy of non-confidential communications. </t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9147" to="DTLS13"/>
    <references pn="section-10">
      <name slugifiedName="name-references">References</name>
      <references pn="section-10.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="BCK1" target="https://link.springer.com/chapter/10.1007/3-540-68697-5_1" quoteTitle="true" derivedAnchor="BCK1">
          <front>
            <title>Keying Hash Functions for Message Authentication</title>
            <author initials="M." surname="Bellare">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Canetti">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Krawczyk">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1996"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/3-540-68697-5_1"/>
        </reference>
        <reference anchor="RFC9147" target="https://www.rfc-editor.org/info/rfc9147" quoteTitle="true" derivedAnchor="DTLS13">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author initials="E" surname="Rescorla" fullname="Eric Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H" surname="Tschofenig" fullname="Hannes Tschofenig">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N" surname="Modadugu" fullname="Nagendra Modadugu">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2022" month="April"/>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC2104" target="https://www.rfc-editor.org/info/rfc2104" quoteTitle="true" derivedAnchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Bellare" fullname="M. Bellare">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Canetti" fullname="R. Canetti">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="February"/>
            <abstract>
              <t indent="0">This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key.  The cryptographic strength of HMAC depends on the properties of the underlying hash function.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC4868" target="https://www.rfc-editor.org/info/rfc4868" quoteTitle="true" derivedAnchor="RFC4868">
          <front>
            <title>Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 with IPsec</title>
            <author initials="S." surname="Kelly" fullname="S. Kelly">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Frankel" fullname="S. Frankel">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="May"/>
            <abstract>
              <t indent="0">This specification describes the use of Hashed Message Authentication Mode (HMAC) in conjunction with the SHA-256, SHA-384, and SHA-512 algorithms in IPsec.  These algorithms may be used as the basis for data origin authentication and integrity verification mechanisms for the Authentication Header (AH), Encapsulating Security Payload (ESP), Internet Key Exchange Protocol (IKE), and IKEv2 protocols, and also as Pseudo-Random Functions (PRFs) for IKE and IKEv2.  Truncated output lengths are specified for the authentication-related variants, with the corresponding algorithms designated as HMAC-SHA-256-128, HMAC-SHA-384-192, and HMAC-SHA-512-256.  The PRF variants are not truncated, and are called PRF-HMAC-SHA-256, PRF-HMAC-SHA-384, and PRF-HMAC-SHA-512.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4868"/>
          <seriesInfo name="DOI" value="10.17487/RFC4868"/>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" quoteTitle="true" derivedAnchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3rd">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
      </references>
      <references pn="section-10.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC5246" target="https://www.rfc-editor.org/info/rfc5246" quoteTitle="true" derivedAnchor="RFC5246">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author initials="T." surname="Dierks" fullname="T. Dierks">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="August"/>
            <abstract>
              <t indent="0">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>
      </references>
    </references>
    <section anchor="Acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">The authors would like to acknowledge the work done by Industrial Communications Standards Groups (such as ODVA) as the motivation for this document. We would also like to thank <contact fullname="Steffen Fries"/> for providing a fourth use case and <contact fullname="Madhu Niraula"/> for a fifth use case. In addition, we are grateful for the advice and feedback from <contact fullname="Joe Salowey"/>, <contact fullname="Blake Anderson"/>, <contact fullname="David McGrew"/>, <contact fullname="Clement Zeller"/>, and <contact fullname="Peter Wu"/>.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Nancy Cam-Winget" initials="N" surname="Cam-Winget">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <postal>
            <street>3550 Cisco Way</street>
            <city>San Jose</city>
            <country>United States of America</country>
            <code>95134</code>
            <region>CA</region>
          </postal>
          <email>ncamwing@cisco.com</email>
        </address>
      </author>
      <author fullname="Jack Visoky" initials="J" surname="Visoky">
        <organization showOnFrontPage="true">ODVA</organization>
        <address>
          <postal>
            <street>1 Allen Bradley Dr</street>
            <city>Mayfield Heights</city>
            <code>44124</code>
            <country>United States of America</country>
            <region>OH</region>
          </postal>
          <email>jmvisoky@ra.rockwell.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
