| Internet-Draft | tcp-ao-algs | May 2026 |
| Bonica & Li | Expires 28 November 2026 | [Page] |
RFC5926 creates a list of cryptographic algorithms that can be used with TCP-AO. This document expands that list, adding two Key Derivation Functions (KDFs) and two Message Authentication Code (MAC) Algorithms. They are called HKDF-SHA256, KMAC256-KDF, HMAC-SHA256-128, and KMAC256-128.¶
The algorithms described by this document produce 128-bit (i.e., 16-byte) MACs. When 16-byte MACs are encoded in TCP-AO, the TCP-AO consumes 20 bytes. This does not challenge TCP's 40-byte option size limitation.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 28 November 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
[RFC5926] creates a list of cryptographic algorithms that can be used with TCP-AO [RFC5925]. This document expands that list, adding two Key Derivation Functions (KDFs) and two Message Authentication Code (MAC) Algorithms. They are called HKDF-SHA256, KMAC256-KDF, HMAC-SHA256-128, and KMAC256-128.¶
The algorithms described by this document produce 128-bit (i.e., 16-byte) MACs. When 16-byte MACs are encoded in TCP-AO, the TCP-AO consumes 20 bytes. This does not challenge TCP's [RFC9293] 40-byte option size limitation.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
[RFC5925] requires the following cryptographic algorithm classes:¶
Section 3.1 of this document addresses KDFs while Section 3.2 addresses MAC algorithms.¶
A KDF converts Initial Keying Material (IKM) into cryptographically secure Output Keying Material (OKM). In the case of TCP-AO, a KDF converts a administratively assigned Master_Key into a Traffic_Key.¶
KDFs have the following interface:¶
Traffic_Key = KDF_alg(Master_Key, Context, Output_Length)¶
where:¶
KDF_alg is the KDF algorithm being used.¶
Master_Key is a variable length, human-readable pre-shared key (PSK).¶
Context is binary string containing information related to the TCP connection, as defined in [RFC5925], Section 5.2.¶
Output_Length is the desired length of the Traffic_Key. In this document, the Output-Length is always equal to 256 bits.¶
This document defines two KDFs:¶
Section 3.1.1 of this document describes HKDF-SHA256 while Section 3.1.2 describes KMAC256-KDF.¶
HKDF-SHA256 is as described in [RFC5869]. HKDF-SHA256 executes in the following stages:¶
The interface to the Extract stage is:¶
PRK = HKDF-Extract(salt, IKM)¶
where:¶
PRK is a Pseudo-random key, to be used in the Expand stage.¶
Salt is a string of 256 zeros.¶
IKM is the Master_Key argument provided to the KDF interface.¶
According to [RFC5869], the goal of the extract stage is to concentrate the possibly dispersed entropy of the input keying material into a short, but cryptographically strong pseudorandom key. In some applications, the input may already be a good pseudorandom key. In these cases, the extract stage is not necessary, and the expand part can be used alone. However, when used with TCP-AO, implementations MUST execute the extract stage.¶
The interface to the Expand Step is:¶
OKM = HKDF-Expand(PRK, info, L)¶
where:¶
OKM is the Traffic_Key.¶
PRK is the value produced by the Extract stage.¶
info is the Context argument provided to the KDF interface.¶
L is the Output_length argument provided to the KDF interface.¶
The expand step expands the pseudorandom key to the desired length. The number and lengths of the output keys depend on the specific cryptographic algorithms for which the keys are needed.¶
KMAC256-KDF is as described in [RFC9688]. The interface to KMAC256-KDF is:¶
OKM = KMAC256(K, X, L, S).¶
Where :¶
OKM is is the Traffic_Key.¶
K is the Master_Key argument provided to the KDF interface.¶
X is the Context argument provided to the KDF interface.¶
L is the Output_length argument provided to the KDF interface.¶
S is application specific information. It is always equal to "TCP-AO".¶
KMAC256-KDF operates in the following stages:¶
Both stages compensate for lack of entropy in the Master_Key and neither stage is optional.¶
Each MAC algorithm defined for TCP-AO has the following fixed elements as part of its definition:¶
KDF_Alg is the name of the KDF algorithm used to generate the Traffic_Key.¶
Key_Length is the length of the Traffic_Key used in this MAC, measured in bits. In this document, the Key_Length is always 256 bits.¶
MAC_Length is the desired length of the MAC to be produced by the algorithm. In this document, the MAC_Length is always 128 bits.¶
MACs computed for TCP-AO have the following interface:¶
MAC = MAC_alg(Traffic_Key, Message)¶
where:¶
MAC is the value to be encoded in TCP-AO.¶
MAC_alg is MAC Algorithm used.¶
Traffic_Key is the result of KDF.¶
Message is the message to be authenticated, as specified in [RFC5925], Section 5.1.¶
The three fixed elements for HMAC-SHA256-128 are:¶
For:¶
MAC = MAC_alg (Traffic_Key, Message)¶
HMAC-SHA-256-128 for TCP-AO has the following values:¶
This document inherits all of the security considerations of [RFC5869], [RFC5925], and [RFC8702].¶
The security of cryptography-based systems depends on both the strength of the cryptographic algorithms chosen and the strength of the keys used with those algorithms. The security also depends on the engineering of the protocol used by the system to ensure that there are no non-cryptographic ways to bypass the security of the overall system.¶
Master_Keys SHOULD have 256 bits of entropy. This document RECOMMENDS that operators randomly generate 256-bit strings for use as Master_Keys. However, it is understood that that may not do so.¶
TCP-AO Master Key Tuples MUST be rotated at a rate commensurate with the strength of the cryptographic algorithms.¶
IANA is requested to add the following entries to the "Cryptographic Algorithms for TCP-AO Registration" (https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-3).¶
| Algorithm | Reference |
|---|---|
| HMAC-SHA256-128 | This Document |
| KMAC256-128 | This Document |
Thanks to Eric Biggers, Lars Eggert, Gorry Fairhurst, C.M. Heard, Russ Housley, John Mattsson, Yoshifumi Nishida, Joe Touch, Michael Tuxen, and Magnus Westerlund for their review and comments.¶