I don't see where https://www.ietf.org/archive/id/draft-ietf-tls-hybrid-design-16.html is specific to ML-KEM. In fact, looking through the draft I believe the text that I proposed is insufficient because it does not mention explicit rejection.

Section 2 states that the Decaps function outputs "in some cases a distinguished error value." So, if that text is to remain, it seems that the draft should specify what to do in the case that Decaps outputs an error value.


I agree with you that the draft should not be a cryptographical textbook. There was just some concern by some that implementers would be confused if they read about failures in ML-KEM and text didn't say how to handle them. I was just proposing a rewording of the text that tries to clarify for implementers that there is nothing they need to do in the case of ML-KEM (or other KEMs that use implicit rejection).


As this text is intended for implementers and is not a cryptographical textbook, I was not trying to imply (despite another commenter's suggestion to the contrary) that it has been proven that it is mathematically impossible to distinguish one type of failure from another. This draft is not intended for cryptographers and so "indistinguishable" is not to be interpreted in a cryptographic sense.


Similarly, I do not believe anything in my text is trying to address the possibility that an implementer might try to deviate from the implementation of the underlying KEM. The text essentially indicates that since the underlying KEM always output a session key, no special processing is needed to handle cases in which a failure occurs. There is no text mentioning that the underlying decaps function includes a reencryption check, and that a failure of that check could be used in some way, but that doing so would be discouraged. So I do not understand why the other commenter suggested that my proposed text seems to allow deviations from the correct implementation, but then discourages doing so.


On 9/29/25 15:52, Scott Fluhrer (sfluhrer) wrote:
I believe I have said this before, I'll reiterate

The goal of the RFC text should be to give implementors instructions on how to implement the protocol.  Advice that we give should be actionable; that is, something that they can implement.

The suggested text is not that.  It essentially says "the system might fail, and there's nothing you can do about it".  While technically true, there is only a tiny probability of it ever happening anywhere in the world, for the lifetime of TLS 1.3, between two honest parties and uncorrupted communication. Again, I wouldn't mention it - why mention something that, in practical terms, is not a concern at all?

And, while I'm ranting, what's with this "it seems to be only discussing KEMs that use implicit rejection".  Of course it is - this draft is specific to ML-KEM.  Referring to other KEMs should be out of scope.

This draft should not be a cryptographical textbook - instead, it should be an instruction manual on how to implement the protocol correctly and securely.

------------------------------------------------------------------------
*From:* David Cooper <[email protected]>
*Sent:* Monday, September 29, 2025 4:07 PM
*To:* Paul Wouters <[email protected]>
*Cc:* [email protected] <[email protected]>
*Subject:* [TLS] Re: ML-KEM failures

I agree with Sophie. The proposed text says that a failure results in the parties deriving different shared secrets. So, it seems to be only discussing KEMs that use implicit rejection. (With explicit rejection, the recipient would receive a failure indication rather than deriving a different shared secret.) In the case of implicit rejection, the failure would be indistinguishable from one caused by a corrupted ciphertext. So, it seems incorrect to RECOMMEND against trying to specifically handle such failures when it should be impossible for implementations to attempt to handle such failures differently from other failures.

How about this as possible new text:

    Some post-quantum key-exchange algorithms, including ML-KEM
    [NIST-FIPS-203], have a very small, but non-zero, probability of
    failure. This means that in theory the parties to the key exchange
    could derive different shared secrets even if both parties perform
    the algorithm correctly and no data is modified in transit. Such
    failures would be indistinguishable from other occurrences that
    would result in the client and server not deriving the same shared
    secrets (e.g., random bit corruptions, computation errors,
    malicious modification of data in transit) and so would be handled
    in the same way.


On 9/26/25 06:38, Paul Wouters wrote:

    On Thu, 25 Sep 2025, Sophie Schmieg wrote:

        So from a practical point of view, there is simply no guidance
        to give implementers. Not only are such errors incredibly
        unlikely, they also behave exactly the same
        as corrupted ciphertexts, and your stack will handle those,
        since there is no difference to the behavior in the case of ECDH.


    I think there is consensus that there is no advise to give to
    implementers
    to handle these failure cases. While we could use that to justify
    saying
    nothing, my own preference is to at least have a sentence explicitely
    saying that implementers should do nothing, in case implementers
    become
    aware of these theortical failures and wrongly assume the
    specification
    was not aware and thus "vulnerable" to these issues.

    Perhaps:

    Current:
        Some post-quantum key exchange algorithms, including ML-KEM
        [NIST-FIPS-203], have non-zero probability of failure, meaning two
        honest parties may derive different shared secrets. This would
    cause a
        handshake failure. ML-KEM has a cryptographically small
    failure rate; if
        other algorithms are used, implementers should be aware of the
    potential
        of handshake failure.  Clients MAY retry if a failure is
    encountered.

    New:
        Some post-quantum key exchange algorithms, including ML-KEM
        [NIST-FIPS-203], have non-zero probability of failure, meaning
        two honest parties may derive different shared secrets. This
        would cause a handshake failure. As with other similar failures
        (such as bit corruptions), Clients MAY retry if a failure is
        encountered. Due to the negliable rate of occurances of these
        failure events, the lack of a known feasable method and the
        additional risk of introducing new attack vectors when attempting
        to handle these events, it is RECOMMENDED for implementers to
        not specifically handle post-quantum key exchange shared secrets
        failures, and rely on the pre-existing code paths that handle
        derivation failures.

    If someone can write up a better and shorter text, please send in your
    proposed text.

    Paul
_______________________________________________
TLS mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to