[TLS] Re: New Version Notification for draft-sullivan-tls-xo f-ciphers-00.txt
Nick Sullivan <[email protected]> Fri, 24 Jul 2026 15:30:59 +0200
| Newsgroups | gmane.ietf.tls |
|---|---|
| Message-ID | <CAOjisRy6J++zozS77=6Rx=zbwPhzxpHSd=4Y9XXmdQB3A5w2OA@mail.gmail.com> |
--===============0796063690709611539== Content-Type: multipart/alternative; boundary="000000000000c547a806575b62c3" --000000000000c547a806575b62c3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Joan and the Keccak team, Thank you for the review. Both of your suggestions were more useful than a first read of my reply might suggest, and I want to be clear that neither is closed. On overwrite-duplex for the derivation: I have not taken it into this revision, but that is a statement about what I have been able to work out so far, not a judgement on the idea. Two things stopped me. The recursion in Lemma 2 appears to break the One-Shot Equivalence the design relies on, and the construction needs raw Keccak-p, which common libraries do not expose, plus a |K| <=3D rho bound on the input. I would rather have your reading than my own here: if the equivalence can be recovered, or if the bound is looser than I have assumed, I would like to see it. On your ground, so I expect I am the one who is wrong, and I may well be leaving performance on the table. What I would most value is your view on whether a duplex derivation is feasible here at all, and what it would look like. On the round count: the draft offers both 12-round TurboSHAKE256 and 24-round SHAKE256 and deliberately leaves the choice open, with neither named as the default. You called 12 rounds a comfortable margin. Would you frame the margin any differently for this use: an unkeyed sponge, injective framing, indifferentiable up to 2^256? On the AEAD: I agree it is worth having, and it is a follow-on rather than part of this document, which is about the key schedule. Perhaps bringing the AEAD itself to CFRG is a route forward. Thanks for taking the time to review my rough -00 draft. Hopefully the new draft is closer to a feasible secure design. Nick On Tue, Jul 14, 2026 at 1:09=E2=80=AFPM Joan Daemen <jda=3D [email protected]> wrote: > Dear all, > > We are enthusiastic about Nick Sullivan's announcement of his RFC draft > for a TLS 1.3 key schedule based on Keccak and happy with the many > reactions on the mailing list, so we thought it would be good to give you > our 2 cents. > > # Including a Keccak-based AEAD option > > In Table 1, the draft proposes AES-GCM and ChaCha20-Poly1305 as AEAD > schemes, but no Keccak-based scheme. As suggested by other participants, = it > would be nice to also offer the option of a Keccak-based AEAD scheme. Thi= s > would allow one to potentially reduce the code size (or area) and trust > surface even further. > > We did the exercise recently in our paper "Shaking up authenticated > encryption" presented at EuroS&P (https://eprint.iacr.org/2024/1618). It > defines two fully committing AEAD schemes, both with security provably > reducible to (Turbo)SHAKE128/256. > > > # Instantiating the key derivation > > The EuroS&P paper also defines a duplex object and a deck function, both > also reducing to the security of (Turbo)SHAKE128/256. Thanks to this > reduction, the former could be used as primitives in the key derivation, > solving much of the domain separation. The use of "trailer" bytes that > accumulate all domain separation bits the final functions are very simple > to implement. Moreover, by overwriting input blocks (instead of XORing th= em > in), they have a nice property that each call to the underlying permutati= on > can be a ratchet: the only requirement is that at least 128/256 bits of t= he > output shall not be returned. > > > # Kravatte vs (Turbo)SHAKE > > Kravatte is a very fast primitive that could be used for AEAD. However, i= t > needs a secret key upon initialization and is therefore not suited for ke= y > derivation. > > Kravatte is a deck function obtained by applying the Farfalle constructio= n > with Keccak-p[6 rounds] and two rolling functions. It is **not** built on > top of Keccak and therefore it security cannot be reduced to that of > (Turbo)SHAKE. Actually, its security cannot be reduced to a simpler > primitive, so the security of Kravatte must be established by the > cryptanalysis of Kravatte itself. > > > # On the number of rounds > > MarsupilamiFourteen (M14) was given as an example of a function calling > Keccak-p with a number of rounds that is not a multiple of 6. > > M14 dates back from 2018 as a 256-bit version of (now called) KT128. The > reasoning for adding two rounds was to allow for extra safety margin whil= e > giving more budget to the adversary. Since then, we have seen the number = of > rounds that can be attacked under cryptanalysis slow down, and now we thi= nk > that 12 rounds provides a comfortable safety margin for Keccak, even when > targeting 256-bit security with a capacity of 512 bits. So, RFC 9861 > proposes TurboSHAKE256 and KT256 on top of Keccak-p[12 rounds] and not 14 > rounds. > > Note by Joan: I answered Markku indeed that I could not think of any > proposal where the round count would not be a multiple of 6, thereby > dismissing MarsipulamiFourteen but also our CAESAR AEAD candidate Ketje > that does single-round calls in the encryption phase. My mindset was that > both were proposals for which we think we have more interesting > alternatives. > > > Kind regards, > > The Keccak team > Guido Bertoni, Joan Daemen, Seth Hoffert, Silvia Mella, Micha=C3=ABl Peet= ers, > Gilles Van Assche and Ronny Van Keer > > Op 08-07-2026 om 18:01 schreef Nick Sullivan: > > Hi Hannes, > > As Thom noted below in the chain, the motivation is to modernize the key > schedule, which has two main advantages: > > 1. Efficiency gains: As the analysis on-list spells out, it=E2=80=99s a d= ramatic > improvement to the number of hashes/permutations needed. But as you noted= , > is not the hot path at all. > 2. Removing a hard dependency on SHA-2 from future designs, as Thom > noted. This gain isn=E2=80=99t immediate, but it clears the way for futur= e > configurations that don=E2=80=99t rely on SHA-2 for the CertificateVerify= to drop > SHA-2 completely from the code base. > > Nick > > On Wed, Jul 8, 2026 at 3:58=E2=80=AFPM Thom Wiggers <[email protected]>= wrote: > >> Hi Hannes, >> >> I don=E2=80=99t think runtime performance is an issue, but rather code s= ize (or >> area), by getting rid of SHA2. (Of course, this is long into the future)= . >> The sponge-based constructions also have theoretical benefits. >> >> Cheers, >> >> Thom >> >> >> Op 8 jul 2026, om 13:47 heeft Hannes Tschofenig <hannes.tschofenig=3D >> [email protected]> het volgende geschreven: >> >> Hi Markku, Hi Nick! >> >> I will certainly look closer into the details but it appears that you ar= e >> optimizing TLS in the wrong place. The key derivation is the least >> expensive part in TLS and spending time optimizing it will bring little >> benefit. I am saying this because I have for years been looking at >> optimizing different parts of the TLS protocol with constrained IoT in m= ind. >> >> This brings me to the core question: What is the problem you are trying >> to solve in the first place? I do not recall that anyone has voiced >> performance problems with the key derivation in TLS before this draft wa= s >> published. >> >> Ciao >> Hannes >> >> >> Am 08.07.2026 um 12:16 schrieb Markku-Juhani O. Saarinen: >> >> Hi, >> >> Thanks for this. I quickly put together an implementation of >> draft-sullivan-tls-xof-ciphers-00.txt around Rustls to do some >> measurements: >> >> https://github.com/mjosaarinen/altkdf-rs >> >> ( Editorial comments in >> https://github.com/mjosaarinen/altkdf-rs/blob/main/FINDINGS.md ) >> >> The theoretical side of the design seems very defensible -- clean proof >> target. In terms of concrete security, the Keccak variants have a much >> larger security margin than the SHA-2 family. >> >> Given how much work we put into reducing the number of permutation calls >> with ML-KEM and Hybrid combiners -- carefully debating and analyzing eac= h >> permutation -- this one yields a staggering reduction, making the key >> schedule much faster (and the handshake probably too.) >> >> For the representative full handshake: PSK + (EC)DHE + 0-RTT leaves + >> NewSessionTicket + one KeyUpdate each direction + one exporter, the >> per-endpoint counts over 24-round Keccak-f[1600] are: >> >> 41 * f1600: Deck implementation, measured stateful >> 46 * f1600: Deck implementation, measured recompute >> 52 * f1600: Section A.1 in draft-sullivan-tls-xof-ciphers-00 >> 156 * f1600: HKDF-SHA3-256 / RFC 8446 baseline >> 117 * f1600: Appendix D "FIPS" KMAC256 schedule >> >> So 41 vs 156 permutations by my count. >> >> ( Note: The draft slightly overcounts permutations in its estimates. ) >> >> It's a quick prototype built with extensive AI assistance, but it >> includes basic correctness measures: primitive KATs (RFC 9861 >> TurboSHAKE256, FIPS 202 SHAKE256, SP 800-185 KMAC256, including multi-bl= ock >> and long-output), 73 self-generated Appendix C/D vectors, and byte-for-b= yte >> reproduction of all of them by an independent Python implementation writ= ten >> from the draft alone. >> >> - Keccak-p[1600,nr] permutation and the rate-136/capacity-512 sponge >> - Five framed deck operations (Init/Absorb/Fork/Squeeze/Ratchet) >> - KMAC-layout MAC >> - Three-stage E/H/T schedule with its two ratchets >> - Section 5 derivations (record keys, Finished/PSK binders, exporters, >> resumption and key-update, and the =C2=A710 external-PSK importer with >> ImportedIdentityV2). >> - All five cipher suites (0xFF01=E2=80=930xFF05, both profiles, three AE= ADs) >> >> Plus for comparisons: >> >> - Appendix D FIPS-component schedule (RFC 8446 with KMAC256 as the PRF) >> - a permutation-count benchmark reproducing =C2=A7A.1, live-secret zeroi= zation >> (=C2=A715.7.2.2) >> >> Cheers, >> -markku >> >> Dr. Markku-Juhani O. Saarinen <[email protected]> >> >> >> On Tue, Jul 7, 2026 at 2:34=E2=80=AFAM Nick Sullivan <nicholas.sullivan@= gmail.com> >> wrote: >> >>> Dear TLS, >>> >>> I'm sharing a draft for the group's consideration. >>> draft-sullivan-tls-xof-ciphers-00 runs the entire TLS 1.3 key schedule >>> on a single Keccak permutation, instead of HKDF built on HMAC built on >>> the cipher suite's hash, which today is always SHA-2. This is newly >>> practical because deployments using SHA-3, ML-KEM, or ML-DSA already >>> carry a Keccak permutation, so the primitive is already in the stack. >>> >>> Each derived value comes out in one pass, so a full handshake costs >>> about a third of the permutation calls an HKDF schedule over the same >>> permutation would spend. >>> >>> A cipher suite names an AEAD plus a schedule profile, and nothing else >>> changes. There is no new extension, and the state machine, record >>> layer, and wire format are untouched. Two profiles are defined, one on >>> the standard SHA-3 function and one on a faster reduced-round variant. >>> Test vectors are pinned to cipher-suite values, so the final vectors >>> will follow the code point assignment. >>> >>> https://datatracker.ietf.org/doc/draft-sullivan-tls-xof-ciphers/ >>> >>> This is a big change to the key schedule, and the draft is very >>> preliminary. Feedback on the approach, or interest in implementing it, >>> would help a lot. >>> >>> Best, >>> Nick >>> >>> On Mon, Jul 6, 2026 at 7:03=E2=80=AFPM <[email protected]> wrote= : >>> > >>> > A new version of Internet-Draft draft-sullivan-tls-xof-ciphers-00.txt >>> has been >>> > successfully submitted by Nick Sullivan and posted to the >>> > IETF repository. >>> > >>> > Name: draft-sullivan-tls-xof-ciphers >>> > Revision: 00 >>> > Title: TLS 1.3 Cipher Suites with Alternative Key-Schedule Profile= s >>> > Date: 2026-07-06 >>> > Group: Individual Submission >>> > Pages: 46 >>> > URL: >>> https://www.ietf.org/archive/id/draft-sullivan-tls-xof-ciphers-00.txt >>> > Status: >>> https://datatracker.ietf.org/doc/draft-sullivan-tls-xof-ciphers/ >>> > HTML: >>> https://www.ietf.org/archive/id/draft-sullivan-tls-xof-ciphers-00.html >>> > HTMLized: >>> https://datatracker.ietf.org/doc/html/draft-sullivan-tls-xof-ciphers >>> > >>> > >>> > Abstract: >>> > >>> > TLS 1.3 builds its key schedule on HKDF over the cipher suite's >>> hash. >>> > This document defines TLS 1.3 cipher suites that build it on a dec= k >>> > function over a single permutation instead, the one a deployment >>> > already carries when it uses SHA-3, ML-KEM, or ML-DSA. One >>> > permutation then runs the whole schedule, and a full handshake tak= es >>> > about a third of the permutation calls an HKDF schedule over that >>> > permutation would. Such a cipher suite names an AEAD algorithm >>> > together with a schedule profile that defines every key-schedule >>> > function the connection uses. The profile follows from the >>> > negotiated cipher suite alone, so no new extension is defined and >>> the >>> > TLS 1.3 state machine and wire format are unchanged. Two profiles >>> > are defined, one on the standard SHA-3 function and one on a faste= r >>> > reduced-round variant of it. >>> > >>> > >>> > >>> > The IETF Secretariat >>> > >>> > >>> >>> _______________________________________________ >>> TLS mailing list -- [email protected] >>> To unsubscribe send an email to [email protected] >>> >> >> _______________________________________________ >> TLS mailing list -- [email protected] >> To unsubscribe send an email to [email protected] >> >> _______________________________________________ >> TLS mailing list -- [email protected] >> To unsubscribe send an email to [email protected] >> >> >> > _______________________________________________ > TLS mailing list -- [email protected] > To unsubscribe send an email to [email protected] > > _______________________________________________ > TLS mailing list -- [email protected] > To unsubscribe send an email to [email protected] > --000000000000c547a806575b62c3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Joan and the Keccak team,<br><br>Thank you for the review.= Both of your suggestions were more useful than a first read of my reply mi= ght suggest, and I want to be clear that neither is closed.<br><br>On overw= rite-duplex for the derivation: I have not taken it into this revision, but= that is a statement about what I have been able to work out so far, not a = judgement on the idea. Two things stopped me. The recursion in Lemma 2 appe= ars to break the One-Shot Equivalence the design relies on, and the constru= ction needs raw Keccak-p, which common libraries do not expose, plus a |K| = <=3D rho bound on the input. I would rather have your reading than my ow= n here: if the equivalence can be recovered, or if the bound is looser than= I have assumed, I would like to see it. On your ground, so I expect I am t= he one who is wrong, and I may well be leaving performance on the table. Wh= at I would most value is your view on whether a duplex derivation is feasib= le here at all, and what it would look like.<br><br>On the round count: the= draft offers both 12-round TurboSHAKE256 and 24-round SHAKE256 and deliber= ately leaves the choice open, with neither named as the default. You called= 12 rounds a comfortable margin. Would you frame the margin any differently= for this use: an unkeyed sponge, injective framing, indifferentiable up to= 2^256?<br><br>On the AEAD: I agree it is worth having, and it is a follow-= on rather than part of this document, which is about the key schedule. Perh= aps bringing the AEAD itself to CFRG is a route forward.<br><br>Thanks for = taking the time to review my rough -00 draft. Hopefully the new draft is cl= oser to a feasible secure design.<br><br>Nick</div><br><div class=3D"gmail_= quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, = Jul 14, 2026 at 1:09=E2=80=AFPM Joan Daemen <jda=3D<a href=3D"mailto:40n= [email protected]">[email protected]</a>> wrote:<br><= /div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bo= rder-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u> =20 =20 =20 <div> <p>Dear all, <br> <br> We are enthusiastic about Nick Sullivan's announcement of his RFC draft for a TLS 1.3 key schedule based on Keccak and happy with the many reactions on the mailing list, so we thought it would be good to give you our 2 cents. <br> <br> # Including a Keccak-based AEAD option <br> <br> In Table 1, the draft proposes AES-GCM and ChaCha20-Poly1305 as AEAD schemes, but no Keccak-based scheme. As suggested by other participants, it would be nice to also offer the option of a Keccak-based AEAD scheme. This would allow one to potentially reduce the code size (or area) and trust surface even further. <br> <br> We did the exercise recently in our paper "Shaking up authenticated encryption" presented at EuroS&P (<a href=3D"h= ttps://eprint.iacr.org/2024/1618" target=3D"_blank">https://eprint.iacr.org= /2024/1618</a>). It defines two fully committing AEAD schemes, both with security provably reducible to (Turbo)SHAKE128/256. <br> <br> <br> # Instantiating the key derivation <br> <br> The EuroS&P paper also defines a duplex object and a deck function, both also reducing to the security of (Turbo)SHAKE128/256. Thanks to this reduction, the former could be used as primitives in the key derivation, solving much of the domain separation. The use of "trailer" bytes that accumula= te all domain separation bits the final functions are very simple to implement. Moreover, by overwriting input blocks (instead of XORing them in), they have a nice property that each call to the underlying permutation can be a ratchet: the only requirement is that at least 128/256 bits of the output shall not be returned. <br> <br> <br> # Kravatte vs (Turbo)SHAKE <br> <br> Kravatte is a very fast primitive that could be used for AEAD. However, it needs a secret key upon initialization and is therefore not suited for key derivation. <br> <br> Kravatte is a deck function obtained by applying the Farfalle construction with Keccak-p[6 rounds] and two rolling functions. It is <b><span>*</span>not<span>*</span></b> built on top of Keccak and therefore it security cannot be reduced to that of (Turbo)SHAKE. Actually, its security cannot be reduced to a simpler primitive, so the security of Kravatte must be established by the cryptanalysis of Kravatte itself. <br> <br> <br> # On the number of rounds <br> <br> MarsupilamiFourteen (M14) was given as an example of a function calling Keccak-p with a number of rounds that is not a multiple of 6. <br> <br> M14 dates back from 2018 as a 256-bit version of (now called) KT128. The reasoning for adding two rounds was to allow for extra safety margin while giving more budget to the adversary. Since then, we have seen the number of rounds that can be attacked under cryptanalysis slow down, and now we think that 12 rounds provides a comfortable safety margin for Keccak, even when targeting 256-bit security with a capacity of 512 bits. So, RFC 9861 proposes TurboSHAKE256 and KT256 on top of Keccak-p[12 rounds] and not 14 rounds. <br> <br> Note by Joan: I answered Markku indeed that I could not think of any proposal where the round count would not be a multiple of 6, thereby dismissing MarsipulamiFourteen but also our CAESAR AEAD candidate Ketje that does single-round calls in the encryption phase. My mindset was that both were proposals for which we think we have more interesting alternatives. <br> <br> <br> Kind regards, <br> <br> The Keccak team <br> Guido Bertoni, Joan Daemen, Seth Hoffert, Silvia Mella, Micha=C3=ABl Peeters, Gilles Van Assche and Ronny Van Keer <br> <br> </p> <div>Op 08-07-2026 om 18:01 schreef Nick Sullivan:<br> </div> <blockquote type=3D"cite"> =20 <div> <div style=3D"font-size:inherit"> <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px">Hi Hannes,</div> <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px"><br> </div> <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px">As Thom noted below in the chain, the motivation is to modernize the key schedule, which has two main advantages:</div= > <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px"><br> </div> <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px">1. Efficiency gains: As the analysis on-list spells out, it=E2=80= =99s a dramatic improvement to the number of hashes/permutations needed. But as you noted, is not the hot path at all.</div> <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px">2. R<span style=3D"font-family:-apple-system,sans-serif">emoving a hard dependency on SHA-2 from future designs, as Thom noted. This gain isn=E2=80=99t immediate, but it clears the w= ay for future configurations that don=E2=80=99t rely on SHA-2 fo= r the CertificateVerify to drop SHA-2 completely from the code base.</span></div> <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px"><br> </div> <div dir=3D"auto" style=3D"color:rgb(0,0,0);font-family:-apple-sy= stem,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-= spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-= spacing:0px">Nick</div> </div> </div> <div><br> <div class=3D"gmail_quote"> <div dir=3D"ltr" class=3D"gmail_attr">On Wed, Jul 8, 2026 at 3:58=E2=80=AFPM Thom Wiggers <<a href=3D"mailto:thom@thomwig= gers.nl" target=3D"_blank">[email protected]</a>> wrote:<br> </div> <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8= ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <div>Hi Hannes, <div><br> </div> <div>I don=E2=80=99t think runtime performance is an issue, b= ut rather code size (or area), by getting rid of SHA2. (Of course, this is long into the future). The sponge-based constructions also have theoretical benefits.</div> <div><br> </div> <div>Cheers,</div> <div><br> </div> <div>Thom</div> </div> <div> <div><br> <div> <div><br> <blockquote type=3D"cite"> <div>Op 8 jul 2026, om 13:47 heeft Hannes Tschofenig <hannes.tschofenig=3D<a href=3D"mailt= o:[email protected]" target=3D"_blank">[email protected]</a>&= gt; het volgende geschreven:</div> <br> <div> <div> <p>Hi Markku, Hi Nick!</p> <p>I will certainly look closer into the details but it appears that you are optimizing TLS in the wrong place. The key derivation is the least expensive part in TLS and spending time optimizing it will bring little benefit. I am saying this because I have for years been looking at optimizing different parts of the TLS protocol with constrained IoT in mind.</p> <p>This brings me to the core question: What is the problem you are trying to solve in the first place? I do not recall that anyone has voiced performance problems with the key derivation in TLS before this draft was published.=C2=A0</p> <p>Ciao<br> Hannes</p> <p><br> </p> <div>Am 08.07.2026 um 12:16 schrieb Markku-Juhani O. Saarinen:<br> </div> <blockquote type=3D"cite"> <div dir=3D"ltr"> <div> <div>Hi,<br> <br> Thanks for this. I quickly put together an implementation of draft-sullivan-tls-xof-ciphers-00.txt around Rustls to do some measurements:=C2=A0</div> <div><br> </div> <div><a href=3D"https://github.com/mjosaari= nen/altkdf-rs" target=3D"_blank">https://github.com/mjosaarinen/altkdf-rs</= a>=C2=A0=C2=A0</div> <div><br> </div> <div>( Editorial comments in <a href=3D"htt= ps://github.com/mjosaarinen/altkdf-rs/blob/main/FINDINGS.md" target=3D"_bla= nk">https://github.com/mjosaarinen/altkdf-rs/blob/main/FINDINGS.md</a> )<br> <br> The theoretical side of the design seems very defensible -- clean proof target. In terms of concrete security, the Keccak variants have a much larger security margin than the SHA-2 family.<br= > <br> Given how much work we put into reducing the number of permutation calls with ML-KEM and Hybrid combiners -- carefully debating and analyzing each permutation -- this one yields a staggering reduction, making the key schedule much faster (and the handshake probably too.)<br> <br> For the representative full handshake: PSK + (EC)DHE + 0-RTT leaves + NewSessionTicket + one KeyUpdate each direction + one exporter, the per-endpoint counts over 24-round Keccak-f[1600] are:<br> <br> 41 =C2=A0* f1600: Deck implementation, measured stateful<br> 46 =C2=A0* f1600: Deck implementation, measured recompute<br> 52 =C2=A0* f1600: Section A.1 in draft-sullivan-tls-xof-ciphers-00<br> 156 * f1600: HKDF-SHA3-256 / RFC 8446 baseline<br> 117 * f1600: Appendix D "FIPS" = KMAC256 schedule<br> <br> So 41 vs 156 permutations by my count.<br= > <br> ( Note: The draft slightly overcounts permutations in its estimates. )<br> <br> It's a quick prototype built with extensive AI assistance, but it includes basic correctness measures: primitive KATs (RFC 9861 TurboSHAKE256, FIPS 202 SHAKE256, SP 800-185 KMAC256, including multi-block and long-output), 73 self-generated Appendix C/D vectors, and byte-for-byte reproduction of all of them by an independent Python implementation written from the draft alone.<br> <br> - Keccak-p[1600,nr] permutation and the rate-136/capacity-512 sponge<br> - Five framed deck operations (Init/Absorb/Fork/Squeeze/Ratchet)<br> - KMAC-layout MAC<br> - Three-stage E/H/T schedule with its two ratchets<br> - Section 5 derivations (record keys, Finished/PSK binders, exporters, resumption and key-update, and the =C2=A7= 10 external-PSK importer with ImportedIdentityV2).<br> - All five cipher suites (0xFF01=E2=80=930xFF05, both profiles, th= ree AEADs)<br> <br> </div> <div>Plus for comparisons:<br> <br> - Appendix D FIPS-component schedule (RFC 8446 with KMAC256 as the PRF)<br> - a permutation-count benchmark reproducing =C2=A7A.1, live-secret zeroization (=C2=A715.7.2.2)<br> <br> Cheers,<br> -markku</div> <div><br> </div> <div> <div dir=3D"ltr" class=3D"gmail_signature= ">Dr. Markku-Juhani O. Saarinen <<a href= =3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>></div> </div> </div> <br> </div> <br> <div class=3D"gmail_quote"> <div dir=3D"ltr" class=3D"gmail_attr">On Tue, Jul 7, 2026 at 2:34=E2=80=AFAM Nick Sulliva= n <<a href=3D"mailto:nicholas.sullivan@gma= il.com" target=3D"_blank">[email protected]</a>> wrote:<br> </div> <blockquote class=3D"gmail_quote" style=3D"ma= rgin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:= 1ex">Dear TLS,<br> <br> I'm sharing a draft for the group's consideration.<br> draft-sullivan-tls-xof-ciphers-00 runs the entire TLS 1.3 key schedule<br> on a single Keccak permutation, instead of HKDF built on HMAC built on<br> the cipher suite's hash, which today is always SHA-2. This is newly<br> practical because deployments using SHA-3, ML-KEM, or ML-DSA already<br> carry a Keccak permutation, so the primitive is already in the stack.<br> <br> Each derived value comes out in one pass, so a full handshake costs<br> about a third of the permutation calls an HKDF schedule over the same<br> permutation would spend.<br> <br> A cipher suite names an AEAD plus a schedule profile, and nothing else<br> changes. There is no new extension, and the state machine, record<br> layer, and wire format are untouched. Two profiles are defined, one on<br> the standard SHA-3 function and one on a faster reduced-round variant.<br> Test vectors are pinned to cipher-suite values, so the final vectors<br> will follow the code point assignment.<br> <br> <a href=3D"https://datatracker.ietf.org/doc= /draft-sullivan-tls-xof-ciphers/" rel=3D"noreferrer" target=3D"_blank">http= s://datatracker.ietf.org/doc/draft-sullivan-tls-xof-ciphers/</a><br> <br> This is a big change to the key schedule, and the draft is very<br> preliminary. Feedback on the approach, or interest in implementing it,<br> would help a lot.<br> <br> Best,<br> Nick<br> <br> On Mon, Jul 6, 2026 at 7:03=E2=80=AFPM <= <a href=3D"mailto:[email protected]" target=3D"_blank">internet-draf= [email protected]</a>> wrote:<br> ><br> > A new version of Internet-Draft draft-sullivan-tls-xof-ciphers-00.txt has been<br> > successfully submitted by Nick Sullivan and posted to the<br> > IETF repository.<br> ><br> > Name:=C2=A0 =C2=A0 =C2=A0draft-sullivan-tls-xof-ciphers<br> > Revision: 00<br> > Title:=C2=A0 =C2=A0 TLS 1.3 Cipher Sui= tes with Alternative Key-Schedule Profiles<br> > Date:=C2=A0 =C2=A0 =C2=A02026-07-06<br= > > Group:=C2=A0 =C2=A0 Individual Submiss= ion<br> > Pages:=C2=A0 =C2=A0 46<br> > URL:=C2=A0 =C2=A0 =C2=A0 <a href=3D"ht= tps://www.ietf.org/archive/id/draft-sullivan-tls-xof-ciphers-00.txt" rel=3D= "noreferrer" target=3D"_blank">https://www.ietf.org/archive/id/draft-sulliv= an-tls-xof-ciphers-00.txt</a><br> > Status:=C2=A0 =C2=A0<a href=3D"https:/= /datatracker.ietf.org/doc/draft-sullivan-tls-xof-ciphers/" rel=3D"noreferre= r" target=3D"_blank">https://datatracker.ietf.org/doc/draft-sullivan-tls-xo= f-ciphers/</a><br> > HTML:=C2=A0 =C2=A0 =C2=A0<a href=3D"ht= tps://www.ietf.org/archive/id/draft-sullivan-tls-xof-ciphers-00.html" rel= =3D"noreferrer" target=3D"_blank">https://www.ietf.org/archive/id/draft-sul= livan-tls-xof-ciphers-00.html</a><br> > HTMLized: <a href=3D"https://datatrack= er.ietf.org/doc/html/draft-sullivan-tls-xof-ciphers" rel=3D"noreferrer" tar= get=3D"_blank">https://datatracker.ietf.org/doc/html/draft-sullivan-tls-xof= -ciphers</a><br> ><br> ><br> > Abstract:<br> ><br> >=C2=A0 =C2=A0 TLS 1.3 builds its key sc= hedule on HKDF over the cipher suite's hash.<b= r> >=C2=A0 =C2=A0 This document defines TLS= 1.3 cipher suites that build it on a deck<br> >=C2=A0 =C2=A0 function over a single permutation instead, the one a deployment<br> >=C2=A0 =C2=A0 already carries when it u= ses SHA-3, ML-KEM, or ML-DSA.=C2=A0 One<br> >=C2=A0 =C2=A0 permutation then runs the= whole schedule, and a full handshake takes<br> >=C2=A0 =C2=A0 about a third of the perm= utation calls an HKDF schedule over that<br> >=C2=A0 =C2=A0 permutation would.=C2=A0 = Such a cipher suite names an AEAD algorithm<br> >=C2=A0 =C2=A0 together with a schedule = profile that defines every key-schedule<br> >=C2=A0 =C2=A0 function the connection u= ses.=C2=A0 The profile follows from the<br> >=C2=A0 =C2=A0 negotiated cipher suite a= lone, so no new extension is defined and the<br> >=C2=A0 =C2=A0 TLS 1.3 state machine and= wire format are unchanged.=C2=A0 Two profiles<br= > >=C2=A0 =C2=A0 are defined, one on the s= tandard SHA-3 function and one on a faster<br> >=C2=A0 =C2=A0 reduced-round variant of = it.<br> ><br> ><br> ><br> > The IETF Secretariat<br> ><br> ><br> <br> _______________________________________________<br> TLS mailing list -- <a href=3D"mailto:tls@i= etf.org" target=3D"_blank">[email protected]</a><br> To unsubscribe send an email to <a href=3D"= mailto:[email protected]" target=3D"_blank">[email protected]</a><br> </blockquote> </div> <br> <fieldset></fieldset> <pre>__________________________________________= _____ TLS mailing list -- <a href=3D"mailto:[email protected]" target=3D"_blank">tls@i= etf.org</a> To unsubscribe send an email to <a href=3D"mailto:[email protected]" targe= t=3D"_blank">[email protected]</a> </pre> </blockquote> </div> _______________________________________________<br> TLS mailing list -- <a href=3D"mailto:[email protected]"= target=3D"_blank">[email protected]</a><br> To unsubscribe send an email to <a href=3D"mailto:t= [email protected]" target=3D"_blank">[email protected]</a><br> </div> </blockquote> </div> <br> </div> </div> </div> </blockquote> </div> </div> <br> <fieldset></fieldset> <pre>_______________________________________________ TLS mailing list -- <a href=3D"mailto:[email protected]" target=3D"_blank">tls@i= etf.org</a> To unsubscribe send an email to <a href=3D"mailto:[email protected]" targe= t=3D"_blank">[email protected]</a> </pre> </blockquote> </div> _______________________________________________<br> TLS mailing list -- <a href=3D"mailto:[email protected]" target=3D"_blank">tls@i= etf.org</a><br> To unsubscribe send an email to <a href=3D"mailto:[email protected]" targe= t=3D"_blank">[email protected]</a><br> </blockquote></div> --000000000000c547a806575b62c3-- --===============0796063690709611539== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVExTIG1haWxp bmcgbGlzdCAtLSB0bHNAaWV0Zi5vcmcKVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byB0 bHMtbGVhdmVAaWV0Zi5vcmcK --===============0796063690709611539==--