This is excellent, especially the explicit decision to make concrete primitive 
choices, which allow the scheme to be both secure and efficient.

I have an implementation at filippo.io/mlkem768/xwing 
<https://pkg.go.dev/filippo.io/mlkem768/xwing> which passes the test vectors in 
draft-connolly-cfrg-xwing-kem-00, Appendix A.

By the way, I really appreciate specifying "derandomized" versions of the 
functions for testing. It solves the problem of "randomness from the sky" 
<https://words.filippo.io/dispatches/avoid-the-randomness-from-the-sky/> while 
providing a clear mandate not to expose the random input in high-level APIs. I 
would love to see this pattern adopted widely.

As Bas already mentioned, I suggested making sk = `concat(sk_M, sk_X, pk_X), to 
avoid the pk input to Decapsulate and mirroring in a sense the presence of pk_M 
in sk_M. We've learned with Ed25519 
<https://github.com/jedisct1/libsodium/issues/170> that designing APIs where 
key mismatches are possible is dangerous. In this case I *think* there would be 
no security impact, but it leads to questions like "what is the expected 
behavior of Decapsulate if the ML-KEM pk is invalid?" (This change is again 
cheap/possible because X-Wing targets `ML-KEM-768 and X25519 specifically, 
which further validates the team's decision to make concrete choices.)

2024-01-10 21:13 GMT+01:00 Bas Westerbaan <bas=40cloudflare....@dmarc.ietf.org>:
> Dear tls and cfrg working groups,
> 
> With ML-KEM (née Kyber) expected to be finalized this year, it’s time to 
> revisit the question of which PQ/T hybrid KEMs to standardize, and which to 
> recommend.
> 
> # Status quo
> 
> For TLS at the time of writing there are two PQ/T hybrids registered: 
> X25519Kyber768 [1] and P256Kyber768 [2]. The former has been deployed widely 
> [3]. Both are instances of the hybrid-design draft [4], which use the simple 
> combiner ss_ECC || ss_Kyber, which is suitable for TLS, but not for other 
> applications such as HPKE, as it’s not IND-CCA2 robust [5].
> 
> For HPKE, there is a different KEM called X25519Kyber768 [6], which uses a 
> different combiner that mixes in the X25519 ephemeral key, by using HPKE’s 
> DHKEM construction instead of raw X25519.
> 
> There is also the ounsworth-kem-combiners I-D [7] that informed by [5] 
> proposes the generic combiner
> 
>   KDF( counter || ct1 || ss1 || ct2 || ss2 || fixedInfo, outputBits )
> 
> From a security standpoint that would be suitable for HPKE and TLS. To TLS it 
> is somewhat unattractive as it requires hashing the typically large PQ 
> ciphertexts, and adds some extra hashing in the conversion of the ECDH into a 
> KEM. On the other hand, for TLS it would be nice to have a KEM that is also 
> suitable for HPKE, as HPKE is used in ECH.
> 
> From a usability perspective, ounsworth-kem-combiners requires the user to 
> make several choices: which KEMs and in particular which method to use to 
> turn ECDH into a KEM, which security levels, which KDF, etc.
> 
> # The proposal: X-Wing
> 
> Let us introduce X-Wing [0]. The goal of X-Wing is to be *the* go-to PQ/T 
> hybrid KEM for the majority of use cases (including TLS and HPKE): no need to 
> make choices, or understand the subtleties.
> 
> X-Wing aims for 128-bit security, and for that combines the time-tested 
> X25519 with ML-KEM-768 [8]. X-Wing uses the combiner
> 
>   SHA3-256( xwing-label || ss_ML-KEM || ss_X25519 || ct_X25519 || pk_X25519 )
> 
> Here ss_X25519 is the plain X25519 shared secret; ct_X25519 is the ephemeral 
> public key; xwing-label a 6-byte label. Note that it doesn’t hash in the 
> ML-KEM ciphertext. For a generic KEM one cannot leave out the ciphertext, but 
> in the case of ML-KEM we can, assuming we can model SHA3/SHAKE as a random 
> oracle. This is proven in [0]. The gist is that FO transform in ML-KEM makes 
> it “ciphertext collision resistant”: even if the underlying lattice problem 
> is broken, it’s infeasible to create from one ciphertext another different 
> ciphertext with the same shared secret.
> 
> # Not final
> 
> We would love to hear your input: X-Wing is not final. For one, ML-KEM itself 
> might still change (presumably only in minor ways) before final 
> standardization. We think the CFRG would be a good venue to standardize 
> X-Wing — do you concur?
> 
> Best,
> 
> Bas, Deirdre, Karolin, Manuel, Peter
> 
> 
> PS. We want to mention explicitly that we see value in the kem-combiners and 
> hybrid-design drafts as generic safe methods to construct hybrids for those 
> use cases where X-Wing would not suffice.
> 
> 
> [0] Spec: https://datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem/
> Proof: https://eprint.iacr.org/2024/039
> [1] Full name X25519Kyber768Draft00. 
> https://datatracker.ietf.org/doc/draft-tls-westerbaan-xyber768d00/
> [2] Full name SecP256r1Kyber768Draft00. 
> https://datatracker.ietf.org/doc/draft-kwiatkowski-tls-ecdhe-kyber/
> [3] 
> https://blog.chromium.org/2023/08/protecting-chrome-traffic-with-hybrid.html
> https://twitter.com/bwesterb/status/1734586155868287457
> [4] https://datatracker.ietf.org/doc/draft-stebila-tls-hybrid-design/
> [5] https://link.springer.com/chapter/10.1007/978-3-319-76578-5_7
> [6] https://datatracker.ietf.org/doc/draft-westerbaan-cfrg-hpke-xyber768d00/
> [7] https://datatracker.ietf.org/doc/draft-ounsworth-cfrg-kem-combiners/
> [8] Following earlier deployment of X25519Kyber768, despite targeting 128 
> bits, we use ML-KEM-768 instead of ML-KEM-512 to hedge against advances in 
> lattice attacks.
> _______________________________________________
> TLS mailing list
> TLS@ietf.org
> https://www.ietf.org/mailman/listinfo/tls
> 
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to