Add X25519MLKEM768.json to feature-json#7326
Conversation
features-json/X25519MLKEM768.json
Outdated
| { | ||
| "title":"Hybrid Post-Quantum Key Agreement with X25519MLKEM768", | ||
| "description":"Support for post-quantum key agreement in TLS 1.3 with X25519MLKEM768", | ||
| "spec":"https://www.ietf.org/archive/id/draft-kwiatkowski-tls-ecdhe-mlkem-02.html", |
There was a problem hiding this comment.
I think you want to point the spec at https://datatracker.ietf.org/doc/draft-ietf-tls-ecdhe-mlkem/. (The link you have is expired at this point; pointing to datatracker should get you to the up to date version going forward.)
There was a problem hiding this comment.
Thank you, I've just updated the PR with the new spec link
features-json/X25519MLKEM768.json
Outdated
| "usage_perc_a":0, | ||
| "ucprefix":false, | ||
| "parent":"", | ||
| "keywords":"kyber,mlkem,ml-kem,pqc, postquantum,X25519MLKEM768", |
There was a problem hiding this comment.
Perhaps add "hybrid" or "hybrid key agreement"?
There was a problem hiding this comment.
Thank you, I've just updated the PR and added "hybrid key agreement" in the tag list
|
I was surprised when I Google searched for "can i use X25519MLKEM768" and https://caniuse.com/ didn't show up because we aren't tracking this feature yet. What is still missing so we can merge this pull? Should we update with iOS 26 support which was released on September 15, 2025? https://support.apple.com/en-me/122756 |
Hi @kwinz, thank you for your comments. I have updated the PR with regards to iOS 26 and also updated the information for all other browsers and platforms. |
@olokelo has already opened PR #7083 roughly a year ago for the pre-standard post-quantum key agreement scheme
X25519Kyber768. Meanwhile, the standards landscape has changed, and the pre-standard draftX25519Kyber768has been deprecated by most browsers. It was replaced by the standardized key agreement mechanismX25519MLKEM768and gained support in major browsers quickly at the end of 2024. ML-KEM is the NIST standardized variant of Kyber.This PR considers only the standardized
X25519MLKEM768as supported. I initially started out with flaggingX25519Kyber768as partially supported, but ultimately decided to remove it as it is incompatible withX25519MLKEM768and uses a different codepoint.This PR supersedes #7083 and solves #7072.
Data verification and testing
I carefully put together the data from official release notes and verified part of the data with my own tests. Test can be performed by visiting a test site, such as PQC Ninja's browser test (my own tool) or Cloudflare's test site.
Chrome
X25519Kyber768from Chrome 115 onwards, where it was disabled by default. It was then accessible with the flag#enable-tls13-kyberin Chrome 116 and above (source).#enable-tls13-kyberwas enabled by default (source)X25519Kyber768withX25519MLKEM768in Chrome 130 (disabled by default) and enabled it by default in Chrome 131 (source)Edge
X25519Kyber768in Edge 124 by default.X25519Kyber768withX25519MLKEM768in Edge 131 and enabled it by default (source)Safari
X25519MLKEM768orX25519Kyber768(tested and verified). I expect this to change with the release of iOS 26Firefox
X25519Kyber768in Firefox 124X25519Kyber768withX25519MLKEM768in Firefox 132 (source), but did not ship support for it with QUIC/HTTP3, which came in Firefox 135 (source)Firefox for Android
X25519MLKEM768orX25519Kyber768(tested and verified). However, support forX25519MLKEM768was enabled for nightly builds recently (source).Samsung Internet for Android
X25519MLKEM768orX25519Kyber768(tested and verified)Opera on Android
As Opera 89 is based on Chromium 132, it brings support for
X25519MLKEM768(tested and verified). This version is not yet listed with Caniuse, but just for completeness listed hereOther browsers listed by Caniuse
Note on
SecP256r1MLKEM768andSecP384r1MLKEM1024As @jschauma pointed out in his comment, there are other hybrid post-quantum key agreement schemes available and standardized alongside with
X25519MLKEM768. These should be tracked in a separate feature and are not part of this PR.As far as I can tell from my quick research and testing, none of the major browsers seem to support
SecP256r1MLKEM768orSecP384r1MLKEM1024today, and it is likely that those will not play a significant role in the near future either, as (all?) browsers useX25519MLKEM768in their key share prediction. Usage ofSecP256r1MLKEM768orSecP384r1MLKEM1024would therefore result in a slightly slower TLS handshake and - if I understood how things work in TLS correctly - an additional round trip.