<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.2.3) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-ipsecme-sha3-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SHA-3 in IKEv2 and IPsec">Use of SHA-3 in the Internet Key Exchange Protocol Version 2 (IKEv2) and IPsec</title>

    <author fullname="Ben Salter">
      <organization>UK National Cyber Security Centre</organization>
      <address>
        <email>Ben.S3@ncsc.gov.uk</email>
      </address>
    </author>
    <author fullname="Adam Raine">
      <organization>UK National Cyber Security Centre</organization>
      <address>
        <email>Adam.R@ncsc.gov.uk</email>
      </address>
    </author>
    <author fullname="Jonathan Cruickshanks">
      <organization>UK National Cyber Security Centre</organization>
      <address>
        <email>Jonathan.C@ncsc.gov.uk</email>
      </address>
    </author>

    <date year="2026" month="January" day="29"/>

    <area>Security</area>
    <workgroup>IPSECME</workgroup>
    <keyword>ipsec</keyword> <keyword>sha-3</keyword> <keyword>ikev2</keyword> <keyword>kmac</keyword>

    <abstract>


<t>This document specifies the use of KMAC128 and KMAC256 within the Internet Key Exchange Version 2 (IKEv2), Encapsulating Security Payload (ESP), and Authentication Header (AH) protocols.
These algorithms can be used as integrity protection algorithms for ESP, AH and IKEv2, and as Pseudo-Random Functions (PRFs) for IKEv2.
Requirements for supporting signature algorithms in IKEv2 that use SHA3-256, SHA3-384, SHA3-512, SHAKE128 and SHAKE256 are also specified.</t>



    </abstract>



  </front>

  <middle>


<section anchor="changes-in-draft-ietf-ipsecme-sha3-01"><name>Changes in draft-ietf-ipsecme-sha3-01</name>

<t><list style="symbols">
  <t>Doubled the preferred key size of KMAC128 and KMAC256 from 128/256 to 256/512 to align with <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>.
This doesn't add any additional security, but does mean that the preferred key size matches the PRF output length.</t>
  <t>In places where IKEv2 would normally call prf+, KMAC is now used directly to produce as much key material as needed.
This differs from the approach described in prior versions of this document, where prf+ was still used, but only the first iteration was ever needed.
This aligns the document with <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>.</t>
  <t>Added editorial notes about the use of customization strings for KMAC.
This deviates from <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>, but comments at IETF 123 suggested that further discussion is needed before committing to not using customization strings.</t>
  <t>Expanded editorial note around INTEG transforms, as the utility of these transforms was questioned at IETF 123.</t>
</list></t>

</section>
<section anchor="introduction"><name>Introduction</name>

<t><xref target="FIPS-202"/> specifies both the SHA3-256, SHA3-384 and SHA3-512 cryptographic hash functions, and the SHAKE eXtendable-output functions (XOFs).
<xref target="SP-800-185"/> specifies KMAC128 and KMAC256, which use variants of SHAKE128 and SHAKE256 respectively to create a message authentication code (MAC).
Like the output of SHAKE, the MAC output of KMAC can be of any length required by the application.</t>

<t>This document specifies how to use KMAC128 and KMAC256 with IKEv2 and IPsec for integrity protection, and as a PRF for IKEv2.
Use of KMAC as a PRF and in prf+ is aligned with the framework for use of XOFs in IKEv2 specified in <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>.
It also allocates values used for announcing support for SHA3-256, SHA3-384, SHA3-512, SHAKE128, and SHAKE256 when generating and validating signatures in IKEv2.</t>

<t>EDNOTE: Support for SHA3-224 is not included, though draft-ietf-lamps-cms-sha3-hash includes support for SHA3-224 with ECDSA.</t>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</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>

<t>Additionally, this document uses several terms to collectively refer to sets of algorithms.</t>

<t>The term "SHA-3 cryptographic hash functions" is used to collectively refer to SHA3-256, SHA3-384 and SHA3-512.</t>

<t>The term "KMAC" is used to collectively refer to KMAC128 and KMAC256.</t>

<t>The term "SHA-3" (without any other qualifiers) is used to collectively refer to the cryptographic algorithms defined in <xref target="FIPS-202"/> and <xref target="SP-800-185"/>.</t>

<t>The term "SHA-2" (without any other qualifiers) is used to collectively refer to SHA-256, SHA-384, and SHA-512.</t>

<t>The term "SHAKE" is used to collectively refer to SHAKE128 and SHAKE256.</t>

</section>
<section anchor="sha-3-and-keccak"><name>SHA-3 and Keccak</name>

<t>SHA-3 is a collection of cryptographic algorithms that all utilise the Keccak sponge construction.
<xref target="FIPS-202"/> describes the SHA-3 cryptographic hash functions, which produce a fixed-length digest for any length of input.
These hash functions are intended to be used in the same manner and contexts as other traditional hash functions such as SHA-2.
<xref target="FIPS-202"/> also describes the SHAKE XOFs.
An XOF differs from a traditional hash function in that the length of the XOF's output can be chosen by the application that uses it.
<xref target="SP-800-185"/> describes cSHAKE, a customisable version of SHAKE, and KMAC, which is a PRF and keyed hash function that utilises cSHAKE.
Like SHAKE and cSHAKE, the length of KMAC's output is application-dependent.</t>

<t>SHA-3 was specified to provide applications with an alternative to SHA-2, which is based on the Merkle-Damgård construction.
Use of the Merkle-Damgård construction in SHA-2 means that length extension attacks are possible if SHA-2 isn't used correctly.
At the time of writing, use of SHA-2 in IPsec is believed to be secure, and hence there is no security motivation to migrate away from SHA-2 to SHA-3 in this context.
However, in the event that a significant attack on SHA-2 is discovered, SHA-3 will be an immediately viable alternative.</t>

<t>Migration to use of post-quantum algorithms in IKEv2 may make use of SHA-3 more appealing for minimal implementations of IPsec, as <xref target="ML-KEM"/>, <xref target="ML-DSA"/>, <xref target="SLH-DSA"/>, and <xref target="FALCON"/> all make use of SHA-3 internally.
Since support for SHA-3 is required to implement these algorithms, some implementers may find it preferable to implement SHA-3, and only SHA-3, if interoperability with general-purpose IKEv2 and IPsec implementations is not required.</t>

<t>SHA-2 is used with HMAC in IKEv2 and IPsec.
Whilst SHA-3 can be used with HMAC, KMAC is more efficient as it directly uses the Keccak sponge function to produce a MAC, rather than treating Keccak as a traditional cryptographic hash function and then feeding that hash function into a separate MAC algorithm.
Therefore, this document only specifies use of KMAC, and not of HMAC-SHA3.</t>

</section>
<section anchor="kmac-api"><name>KMAC API</name>

<t>The basic API for KMAC is defined below.
The symbols used in this API description conform to those used for prf+ in <xref target="RFC7296"/>, which clash with the API described in <xref target="SP-800-185"/>.
<xref target="RFC7296"/> uses S to describe the input string to prf+, whereas <xref target="SP-800-185"/> uses that symbol for the optional customization string.
KMAC implementations used in IKEv2 and IPsec do not need to conform to these APIs exactly; they are merely used in this document for illustrative purposes.</t>

<t>For the purposes of this document, the API for KMAC is defined as:</t>

<t>KMAC(K, S, L, C) -&gt; Z</t>

<t>where:</t>

<t><list style="symbols">
  <t>K is the key.
It is a bit string of length between zero and (2^2040)-1 bits, inclusively.</t>
  <t>S is the input string.
It is a bit string of any length, including zero.</t>
  <t>L is an integer representing the requested output length in bits.
This parameter is typically fixed in the context of IPsec, except when extracting key material using prf+ in IKEv2, where it depends on the length of key material needed by the negotiated cipher suite.</t>
  <t>C is an optional customization string.
It is a bit string of length between zero and (2^2040)-1 bits, inclusively.</t>
  <t>Z is the output string of KMAC, which is a message authentication code.
It is a bit string of length L.</t>
</list></t>

</section>
<section anchor="constraints-on-kmac-inputs-and-outputs"><name>Constraints on KMAC inputs and outputs</name>

<t>Per <xref target="SP-800-185"/>, the length of the key input K input to KMAC <bcp14>MUST</bcp14> be less than 2^2040 bits.
In the context of IKEv2 and IPsec, there is no situation where a key that long would be expected.
Initiator and Responder nonces Ni and Nr are used as inputs to IKEv2 PRF calls, although the length of these nonces combined cannot exceed 4096 bits.
Pre-shared keys used for authentication in IKEv2 are used as keys with PRFs negotiated by IKEv2, and have no upper bound on their length.
Therefore, KMAC implementations used with IKEv2 <bcp14>MUST</bcp14> at minimum accept values of K up to and including 4096 bits in length.
Implementations <bcp14>MAY</bcp14> restrict the size of pre-shared key inputs such that they do not exceed 4096 bits.</t>

<t>There is no algorithm-defined minimum size for the key input to KMAC, but <xref target="prf-key-size-and-output-length"/> and <xref target="auth-key-size-and-output-length"/> list the recommended key sizes to be used within the context of IKEv2 and IPsec, aligned to the security strength of each algorithm.
Using a key smaller than the security strength of the chosen KMAC algorithm undermines the security properties of that algorithm.
Where IKEv2 is used to create security associations, the size of most PRF keys is automatically managed at the protocol level, and there is no risk of selecting an undersized key in these cases.
However, the size of keys used for PRFs in IKEv2 cannot always be controlled.</t>

<t>As an example, in the case of pre-shared keys used for authentication or protection against a quantum computer as in <xref target="RFC8784"/>, those secrets are used as the key input to a PRF negotiated by IKEv2.
Those pre-shared keys could be arbitrarily chosen by a user or derived from a password rather than securely generated, even though <xref target="RFC7296"/> strongly discourages this practice.
Keys chosen in this manner may be shorter than any recommended key size.
IKEv2 implementations following the recommendation laid out in <xref target="RFC7296"/> can impose constraints on suitable pre-shared keys.</t>

<t>Additionally, Ni and Nr are variable length and are used as the key for KMAC.
<xref target="RFC7296"/> states that each of these nonces <bcp14>MUST</bcp14> be at least 128 bits in size, and <bcp14>MUST</bcp14> be at least half the preferred key size for the negotiated PRF.
If an IKEv2 peer sends an undersized nonce, the message containing that nonce can be rejected in the same way as any malformed IKEv2 message would be.
Conformant KMAC implementations <bcp14>SHOULD</bcp14> reject keys that do not meet the security strength of the corresponding algorithm.</t>

<t>The input string S can be a variety of lengths in practice, but in the context of IKE and IPsec the length will always be a multiple of eight, as IKE and IPsec only operate on entire octets.
Similarly, KMAC's output length parameter L will always be a multiple of eight.
Since the length of output required from KMAC is always known in advance, KMAC with arbitrary-length output as described in Section 4.3.1 of <xref target="SP-800-185"/> is never used, and thus L is never set to 0.</t>

<t>KMAC's customization string C is fixed to a specific value depending on the context in which KMAC is used.
Future specifications may define additional customization strings, but the set of valid strings used by KMAC in IKEv2 and IPsec will always be fixed-length context-dependent strings specified in IETF RFCs rather than dynamically created, e.g. via random data.</t>

<t>EDNOTE:
This is a deviation from <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>.
If working group consensus is that customization strings shouldn't be used, this section will specify that customization string input is null.</t>

</section>
<section anchor="padding"><name>Padding</name>

<t>Since the length of the input string S for KMAC varies, and KMAC operates on fixed-size input blocks, padding is required to use KMAC in IKEv2 and IPsec.
The padding scheme for KMAC is specified in <xref target="SP-800-185"/>.
A KMAC implementation conformant to that document is sufficient; no additional padding is required to use these algorithms in IKEv2 or IPsec.</t>

<section anchor="kmac-key-padding"><name>KMAC Key Padding</name>

<t>When KMAC is used as the PRF for an IKE SA, the size of the key input K is variable.
If the size of a KMAC key is greater than the preferred key size as shown in <xref target="prf-key-size-and-output-length"/>, the key is used in its entirety without any kind of shortening or truncation.
As described in <xref target="SP-800-185"/>, keys are always padded up to a multiple of the rate of the underlying Keccak sponge function; that is, 168 bytes and 136 bytes for KMAC-128 and KMAC-256 respectively.
Any KMAC implementation conformant with <xref target="SP-800-185"/> is suitable for use in IKEv2 and IPsec; no protocol-specific additional padding of keys is required.</t>

</section>
</section>
<section anchor="parameters-and-security-strengths-for-kmac"><name>Parameters and security strengths for KMAC</name>

<t><xref target="output-length-and-security"/> describes the general properties of KMAC, with the HMAC-SHA2 algorithms also listed for comparison purposes.
The maximum security strengths listed are taken from <xref target="SP-800-57"/>.
Note that these are maximum security strengths.
Using keys that are shorter than the maximum security strength will constrain the maximum security strength of the chosen algorithm to be no higher than the length of that key.
Keys that contain insufficient entropy to meet the maximum security strength constrain the maximum security of the chosen algorithm to be no higher than the bits of entropy represented in the key.</t>

<texttable title="KMAC output length and security strength values, compared with HMAC-SHA2" anchor="output-length-and-security">
      <ttcol align='left'>Algorithm Name</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <ttcol align='left'>Maximum Security Strength (bits)</ttcol>
      <c>HMAC-SHA-256</c>
      <c>256</c>
      <c>&gt;=256</c>
      <c>HMAC-SHA-384</c>
      <c>384</c>
      <c>&gt;=256</c>
      <c>HMAC-SHA-512</c>
      <c>512</c>
      <c>&gt;=256</c>
      <c>KMAC128</c>
      <c>Variable</c>
      <c>128</c>
      <c>KMAC256</c>
      <c>Variable</c>
      <c>&gt;=256</c>
</texttable>

<t><xref target="prf-key-size-and-output-length"/> presents the parameters of KMAC when it is used as a PRF in IKEv2, with the HMAC-SHA2 algorithms also listed for comparison purposes.</t>

<texttable title="KMAC preferred key sizes and output lengths for use as a PRF, compared with HMAC-SHA2" anchor="prf-key-size-and-output-length">
      <ttcol align='left'>Algorithm Name</ttcol>
      <ttcol align='left'>PRF variant</ttcol>
      <ttcol align='left'>Preferred Key Size (bits)</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <c>HMAC-SHA-256</c>
      <c>PRF_HMAC_SHA2_256</c>
      <c>256</c>
      <c>256</c>
      <c>HMAC-SHA-384</c>
      <c>PRF_HMAC_SHA2_384</c>
      <c>384</c>
      <c>384</c>
      <c>HMAC-SHA-512</c>
      <c>PRF_HMAC_SHA2_512</c>
      <c>512</c>
      <c>512</c>
      <c>KMAC128</c>
      <c>PRF_KMAC_128</c>
      <c>256</c>
      <c>256, or length of output required for prf+</c>
      <c>KMAC256</c>
      <c>PRF_KMAC_256</c>
      <c>512</c>
      <c>512, or length of output required for prf+</c>
</texttable>

<t>The security strength of these algorithms is equal to the maximum security strength indicated for that algorithm in <xref target="output-length-and-security"/>, unless the entropy of the supplied key is insufficient to meet that strength.
Note that the preferred key size for both KMAC variants is double the security strength of each algorithm.
This is to align with the requirement in <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/> that, when an XOF is used as a PRF, the preferred key size must match the output length of the PRF.</t>

<t>When key material is extracted from IKEv2's prf+ Key Derivation Function (KDF) for use with KMAC as a PRF in IKEv2, the length of keys extracted <bcp14>MUST</bcp14> conform to the preferred key sizes listed in <xref target="prf-key-size-and-output-length"/>.</t>

<t>EDNOTE: The KMAC output lengths have been aligned with HMAC, but if we're not depending on collision resistance, could they be reduced to 128/256 bits respectively?
This would also mean that the key size could be reduced back down to 128/256 bits; they only need to be 256/512 bits to maintain conformance with <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>.</t>

<t><xref target="auth-key-size-and-output-length"/> presents the parameters of KMAC when it is used for data origin authentication and integrity protection in IKEv2 and IPsec, with the HMAC-SHA2 algorithms also listed for comparison purposes.</t>

<texttable title="KMAC key sizes and output lengths for use as an Integrity Algorithm Transform, compared with HMAC-SHA2" anchor="auth-key-size-and-output-length">
      <ttcol align='left'>Algorithm Name</ttcol>
      <ttcol align='left'>Integrity variant</ttcol>
      <ttcol align='left'>Key Size (bits)</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <c>HMAC-SHA-256</c>
      <c>AUTH_HMAC_SHA2_256_128</c>
      <c>256</c>
      <c>128</c>
      <c>HMAC-SHA-384</c>
      <c>AUTH_HMAC_SHA2_384_192</c>
      <c>384</c>
      <c>192</c>
      <c>HMAC-SHA-512</c>
      <c>AUTH_HMAC_SHA2_512_256</c>
      <c>512</c>
      <c>256</c>
      <c>KMAC128</c>
      <c>AUTH_KMAC_128</c>
      <c>128</c>
      <c>128</c>
      <c>KMAC256</c>
      <c>AUTH_KMAC_256</c>
      <c>256</c>
      <c>256</c>
</texttable>

<t>When used for authentication and integrity protection, KMAC message authentication codes are produced using a smaller value for the "requested output length" parameter L.
In this case, the security strength of each given algorithm is constrained by its output length.</t>

<t>When key material is extracted from IKEv2's prf+ KDF for use with KMAC for data origin authentication and integrity protection in IKEv2 or IPsec, the length of keys extracted <bcp14>MUST</bcp14> conform to the key sizes listed in <xref target="auth-key-size-and-output-length"/>.</t>

</section>
<section anchor="kmac-as-a-prf-in-ikev2"><name>KMAC as a PRF in IKEv2</name>

<t>IKEv2 Security Associations (SAs) make use of a PRF for authentication purposes, and as a part of the prf+ Key Derivation Function (KDF).
KMAC can act as the PRF for an IKE SA, but it is treated slightly differently to existing PRFs as it is capable of producing different output lengths depending on the context in which it is used.</t>

<t>With KMAC, the key K is either a fixed-length key (such as SK_d) that is the preferred key size for the variant of KMAC being used, or the length of K is dependent on other factors.
When the PRF is used with nonce inputs as the key K (e.g. when generating SKEYSEED), or when the PRF is used with a pre-shared key as the input key K, the length of K depends on implementation-specific details, user configuration options, etc.</t>

<t>When KMAC is used as the PRF for an IKE SA, its "requested output length" parameter L and "customization string" parameter C are populated differently depending on whether KMAC is being used as a part of the prf+ construction in the IKEv2 KDF or not.
This process is described in more detail in <xref target="kmac-as-prf"/> and <xref target="kmac-in-prf-plus"/>.</t>

<section anchor="kmac-as-prf"><name>KMAC as a PRF</name>

<t>When used in IKEv2 as a PRF outside the prf+ construction, KMAC's output length L is 128 for KMAC128, and 256 for KMAC256.
That is, the output length is the same size as the security strength and preferred key size of the given KMAC algorithm.
Note that the situation is different when KMAC is used within the prf+ construction, as described in <xref target="kmac-in-prf-plus"/>.</t>

<t>When KMAC is used as a PRF outside the prf+ construction, the customization string C is set to the ASCII character string "ikev2 prf", without null termination.</t>

<t>EDNOTE:
This is a deviation from <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>.
If working group consensus is that customization strings shouldn't be used, this section will specify that customization string input is null.</t>

</section>
<section anchor="kmac-in-prf-plus"><name>KMAC in prf+</name>

<t><xref target="RFC7296"/> defines an iterative function called "prf+" that can be used with a PRF to produce a pseudorandom stream of arbitrary length.
Typically prf+ is used to derive SA keys from SKEYSEED or SK_d.
However, as described in <xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/>, prf+ isn't necessary when using an XOF, as a single call to the XOF can produce as many pseudorandom bits are as needed.
As such, prf+ <bcp14>MUST NOT</bcp14> be used when KMAC128 or KMAC256 have been negotiated.
Instead, KMAC is called once, and the L input parameter is set to the length of the keying material required.</t>

<t>When KMAC is used where prf+ would normally be used, the customization string C is set to the ASCII character string "ikev2 kdf", without null termination.</t>

<t>EDNOTE:
<xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/> specifies that additional inputs like KMAC's customization string mustn't be used.
This version of the draft still includes use of the customization string, as feedback at IETF 123 indicated some support for this approach.
Use of the customization string would provide domain separation for uses of the same key across standard PRF calls and prf+.
For instance, given that KMAC replaces prf+ entirely:</t>

<t>SKEYSEED = prf(SK_d (old), g^ir (new) | Ni | Nr)</t>

<t>and</t>

<t>KEYMAT = prf+(SK_d, g^ir (new) | Ni | Nr)</t>

<t>would produce the same value with the same inputs, whereas the same wouldn't be true of HMAC.
This isn't obviously a security problem, but use of customization strings would remove any risk entirely.</t>

</section>
</section>
<section anchor="kmac-for-integrity-protection-in-esp-ah-and-ikev2"><name>KMAC for integrity protection in ESP, AH and IKEv2</name>

<t>IKE and IPsec SAs can make use of an integrity protection algorithm to provide data origin authentication and integrity protection services.
KMAC can be used to provide these services.
As described in <xref target="RFC8221"/>, Authenticated Encryption with Associated Data (AEAD) ciphers are the fastest and most modern approach to providing these services in conjunction with confidentiality protection.
KMAC <bcp14>MUST NOT</bcp14> be negotiated in IKEv2 in conjunction with an AEAD cipher.</t>

<t>KMAC <bcp14>MAY</bcp14> be used as an integrity protection algorithm with:</t>

<t><list style="symbols">
  <t>ESP in conjunction with a non-AEAD cipher</t>
  <t>ESP and null encryption (ENCR_NULL)</t>
  <t>IKEv2 in conjunction with a non-AEAD cipher</t>
  <t>AH</t>
</list></t>

<t>EDNOTE BEGINS
In general RFC 8247 and RFC 8221 recommend an AEAD algorithm, not using split ENCR and INTEG transforms.
However, there are two cases where an INTEG transform is useful.</t>

<t>The first is "authenticated-only communications without encryption, such as ESP with NULL encryption or AH communications" as described in RFC 8221.
IKE always requires encryption, so this case only applies to Child SAs.
Negotiating the ENCR_NULL transform with an INTEG transform is the preferred means to achieve this.
Use of AH is an alternative, but not encouraged.</t>

<t>The second is where a non-AEAD cipher is used for encryption.
Most modern IPsec implementations (i.e. those that can be modified to support KMAC) shouldn't be doing this.
However, RFC 8221 cites IoT devices that can't hold state as a motivation for continuing to use AES_ENCR_CBC, as risk of reuse of nonces for GCM, CCM or ChaCha20Poly1305 is high.</t>

<t>So there is a niche for INTEG transforms, it's just very limited.
They're simple to specify; is it worth it to specify them here, or is having a "new" INTEG transform likely to confuse users?</t>

<t>We could recommend that KMAC not be used with AH, and recommend that an AEAD cipher is used where feasible.
Is this the right place to make that recommendation, or should that be in an update to RFC 8247/RFC 8221?</t>

<t>EDNOTE ENDS</t>

<t>When using KMAC, the L input parameter is always set to the same value as the key size and security strength of the chosen KMAC algorithm.
That is, the output length of KMAC128 is always set to 128 bits, and the output length of KMAC256 is always set to 256 bits.</t>

<t>When used with ESP or AH, the "customization string" parameter C is set to the ASCII character string "ipsec integ", without null termination.
When used with IKEv2 for integrity protection, the "customization string" parameter C is set to the ASCII character string "ikev2 integ", without null termination.</t>

<t>EDNOTE:
<xref target="I-D.ietf-ipsecme-ikev2-prf-plus"/> specifies that customization strings must be null for use of XOFs with prf/prf+, although it doesn't say anything about ESP/AH.
See <xref target="kmac-in-prf-plus"/> for further discussion as to why we're proposing using customization strings more generally.
They're perhaps less important here as ESP/AH keys are only used to encrypt ESP/AH packets, whereas keys in IKE tend to be used for a wider range of purposes.
If working group consensus is that customization strings shouldn't be used, this section will specify that customization string input is null.</t>

</section>
<section anchor="use-of-sha-3-in-the-digital-signature-authentication-method-in-ikev2"><name>Use of SHA-3 in the Digital Signature authentication method in IKEv2</name>

<t>SHAKE and the SHA-3 cryptographic hash functions can generate digests for use with signature algorithms.
For instance, <xref target="RFC8692"/> specifies algorithm identifiers for using RSASSA-PSS and ECDSA with SHAKE, and NIST has assigned OIDs for using RSA PKCS #1 v1.5 signatures with SHA-3 <xref target="NISTOIDS"/>.</t>

<t><xref target="RFC7427"/> specifies the "Digital Signature" (14) authentication method, that allows IKEv2 to support any signature algorithm without the need to specify an authentication method for every new combination of signature algorithm and hash function.
The Digital Signature authentication method is the only way to utilise SHA-3 with signatures in IKEv2, so if a peer uses SHA-3 in this context, it <bcp14>MUST</bcp14> specify the Digital Signature authentication method in its corresponding AUTH payload.</t>

<t>The Digital Signature authentication method specifies use of a SIGNATURE_HASH_ALGORITHMS notification by each IKEv2 peer to announce the hash functions it supports for use with signatures.
This specification defines values in <xref target="hash-transforms"/> for announcing support for SHA-3 algorithms in the SIGNATURE_HASH_ALGORITHMS notification.
When an IKEv2 implementation supports SHA-3 in this context, and local policy permits use of SHA-3 to generate or verify signatures, it <bcp14>MUST</bcp14> include the corresponding values in its SIGNATURE_HASH_ALGORITHMS notification.</t>

</section>
<section anchor="considerations-for-implementers-and-for-future-ipsec-documents"><name>Considerations for implementers and for future IPsec documents</name>

<t>KMAC's API differs from most PRF and Integrity Algorithm transforms as described in <xref target="kmac-api"/>.
Care should be taken with the output length parameter L in particular, as its behavior can be counter-intuitive when compared to other integrity algorithms where a truncated output is used as an authenticator value.
Unlike SHAKE, KMAC outputs of different lengths are not related.
That is, the value of L is factored into the calculation of the output value, and thus all bits of the output value are affected.
This means that implementations cannot simply discard a portion of a KMAC output as a substitute for requesting the correct value for L.
For example, a KMAC256 implementation used as the PRF transform for IKEv2 cannot be used as an Integrity transform simply by discarding bits from that implementation's output; a different value of L must be supplied.
<xref target="truncation-example"/> shows an example for the case where the key, input and (in the case of KMAC) customization string are all the empty string.</t>

<texttable title="KMAC with different output lengths, as compared to truncated HMAC values" anchor="truncation-example">
      <ttcol align='left'>Transform Name</ttcol>
      <ttcol align='left'>Output Length (bits)</ttcol>
      <ttcol align='left'>Output (hex)</ttcol>
      <c>PRF_HMAC_SHA2_256</c>
      <c>256</c>
      <c>b613679a0814d9ec772f95d778c35fc5...</c>
      <c>AUTH_HMAC_SHA2_256_128</c>
      <c>128</c>
      <c>b613679a0814d9ec772f95d778c35fc5</c>
      <c>PRF_KMAC_128</c>
      <c>256</c>
      <c>5c135c615152fb4d9784dd1155f9b603...</c>
      <c>AUTH_KMAC_128</c>
      <c>128</c>
      <c>e6aff27fef95903eb939bc3745730d34</c>
</texttable>

<t>This is also true for prf+ when used with KMAC.
Typically prf+ is used iteratively to obtain at least as much key material as is required, and the amount of key material obtained will be a multiple of the output size of the negotiated PRF.
This process will often produce more key material than required, and the excess is simply discarded.
When KMAC is used, the amount of key material required is supplied to the PRF, and exactly the right amount of key material will be returned.
Requesting more key material than required and discarding any excess will produce different keys, and interoperability will not be possible.</t>

<t>Future authors of IPsec documents should be careful to consider whether related outputs from a PRF are required for their specification, and if so, describe how to handle KMAC and similar PRFs.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>SHA-3 and SHA-2 are both believed to be secure at time of writing.
Views on the security of cryptographic algorithms evolve over time, so implementers should pay attention to IETF RFCs reporting on recommendations for the use of cryptographic algorithms in IKEv2 and IPsec, such as any documents that update <xref target="RFC8221"/> and <xref target="RFC8247"/>.</t>

<t>Quantum computing has a significant impact on the security of all IETF security protocols, as a cryptographically-relevant quantum computer (CRQC) could use Shor's algorithm to break many traditional asymmetric cryptographic algorithms.
A CRQC can theoretically also attack hash functions, including SHA-3 and SHA-2, using Grover's algorithm.
However, the impact of Grover's algorithm is significantly less dramatic than the impact of Shor's Algorithm.
The worst-case impact of Grover's algorithm would be a reduction in security strength by a factor of two.
However, since Grover's algorithm is difficult to parallelise, the security reduction for SHA-3 and SHA-2 caused by Grover's algorithm is expected to be far less significant in practice.
See <xref target="GROVER"/> for a discussion on the practical cost of using Grover's algorithm to attack hash functions.</t>

<t>The security properties offered by KMAC depend on limiting access to the keys used with those algorithms.
Since both algorithms depend on a symmetric key, the key must be known by at least two parties in order to be useful.
Sharing the key beyond two parties may erode the security offered by these algorithms.
In the case of IKEv2 and IPsec, this typically means that access to keys must be limited to the peers participating in the security association that uses those keys.
IKEv2 can be used to enforce this for IPsec SAs and most keys used in IKE SAs, but pre-shared keys are a notable exception here.
Providing more than two peers with access to a single pre-shared key may undermine the security offered by that pre-shared key, and hence the security offered by KMAC.</t>

<t>When IKEv2 is used to create IPsec SAs, the keys for KMAC are all ultimately derived from an ephemeral shared secret produced using one or more negotiated key exchange algorithms, with the exception of static pre-shared keys used in IKEv2 for authentication and/or protection against quantum computers.
If the negotiated key exchange algorithm or encryption algorithm offers fewer bits of security than the negotiated PRF, this effectively caps the bits of security offered by the PRF as well.
Negotiating a key exchange algorithm or encryption algorithm that offers more bits of security than the negotiated PRF does not improve the security offered by that PRF.
As such, it is important to ensure that IKEv2 peers configure algorithm policies such that every algorithm negotiated always meets an acceptable minimum security strength.
Where static keys are used with KMAC, these <bcp14>MUST</bcp14> contain at least as much entropy as the security strength of the chosen algorithm, and <bcp14>SHOULD</bcp14> be generated using a random number generator suitable for use with cryptography.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>For negotiating use of KMAC as a PRF for IKEv2, IANA is requested to assign two Transform IDs in the "Transform Type 2 - Pseudorandom Function Transform IDs" registry:</t>

<texttable title="SHA-3 PRF Transform IDs" anchor="prf-transforms">
      <ttcol align='left'>Number</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>PRF_KMAC_128</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>PRF_KMAC_256</c>
      <c>&#160;</c>
      <c>[This draft]</c>
</texttable>

<t>For negotiating use of KMAC for integrity protection in IKEv2 and IPsec protocols, IANA is requested to assign two Transform IDs in the "Transform Type 3 - Integrity Algorithm Transform IDs" registry:</t>

<texttable title="SHA-3 Integrity Algorithm Transform IDs" anchor="auth-transforms">
      <ttcol align='left'>Number</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>AUTH_KMAC_128</c>
      <c>&#160;</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>AUTH_KMAC_256</c>
      <c>&#160;</c>
      <c>[This draft]</c>
</texttable>

<t>For indicating support for the SHA-3 cryptographic hash functions and SHAKE XOFs in conjunction with a signature algorithm, IANA is requested to assign five Transform IDs in the "IKEv2 Hash Algorithms" registry:</t>

<texttable title="SHA-3 Hash Algorithm IDs" anchor="hash-transforms">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Hash Algorithm</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>SHA3_256</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHA3_384</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHA3_512</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHAKE_128</c>
      <c>[This draft]</c>
      <c>TBD</c>
      <c>SHAKE_256</c>
      <c>[This draft]</c>
</texttable>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC7296'>
  <front>
    <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
    <author fullname='C. Kaufman' initials='C.' surname='Kaufman'/>
    <author fullname='P. Hoffman' initials='P.' surname='Hoffman'/>
    <author fullname='Y. Nir' initials='Y.' surname='Nir'/>
    <author fullname='P. Eronen' initials='P.' surname='Eronen'/>
    <author fullname='T. Kivinen' initials='T.' surname='Kivinen'/>
    <date month='October' year='2014'/>
    <abstract>
      <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='79'/>
  <seriesInfo name='RFC' value='7296'/>
  <seriesInfo name='DOI' value='10.17487/RFC7296'/>
</reference>

<reference anchor='FIPS-202'>
  <front>
    <title>SHA-3 standard :: permutation-based hash and extendable-output functions</title>
    <author>
      <organization/>
    </author>
    <date year='2015'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.202'/>
</reference>

<reference anchor='SP-800-185'>
  <front>
    <title>SHA-3 derived functions: cSHAKE, KMAC, TupleHash and ParallelHash</title>
    <author fullname='John Kelsey' initials='J.' surname='Kelsey'>
      <organization/>
    </author>
    <author fullname='Shu-jen Change' initials='S.' surname='Change'>
      <organization/>
    </author>
    <author fullname='Ray Perlner' initials='R.' surname='Perlner'>
      <organization/>
    </author>
    <date month='December' year='2016'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.sp.800-185'/>
</reference>


<reference anchor='I-D.ietf-ipsecme-ikev2-prf-plus'>
   <front>
      <title>Use of Variable-Length Output Pseudo-Random Functions (PRFs) in the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
      <author fullname='Valery Smyslov' initials='V.' surname='Smyslov'>
         <organization>ELVIS-PLUS</organization>
      </author>
      <date day='6' month='October' year='2025'/>
      <abstract>
	 <t>   This document specifies the use of variable-length output Pseudo-
   Random Functions (PRFs) in the Internet Key Exchange Protocol Version
   2 (IKEv2).  Current IKEv2 specification relies on traditional PRFs
   with fixed output length for key derivation and uses iterative
   application of a PRF (called &quot;prf+&quot;) in cases when longer output is
   required.  Appearance of PRFs that can output as much bits as
   requested allows to streamline the key derivation functions of IKEv2.

   This document updates RFCs 5723, 6617, 6631, 7296, 8784, 9370 for the
   cases when variable-length output Pseudo-Random Functions are used in
   IKEv2 and its extensions.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-ipsecme-ikev2-prf-plus-00'/>
   
</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 title='Informative References'>



<reference anchor='ML-KEM'>
  <front>
    <title>Module-lattice-based key-encapsulation mechanism standard</title>
    <author>
      <organization/>
    </author>
    <date month='August' year='2024'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.203'/>
</reference>

<reference anchor='ML-DSA'>
  <front>
    <title>Module-lattice-based digital signature standard</title>
    <author>
      <organization/>
    </author>
    <date month='August' year='2024'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.204'/>
</reference>

<reference anchor='SLH-DSA'>
  <front>
    <title>Stateless hash-based digital signature standard</title>
    <author>
      <organization/>
    </author>
    <date month='August' year='2024'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology (U.S.)' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.205'/>
</reference>


<reference anchor="FALCON" >
  <front>
    <title>Falcon: Fast-Fourier Lattice-based Compact Signatures over NTRU</title>
    <author initials="P.-A." surname="Foque" fullname="Pierre-Alain Foque">
      <organization></organization>
    </author>
    <author initials="J." surname="Hoffstein" fullname="Jeffrey Hoffstein">
      <organization></organization>
    </author>
    <author initials="P." surname="Kirchner" fullname="Paul Kirchner">
      <organization></organization>
    </author>
    <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
      <organization></organization>
    </author>
    <author initials="T." surname="Pornin" fullname="Thomas Pornin">
      <organization></organization>
    </author>
    <author initials="T." surname="Prest" fullname="Thomas Prest">
      <organization></organization>
    </author>
    <author initials="T." surname="Ricosset" fullname="Thomas Ricosset">
      <organization></organization>
    </author>
    <author initials="G." surname="Seiler" fullname="Gregor Seiler">
      <organization></organization>
    </author>
    <author initials="W." surname="Whyte" fullname="William Whyte">
      <organization></organization>
    </author>
    <author initials="Z." surname="Zhang" fullname="Zhenfei Zhang">
      <organization></organization>
    </author>
    <date year="2020"/>
  </front>
  <format type="PDF" target="https://falcon-sign.info/falcon.pdf"/>
</reference>
<reference anchor="NISTOIDS" target="https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration">
  <front>
    <title>Computer Security Objects Register</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2024"/>
  </front>
</reference>


<reference anchor='SP-800-57'>
  <front>
    <title>Recommendation for key management:: part 1 - general</title>
    <author fullname='Elaine Barker' initials='E.' surname='Barker'>
      <organization/>
    </author>
    <date month='May' year='2020'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.sp.800-57pt1r5'/>
</reference>


<reference anchor="GROVER" target="https://www.etsi.org/deliver/etsi_tr/103900_103999/103967/01.01.01_60/tr_103967v010101p.pdf">
  <front>
    <title>Impact of Quantum Computing on Symmetric Cryptography</title>
    <author >
      <organization>European Telecommunications Standards Institute</organization>
    </author>
    <date year="2025"/>
  </front>
  <seriesInfo name="ETSI TR 103 967" value=""/>
  <format type="PDF" target="https://www.etsi.org/deliver/etsi_tr/103900_103999/103967/01.01.01_60/tr_103967v010101p.pdf"/>
</reference>


<reference anchor='RFC8221'>
  <front>
    <title>Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH)</title>
    <author fullname='P. Wouters' initials='P.' surname='Wouters'/>
    <author fullname='D. Migault' initials='D.' surname='Migault'/>
    <author fullname='J. Mattsson' initials='J.' surname='Mattsson'/>
    <author fullname='Y. Nir' initials='Y.' surname='Nir'/>
    <author fullname='T. Kivinen' initials='T.' surname='Kivinen'/>
    <date month='October' year='2017'/>
    <abstract>
      <t>This document replaces RFC 7321, "Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH)". The goal of this document is to enable ESP and AH to benefit from cryptography that is up to date while making IPsec interoperable.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8221'/>
  <seriesInfo name='DOI' value='10.17487/RFC8221'/>
</reference>

<reference anchor='RFC8247'>
  <front>
    <title>Algorithm Implementation Requirements and Usage Guidance for the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
    <author fullname='Y. Nir' initials='Y.' surname='Nir'/>
    <author fullname='T. Kivinen' initials='T.' surname='Kivinen'/>
    <author fullname='P. Wouters' initials='P.' surname='Wouters'/>
    <author fullname='D. Migault' initials='D.' surname='Migault'/>
    <date month='September' year='2017'/>
    <abstract>
      <t>The IPsec series of protocols makes use of various cryptographic algorithms in order to provide security services. The Internet Key Exchange (IKE) protocol is used to negotiate the IPsec Security Association (IPsec SA) parameters, such as which algorithms should be used. To ensure interoperability between different implementations, it is necessary to specify a set of algorithm implementation requirements and usage guidance to ensure that there is at least one algorithm that all implementations support. This document updates RFC 7296 and obsoletes RFC 4307 in defining the current algorithm implementation requirements and usage guidance for IKEv2, and does minor cleaning up of the IKEv2 IANA registry. This document does not update the algorithms used for packet encryption using IPsec Encapsulating Security Payload (ESP).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8247'/>
  <seriesInfo name='DOI' value='10.17487/RFC8247'/>
</reference>

<reference anchor='RFC8784'>
  <front>
    <title>Mixing Preshared Keys in the Internet Key Exchange Protocol Version 2 (IKEv2) for Post-quantum Security</title>
    <author fullname='S. Fluhrer' initials='S.' surname='Fluhrer'/>
    <author fullname='P. Kampanakis' initials='P.' surname='Kampanakis'/>
    <author fullname='D. McGrew' initials='D.' surname='McGrew'/>
    <author fullname='V. Smyslov' initials='V.' surname='Smyslov'/>
    <date month='June' year='2020'/>
    <abstract>
      <t>The possibility of quantum computers poses a serious challenge to cryptographic algorithms deployed widely today. The Internet Key Exchange Protocol Version 2 (IKEv2) is one example of a cryptosystem that could be broken; someone storing VPN communications today could decrypt them at a later time when a quantum computer is available. It is anticipated that IKEv2 will be extended to support quantum-secure key exchange algorithms; however, that is not likely to happen in the near term. To address this problem before then, this document describes an extension of IKEv2 to allow it to be resistant to a quantum computer by using preshared keys.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8784'/>
  <seriesInfo name='DOI' value='10.17487/RFC8784'/>
</reference>

<reference anchor='RFC8692'>
  <front>
    <title>Internet X.509 Public Key Infrastructure: Additional Algorithm Identifiers for RSASSA-PSS and ECDSA Using SHAKEs</title>
    <author fullname='P. Kampanakis' initials='P.' surname='Kampanakis'/>
    <author fullname='Q. Dang' initials='Q.' surname='Dang'/>
    <date month='December' year='2019'/>
    <abstract>
      <t>Digital signatures are used to sign messages, X.509 certificates, and Certificate Revocation Lists (CRLs). This document updates the "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile" (RFC 3279) and describes the conventions for using the SHAKE function family in Internet X.509 certificates and revocation lists as one-way hash functions with the RSA Probabilistic signature and Elliptic Curve Digital Signature Algorithm (ECDSA) signature algorithms. The conventions for the associated subject public keys are also described.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8692'/>
  <seriesInfo name='DOI' value='10.17487/RFC8692'/>
</reference>

<reference anchor='RFC7427'>
  <front>
    <title>Signature Authentication in the Internet Key Exchange Version 2 (IKEv2)</title>
    <author fullname='T. Kivinen' initials='T.' surname='Kivinen'/>
    <author fullname='J. Snyder' initials='J.' surname='Snyder'/>
    <date month='January' year='2015'/>
    <abstract>
      <t>The Internet Key Exchange Version 2 (IKEv2) protocol has limited support for the Elliptic Curve Digital Signature Algorithm (ECDSA). The current version only includes support for three Elliptic Curve groups, and there is a fixed hash algorithm tied to each group. This document generalizes IKEv2 signature support to allow any signature method supported by PKIX and also adds signature hash algorithm negotiation. This is a generic mechanism and is not limited to ECDSA; it can also be used with other signature algorithms.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7427'/>
  <seriesInfo name='DOI' value='10.17487/RFC7427'/>
</reference>




    </references>


<section anchor="test-vectors"><name>Test Vectors</name>

<t>The following test cases include inputs and outputs for scenarios where KMAC is used in IKEv2 and IPsec.</t>

<t>A key, input, customization string, and output are always supplied.
These correspond to the K, S, C, and Z parameters described in <xref target="kmac-api"/>.
Note that in each context, the customization string is fixed.</t>

<t>All inputs and outputs are encoded in hexadecimal.
KMAC customization strings also have an ASCII character string representation.
Data supplied to KMAC does not include quotation marks or null terminators.</t>

<t>In some cases a description is supplied, which describes the case being tested in more detail.
These descriptions are test vector metadata, and are not ever supplied to the relevant algorithm.</t>

<section anchor="prf-test-vectors"><name>PRF Test Vectors</name>

<t>These test cases correspond to use of KMAC as the PRF transform for an IKE SA.</t>

<section anchor="kmac128-prf-test-vectors"><name>KMAC128 PRF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-PRF-1 ~~

Description:
Preferred key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
3a8d2a5ead5cd4db448b76a241b078fb444e1faf36eef8e195e275778a169b5f

~~ Test Case KMAC128-PRF-2 ~~

Description:
Smaller key size

Key (hex):
000102030405060708090a0b0c0d0e0f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
942d56a4597c0d104497dc1c62be940a70198b32bfde8e2a5f57f55ec3fe5cef

~~ Test Case KMAC128-PRF-3 ~~

Description:
Larger key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
dd666816c9563a5abaf80e2020b5c6e66ef2f3516621f1db5e6f54452b4dafb3

]]></sourcecode></figure>

</section>
<section anchor="kmac256-prf-test-vectors"><name>KMAC256 PRF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-PRF-1 ~~

Description:
Preferred key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
9ee1b694eee215b097a71000260a494b22a1d583943b6052281efb16e9481c62
6ff8ef3aca47e8b290c12801694775d15b2d9fede16639c5fab05d0f12c7b112

~~ Test Case KMAC256-PRF-2 ~~

Description:
Smaller key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
922d6a5ea665e5418974b218d84d3e9946163563e2208f33a4beac7091ae363c
f54d998ff215d1a66357b8e3c5d8a083dfba20f4bfac697fcd134faf8db1c051

~~ Test Case KMAC256-PRF-3 ~~

Description:
Larger key size

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 prf"

Customization String (hex):
696b65763220707266

Output (hex):
fd6e7b7e9dd050bba719275b42263b911e78537b3d9daef99b30c762083a8a3b
59c5b0b4b8f01c2ded4687c507d6ea812331327c0822f203c708ebc699aa4b5e

]]></sourcecode></figure>

</section>
</section>
<section anchor="kdf-test-vectors"><name>KDF Test Vectors</name>

<t>These test cases correspond to use of KMAC with IKEv2's prf+ function.</t>

<section anchor="kmac128-kdf-test-vectors"><name>KMAC128 KDF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-KDF-1 ~~

Description:
IKEv2 KDF request single PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
256

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
067b024ab617ab96ed323faa0992d5b2b469dd2f2bde323a4d5a487eb9d7efc7

~~ Test Case KMAC128-KDF-2 ~~

Description:
IKEv2 KDF request multiple PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
512

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
918fcc9584938feadca44878aff97466df6de641863bfa2ff92e8d4f28109195
316a4786d33a7a3e7de2cf483d9750f0d5f1f2551b59992a621d44850fb4b730

~~ Test Case KMAC128-KDF-3 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_GCM_16 with 256-bit key
PRF=PRF_KMAC_128
SK_d = 256 bits
SK_a[i|r] = nil
SK_e[i|r] = 288*2 bits
SK_p[i|r] = 256*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1344

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
ce8b6b34301ce350bd04c3a85325ec33e38eafca744abea32ca5fc4196e6db8a
9df414304023b3678157ec287f89e3eff15796c8cb82ef55f32b953382aa1808
e971a62d3475dad6c00572a3ccd90b82907a6db4e63bfe248e22e8d770c5a08f
1543d7a869a6b274ed953beeefcf4a1eaac71b3791278136122ee7f7cfc79145
eaf25d1875ef6d8d5761aa3cd487a95b8126758621c4b6f8ab6a4eb0e1b460bf
91abd802943a86ba

~~ Test Case KMAC128-KDF-4 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_CBC with 256-bit key
INTEG=AUTH_KMAC_128
PRF=PRF_KMAC_128
SK_d = 256 bits
SK_a[i|r] = 256*2 bits
SK_e[i|r] = 256*2 bits
SK_p[i|r] = 256*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
1792

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
7cecf177da25eca206b2bd9b1d17710f08d6e09d8361f053116be41aaa583bd2
7ab4bb9ca8d5019787fac7227ed8ce01fa250a9ab4b638f98a4365dd84004b11
2c4810eeeb36d8493922f1fe8b75609d9f6d4c08aa1f16039b164600d8748913
bd0736b742eef9d7038df42ea748798b58e4d716d669a677115926c490ea46fa
948f2f0eee211e2200d401fffad14f05c82aa388b701ad83b576053c22a3f1f8
2966af987f37dae321ccc5867e50f19d9a7a07946e5ddd58ecf9668bbbbfa30c
78568cc0b5de273a8773ca15a2cc299da3331437850dd9dc5f126e76cbd0fcd7

~~ Test Case KMAC128-KDF-5 ~~

Description:
ESP key material
ENCR=ENCR_AES_CBC with 256-bit key
INTEG=AUTH_KMAC_128
KEYMAT=(256*2) + (256*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1024

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
e5414718d74f02f7032c926d777e7553d5c74f073d622317b341ec2e8d7eeb13
77bb38ae552900eb5b075dbf7185cddbfe216a16e2692d313598dca7c6df8453
73eaa2d9623a07e6333706bd4655180b4b750af8bcdefa053a5601d25f808e41
ad07734f1b65201ae9e639893ea76ec8bb8b004b43ad48a9687cddda3ecf665c

]]></sourcecode></figure>

</section>
<section anchor="kmac256-kdf-test-vectors"><name>KMAC256 KDF Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-KDF-1 ~~

Description:
IKEv2 KDF request single PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
512

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
80fb94f1ca217afde5258700d8e02a3ed0082fe413ec95d4024a5dc7d0f32009
c6f354b565017e44bfbc224c424ac73373b65c2a98d3f696b9a844945e338bbb

~~ Test Case KMAC256-KDF-2 ~~

Description:
IKEv2 KDF request multiple PRF output

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1024

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
29d3439f855f9357ab52030fb234905d4797884b93a83aeb3848175c634acc4c
d4ff21e7e23da201afb9ddc00e01aec314d65e53826d74d2d61f2f8ff6399469
789aabdae1ab2ab38952e60459cbdbb17002f8206188f26b0097e8446f860038
ee5612cc49a4d036445b2d25e2f07b55578ee3da83c5cd7945e24cf699ae16b0

~~ Test Case KMAC256-KDF-3 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_GCM_16 with 256-bit key
PRF=PRF_KMAC_256
SK_d = 512 bits
SK_a[i|r] = nil
SK_e[i|r] = 288*2 bits
SK_p[i|r] = 512*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
2112

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
1226ad760db3f6d2e7a76be1482965463b61e514779a61fe629b6877b0b223b5
ed4d1f4dc269ac609e3a99ea76e63e0eda0adc097d2f35899b306d5b3e0fab19
b2ce7dc29849b2875da00f12e86e3bf3bbf9e7d2ed990f158a98f27996375d2e
408ed86220088b5150bdaf651a576b6999a69e9de47f890cf594fb8ed8d65672
c745b9d07a0679dc4b4a5468c1a957520f50d539dce0670339ea04bb0c924fb4
4b520bc5c3643b74cb738ed103399cb28b5581a38edc314e032f8354097adaf1
6581dd14bdb2d16f935a391518381b3bb952436bac1c05906410f536598d804e
7c0eb77c66ebe461c8867ea4771ef9c4a17d3a7b51e9e737d5821e81785671b3
9e101a5386e6cff5

~~ Test Case KMAC256-KDF-4 ~~

Description:
IKE SA key material
ENCR=ENCR_AES_CBC with 256-bit key
INTEG=AUTH_KMAC_256
PRF=PRF_KMAC_256
SK_d = 512 bits
SK_a[i|r] = 512*2 bits
SK_e[i|r] = 256*2 bits
SK_p[i|r] = 512*2 bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0
dfdedddcdbdad9d8d7d6d5d4d3d2d1d0

Number of output bits requested (integer):
3072

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
e1b242de108058147bcf2a78c15472b05b33864a0b32cb68a528545cb72c2f0d
03f64801a300b37fc6c14f6e8e56b66b521536aa32d8a2dd85e498966641bb4c
1b7832c63ec87ef2f03dc0d0e9c439d3868531ee744cee2e39f3facdc8366d1e
21977d52a089514b1e68ec2ae43d4b6503ae2e1d199193fbdc2953e41f09eee3
6ab5ad7cbfdc266d594a0b69c68d8480c0fc957d945e3cb7bc52f66e04b2b6f8
2c21c83a3bf512c507b5fe32a13d78a9cb31cd5e4b85320e7541b4fefcc85de9
af9483553fe21246d3b56347751d237e879b18d13474d5ef178e9c6bdbe72727
624f260f2fb90bb21c6dfd2ca180118607df7f13a593bdfba9fa3d63b86fa2cb
401f9e0d996901b3524faa4cbac0838550a73b8cf4a28602031e278633b35dfc
4a9c308428e4726eb4cb32d9ad52655a6a3aca00f586b5fd902a0ade1c069f8b
57b2f0ae565a82d982a60cfc9e935549f7a5a6efb6667a5109529704a7d8c81b
9d86a9e6f58ffd2ce76530c1d7c62697c6bd73958d90b4104c09ba1a9c5a2a61

~~ Test Case KMAC256-KDF-5 ~~

Description:
ESP key material
ENCR=ENCR_AES_CBC with 256-bit key
INTEG=AUTH_KMAC_256
KEYMAT=(256*2) + (512*2) bits

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Number of output bits requested (integer):
1536

Customization String (string):
"ikev2 kdf"

Customization String (hex):
696b657632206b6466

Output (hex):
6587a0b445c83673f96932401eaca76883d9deac16d96c70eacc151d950c8100
b2e4093ceab3e4499a2a2e703366571d2bf9fc94e38972f27714e1d20600e484
9d995f6ef638819b7e3566b1d9336bcee7c678f7848d8fe757dcffb107c171a0
752fa26c28a2995dcfe922871ae23fd4fb444862f01bca73f6da7d0c3f826fd7
d6e216231f5cfc31567d624ae32d0af90284806248cbc065c092be5d4908b63c
7b9023fe4c054a7a86352ac3b4532f6dca7d1959d26184b0337885832ae45d4f

]]></sourcecode></figure>

</section>
</section>
<section anchor="kmac-ikev2-integrity-protection-test-vectors"><name>KMAC IKEv2 Integrity Protection Test Vectors</name>

<t>These test cases correspond to use of KMAC as the integrity protection transform for an IKE SA.
Note that, since different customization strings are used for integrity protection in IKEv2 and IPsec, different outputs are produced, so two sets of test vectors are supplied.</t>

<section anchor="kmac128-ikev2-integrity-protection-test-vectors"><name>KMAC128 IKEv2 Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-IKEV2-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 integ"

Customization String (hex):
696b65763220696e746567

Output (hex):
1a3d6e9421bf83653d7e876479be427a

]]></sourcecode></figure>

</section>
<section anchor="kmac256-ikev2-integrity-protection-test-vectors"><name>KMAC256 IKEv2 Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-IKEV2-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ikev2 integ"

Customization String (hex):
696b65763220696e746567

Output (hex):
27588be39b85386836a4a8f066e4aab94d6716e77857fe642836ab61f93b902e

]]></sourcecode></figure>

</section>
</section>
<section anchor="kmac-ipsec-integrity-protection-test-vectors"><name>KMAC IPsec Integrity Protection Test Vectors</name>

<t>These test cases correspond to use of KMAC as the integrity protection transform for an IPsec SA.
Note that, since different customization strings are used for integrity protection in IKEv2 and IPsec, different outputs are produced, so two sets of test vectors are supplied.</t>

<section anchor="kmac128-ipsec-integrity-protection-test-vectors"><name>KMAC128 IPsec Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC128-IPSEC-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ipsec integ"

Customization String (hex):
697073656320696e746567

Output (hex):
4222f5a58951cffaf4c21ca115e42b19

]]></sourcecode></figure>

</section>
<section anchor="kmac256-ipsec-integrity-protection-test-vectors"><name>KMAC256 IPsec Integrity Protection Test Vectors</name>

<figure><sourcecode type="test-vectors"><![CDATA[
~~ Test Case KMAC256-IPSEC-INTEG-1 ~~

Key (hex):
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f

Input (hex):
fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0

Customization String (string):
"ipsec integ"

Customization String (hex):
697073656320696e746567

Output (hex):
732bb75cf1582cc4d95c6d7b8850b165f833e23fff506609987c8808596d8fd1

]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>TODO</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+196X7cxpXv934KXPpDpAm7hX2R42RoirI42hiRtpPMol8B
KJCIuhsdAC2aIzvPMl/ui9z7Yvd/TlVh6YWkvI2duZqM2Y0Gajl19g3T6XQy
+eSTT/Af63TZynop2+mTWhSt9VLU7/LqemldyMVqLlqJe+i2N3IpFtJqr8rG
Ksq5tIq6Wlg5PTNtq7ya3lTrmm6ZruqqrbJqPlvkVltZl7K1mlbUrcxpHDUL
j1VU9UK0FgY8UOP8zozx++nvrqv63WVdrVf4zJcw3IFey9Oqtspl2ZZibjWy
Xa8OLTxpVcv5jbWUkqeVedlitZilrJvWSudV9s6qCnyV87yhUV7T7Qdt2c7l
AT/W0HOptLIrsbyU+adWLueyldaBSNNavj+wyoLmqS1+htbdXFV1S2MdLW+s
CrPVVlYBnsvWysSSxqJlyPzQStctDy1qWazn1rJqabJy2dZVvs5wX11XNS/r
vCLQ8Cqt63I+p8ewSUus2wrgKjMxx7rzdV0uL9XuaV2Y+8bC4NZ6qZevYfWk
Wv4GMF5m83WOrUxt+8AC+A6mdLZNi00tNZjmfML0zAuRynnT/YJjsu5xQHpE
tYoGp5De0GA0RFtVc4Yudg8Y4QNdzdZ1TaB6L+umrJafYjdYYV5lNNwBzWvJ
bwSw0ODgBSFfq/GS5misd7VYELpO6yJ7bP3uqm1XzeNHjy7L9mqdzrJq8SgT
afVoeNvvaag/A1/oiGqJwTLJ68FaylpBQh+1tVILFlZeFvhAq1VYS2McM6A7
6GGxOHnaCW0Q92RXHfyA5g9m3yzmvKk/vXxxaMk2m81mD9XOiBIZqR5bB182
kvD0/NnR1DNHYGjUeo5TPvlGnbB1pgnN+koB0HKtB6fPT967Dy2xzK3Ts0Zm
BxOFvBi4G5HvGd6SAZyXVX3zGIQKvNEn8FgfeinbYlqucCeIu7kS3tR2Js06
XZQNzdrerHDr6cnFU8v6xBLzpsJc5TKXK4n/LNuDQ+uAqKCqQa705fToc/wh
HDx9c/GUaNparheprOlTrjgOkVEDYK6bx1Zbr3EJO/AmQC3x2DqXwJyyvZl0
KIj5z85Pjl+eTN7JG1zNH08mU4vXjL9Y89Sj7+/kexd/3y1ERnO8l8s1T6bH
0HtkpOVNfY3xicq+oN/p8kKUc2DZ11/8s0ZMwjDGJ1FnVwP8G/z86Osv+A6F
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
ELogcNDweKSDLaXHQGemSFxlk2nJ3YwnrHqvl/Lsc6cFVZxzfFWC7YAvwIbQ
GGkS+7tDHgDDoOQOII19Cbp5QgUBckVNDHgJnZzC/lRd4qABgOKRXPq01IUN
+ayLN1bEXbpT2sSrURCg3/ts8nJA17tL2B+UMzmzVKnIUOfFQ12HCiN4ifQe
jrX5vFLgKof41WFuVlLS3Wl1wQZHZrQPTIGnryDrVB2C0jkHjRtUVIFqVte6
qJmY9dHJ+Vs+lOPPj1lpMFU+tdS8XNcu0ONfHL88tI6PXxI6HV8J/M+1z6r5
jePZAYGLEpuoXr/S1MBmEfDtSrl/tvvrlS00o79SnBB7hFZfLspWqUHyhsJc
DUOWwaUsmU854NqSzdSyA6v/ieZccJcp9uCUHE5TDt4DyPCDLfwi7Uw3pwOT
Xati87r5AzRUE97quUSvexA2jeyXo2dKSd64ecxkN3TdArpAqXJTdaUNB2jJ
HWjpNxxUSqLyWON6GN6fwhj1M7f14tKOFTXSpWcN13tk8OYPHYs8efXkvPNo
cOZn5/XbqeNrPjDQsQfazsCzpjwQO9OJbiuOu9XDMWhturUSUzzTmyg7nyW7
Z+tZE5ucDV07qusbWChzS7Wce3jE7ml/rJhTkES91QLZWI4ShPs7DP64a2Qb
6e41Dqyke6QQbJhJu1VVThYgFYYm2+xvyJDAiI9UG4auzrhsu560DRUhLW/I
9XSp+5niJB8dPZtNzqXc6WbiaXY0GhUsY66vbnSsnfJ2q0a5L/f2F1XOR61z
kG5tWNhK1ldi1agqbypWq1tyfyuZ0+hF9incLEuNHquljrlpBVtODo0Jlces
nL0tM56+Mpb9wIAcFXTX3POZwgZdKPkX53eydr1I5QmMghY63Hnfp3lsIAC/
r6pe2+VeMdo6oefv7kPGotmUSOq2Y804erarSfSmgfrhwx/IlAiTcWPXQaiP
dXjuHadHJyi8OT86Pz+anp2f85K546SadNBzi9q806qp0Fdlhbw+fbIxinX2
/Pjc+sSx3juzYNhG0wwGMHz4YHrn63wJWnLku9EGjYKhbMH9wHrg+A93Q//Q
ZFfNq+vGtM7uFRyyO3eAsGMvLRcvaqVI443YsgT1QbMuxroCRLpuJiBMa7td
s6hi/8GJq4T5eyOWbjrBzS4FKwumPZ7pRTXEkL7QhVXkkuKOXHyp2szsao5F
SpAy4gZ6zMcgPnkHx0WPlBQAZsF927W2e9/xthoDCev89ItXRxdfvjl5++zo
/NnboxdfvH5zevHs5TlpQl0RHAWvOcY9qDjlTgfcO1YZxxuURx04FI7sIzjT
OGVUbtd5nHVfBbbjaehpr1lq5r6/cy11SxxVJzG3uNdOtYjuims3qlm6Le05
bUJI6rQ7t1bVvMxuSEAs6AxHnb74RWyaKakO44QZPWB6rDGvCmu3al97+NDw
992cboBCcqMrza7HXcJoC0p2MiaZ/kSqZqzp6jG5D9Ow6WHXjoBN6R3JIYO2
2nviRNR3CszrWBec6BQ0VdjSOd7218VSVEPUQPr1XCinP4EmlWQpkHmkWyoC
aehlIVCE1iXHM9if3uWr4HBUGLpXyQbIZMxJXcHVB12HkawRf6t06glM2eW8
6454OEwRZCdqH3UzMX6hUwFrORfacBqo0kpDx4McbVQxc4amaZwq5hm/76H3
Neul8pODulsKWZgqlc3bVGgCK8vazoM9aHO4aRvrBg9s2amGA+QCBpukVzKo
hYhRcqSKnaxT86oUwjwd0DZeBd0QcZDA80IJ6K5ThOhNgTG5bobPe/Owa9dt
ljz2jfX42z+iN5V2+6IFMtz0ewS24NEFhj8dvbRucHJGMTZZx9RyoC8OnOod
kgi/IvHbt8foMi7YR6OwUptqh1r94sZLG000lD9ip86mSgznfLtcrJSBx72e
Jt/2iV0qMbHPO9tToaQvP7iS3+yro9iVm3hX4uG++7fSE7erI27Nk7PS0PHC
KBF27Ph5IrMocoskyKMozrygyILZbMYpenuzHHcn9d05rkn92647uH29QeZ4
QRY6gRO4RYqho9jPc8cJgiJJQ9sbrfc+aYn6sgxB625USKwysT2ZJl6SZl7k
B5Fn557fZxVuY+kokZDZ9b7sJebNQ4bbc9NnKkGeZJuqHdDxd0qg5UBKV9tw
PTal9asrdkeMu9i18ghVKacidx049r00ZFBE2rshxIIEyFaDNTUmr0b3L90q
zTXNzQa5GZt9PUYZMDxSVcD266JRbIeO5uU6w+1VUjMolUQz5sXEYrZCtIe3
bayrKimbvjhCyxguEKApdWvCgZ9rz2gGOrWEdrGk1bzpuf0du+OZBryXbA+9
Tx7WAKlHOzKhD7s400b30vncePtMP15qjLju9Oeq7lu99grQQDEx749VPkZW
qrrMKC2zOwGvm/mwflTLcalOy33JRmqwXjSsnuqw712pX18BmORzXWPAHjnV
O4TzCVXD8O6FiyNdz/RTNp3KVXM1rkvZ2TiYW0eNew/PJl+V8rprNjisit3b
ely+r+bQsvgthTScMp6GKqcG6Yq8PG2r3sXAPej6ZhbSvNSJayCG/tKmE4Um
WrpvIbvy9k1shXCpP2PV21q5WwdhRJ1kpl/uxXb2H0ddpWiBVzodpG97XOoX
tG3DjOQtb3IY/lWv2NJpJaPNEGObArPkexp2q6HVg+M3fyTpzsDkN1sBh3/T
jOOyaS3FO5WHMmxYK5ruNXH74EctJmgGVqSxExCr6TWm3jGiujtvdoLvW+Ft
YN+hdnB8URNqDNe50Vms7F5wt32r4nAdrOc3yhWXwyqgTmhWV4bdD6KhcjR0
UVPEvm7aKetJt87XdVoUqjbGRNK33eLc1Evp5czur6vBvhruQbJ7P8S/yIhh
jy4ZOPO5JKfERgJ6P/3A7O1IOxOm28zuSUyjSE3xhagV5EaI2zdJMo5W9f5B
Y4EPHauVyQrkB6hDDhmE2Pi+U2YPwi6cmW3UDI5aKxBn75voqKxUmpujSywV
MpYIfW76ML9XRe2GOK2awTATHL1cwowrrJ4yWLk2ARGjuquOSXTYRp2gEDEb
oso+r+pcuUuUicFx4fMrURv75h3Xb91QvHL4JLUdgsjK5SbX6CDQbtRP9l1F
tba/o6XoqDftwJDrocYQM5vTMbuuSk4Su1ZGdrlSgd9yg60NGhZa/UsKFOBV
k7bO7hpmdUgqKcjMO+1NNQLnn3TpFv1hliYHWrdc2my2J3TMVzUWUU12aUHq
NTVnXY4GaxyKRxDoeXsqYt3Bo0vt28gMp/PpOj/eckZic3Ub/fh3Pqa0WaWp
7WsR2QHosMf0rluQseZIBV2oDvrjvoKwJFfUYIiSKPTaVN/DzQqaaslOKobU
QF0lEEjzwslh3/nOUdNDnby3LbPjnU0cO7m8uxzo0e6Ojpvir+k6Ad25SmsU
8x9e1/4seU19Y7VLpG+zYGTJWGvXZCXZSaJsDHrXJt+5NcaYfJU+CJSTFCYZ
plOIj106I5peP5/VfZev3ufIb9laUPLSHbjMZkqXoKqKTPrAFxNys651ZLt3
Fzdd0cNwM+wkLeWwo63y//e3DBarg7xUga2cbNyBlym8a2W7KYVNn1WNfx1z
GBuOh5qXmuqm3eahqRTfm4e/pzeMeTcQ9z5MZd+zs6tR07nAy/WC3peuf6/q
7dZIKmts8B5f9RrCo1dHW7o+eciWA4wavAtgx1vrDtUg2uLV72qsdFCKmWPv
AqL4lOb6B/1VmN7Scq2pfnlrPX536/jxA0u/hpmyOr+1Xql9fzt2LmmXxDlO
bt3gwxvJVl0mt9xHt/bf2PqR/CIXnz9Ro+9q+NBN/W//ql4kSCm6//bv1u4H
B86l/Q+aNgwDH7j2lii9jc5iDKHvbj/B25I6N9sKDmyKH+WQPRzyrdWfH3fE
P+ycP+aw93rD7nXie6txbz92roPcd+53g1HjgU7s3gx23TMM3r1SrHuj5I7M
yx0B1tsRpqDgyW6MUSj4jFbRbWwTJb5iNzjANr7tB1L66MjoFSeD07r9fPnm
vrD8Hjf3BeN33vz8ZMhh7r55wFV2YtVGSHSMVRsA1WgE4HAbB5IYF5TG/JXk
OkudpNq3aKbfVIqrCT9uvyBBvWs7k0vYMZUJi43KPnb1t5wcDQIUh/tqG/rK
80Hbwz5CcqFakHfRUGOcqFeR6Bfd/GXYAOKWWGNfBoefOMTdxXL3lkaYnrO0
n/l8F3Bo3ZSTmqspr+Q3IpcZvUzKpLTvzL5hNwpX8VB64e40rq59nI7ocr76
0C+r7OJOp9Mn+Ld1pWNiC1G/a7jkcpj5xfW2ZD9y3Yg6fTF6ec/A/WteyDHu
hMhWp6oEbaWpAx9UbZqTGwyqU+slp4iyowQnJqhk4LDrzs35vdwTeMP53DnC
hm2gP/lEydJN/G7kEK/HyLOhGe0OFnZVtzzJJ13i4vZsf//733mu6Xt9Bd/5
jmPRv3d4iuemjvX3v08mT3p4PJ6cbZVxTqi9oYqkPZ7Ytu3Yru3Zvh3YoR3Z
sZ3Ywk7tzM5taReO7TiO63iO7wRO6ERO7CSOcFInc3JHOgUdcReYezwpoNwX
eZEVaSGKpIiLqAiLoPALr3ALp7CxFipJy2QqhUxkLCMZykD60pOudKQ9mRyP
EPlc4egDhauYYFBvue9etZIwCdMwiELPdbGryA3DyWQYRHw88UScuyKQIg+y
3M9T34/TKBSu76R2FBf47mODovBCKYtYOkkg3SiIolg4YZIGxWT/Objb53Cu
u0Z8r1P4FUM58d08CIUfJBE249i+n0R55mShm8rEt0VkO0mcem5a5FgozqMI
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
k9eT/wfCff4mT8QAAA==

-->

</rfc>

