Hi NIST team,
We would like to ask NIST to clarify their position on handling return codes for Kyber / ML-KEM Decapsulation.
Even with the current API for implicit rejection, a return code could be included to the caller of the Decapsulation routine indicating whether the function has output a correct key or not.
This would essentially wrap the “implicit rejection” with an “explicit rejection”, without impacting the function or the API otherwise.
Note that return codes are anyway basically unavoidable in the context of side-channel attacks, fault attacks, failing HW, etc.
This has also been discussed at length last year in a different context: Implicit Rejection in Kyber (google.com)
(To be clear and to avoid confusion: we are *not* proposing to make any changes to the Decapsulation routine itself, or asking about the side-channel protection of z as in the linked thread.)
From what we understand, there is currently no known benefit from implicit rejection over explicit rejection in terms of security reduction.
On the other hand, there are clear practical benefits in being able to abort a protocol as early as possible (for example in real-time of safety-critical systems).
As also touched upon by Simon in the thread above, for protocols involving some kind of key confirmation (e.g., TLS) the “implicit” rejection is anyway not maintained.
If explicit rejection is really to be avoided in a specific context for whatever reason, the return code could of course be discarded (or not implemented at all).
The question is thus: Would it be considered compliant with the specification to indicate success/failure of Decapsulation to the caller?
If so, would you consider including this possibility in the specification?
If not, could you elaborate on your arguments?
Kind regards,
NXP PQC team
--
You received this message because you are subscribed to the Google Groups "pqc-forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pqc-forum+...@list.nist.gov.
To view this discussion on the web visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/AM9PR04MB8161250E8F31DA01C394A277FFCCA%40AM9PR04MB8161.eurprd04.prod.outlook.com.
Hi Mike,
Thanks for the comments.
In the end (virtually) every protocol will react to the implicit rejection one way or another, making it explicit.
Either by having explicit key confirmation, timing out, encrypting with the wrong key, etc.
Perhaps there are counterexamples, but I would expect it’s a clear minority.
So we can disallow reacting to decapsulation failures to try and hang on to implicit rejection, but do we really increase security in scenarios where Kyber is deployed?
KR,
Joost
In the end (virtually) every protocol will react to the implicit rejection one way or another, making it explicit.
Either by having explicit key confirmation, timing out, encrypting with the wrong key, etc.
This makes sense. The only difference that I see is how long it would take to “signal” rejection.
Perhaps there are counterexamples, but I would expect it’s a clear minority.
I’m not aware of any counterexamples.
So we can disallow reacting to decapsulation failures to try and hang on to implicit rejection, but do we really increase security in scenarios where Kyber is deployed?
I tend to agree.
Mike, Peter – from the practical security point of view, what do we gain (besides being able to mark a checkbox on paper that QROM proof looks really nice 😉) from pushing “rejection detection” a few steps down in the protocol? Because nobody is likely to use KEM on its own – it would be a part of some kind of a protocol that inevitably has to determine at some point whether the key is good or not.
Thanks!
To view this discussion on the web visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/AM9PR04MB816182D9CF261A194464042FFFCCA%40AM9PR04MB8161.eurprd04.prod.outlook.com.
To view this discussion on the web visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/7E0071C0-AEE4-4DB3-B6A9-3A8C7E0AF710%40ll.mit.edu.
On Oct 11, 2023, at 10:21 PM, Mike Hamburg <mi...@SHIFTLEFT.ORG> wrote:Hi David,I agree with you that this is the threat, and the Bleichenbacher attack on RSA is a great example.Per https://eprint.iacr.org/2019/590.pdf theorem 4, adding key confirmation is at least as strong as implicit rejection (in the QROM for the hash used to produce the key confirmation, assuming Kyber is almost injective, etc)… but only if the attacker lacks a side channel that shows whether the ciphertext was rejected.I do not think Kyber is like RSA-PKCS #1 v1.5 in this way: it’s more like RSA-OAEP in that valid messages must be produced by a hash function. But as far as I know, that structure alone doesn’t tightly-provably prevent the problem, at least not in the QROM.
To view this discussion on the web visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/C851CAA2-A71B-4F45-8D77-030F992F46E2%40shiftleft.org.
Hi David,
I think your concern is valid, but Kyber is quite different from RSA by virtue of using Fujisaki-Okamoto at all (either implicit or explicit).
Not familiar with the proofs Mike refers to, so cannot comment on them.
But informally, the point of FO in the first place is to reject ciphertexts that were not honestly generated (via Encaps).
So with explicit rejection an adversary can learn either that 1) the ciphertext they provided was not generated via Encaps, which will essentially always happen unless they used Encaps, or 2) the ciphertext they provided was generated via Encaps, in which case they may as well have used Encaps themselves.
I do not see how Bleicherbacher-type attacks are possible in this scenario.
KR,
Joost
To view this discussion on the web visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/01D1FBAC-6076-469B-8AE4-630ADD9C0120%40shiftleft.org.