On Tue, 11 Apr 2023 17:26:25 GMT, Jamil Nimeh <jni...@openjdk.org> wrote:

> This fixes an issue where the key/nonce reuse policy for SunJCE ChaCha20 and 
> ChaCha20-Poly1305 was overly strict in enforcing no-reuse when the Cipher was 
> in DECRYPT_MODE.  For decryption, this should be allowed and be consistent 
> with the AES-GCM decryption initialization behavior.
> 
> - Issue: https://bugs.openjdk.org/browse/JDK-8305091
> - CSR: https://bugs.openjdk.org/browse/JDK-8305822

Here you go:
https://www.rfc-editor.org/rfc/rfc9000.html#name-packet-numbers
> A receiver MUST discard a newly unprotected packet unless it is certain that 
> it has not processed another packet with the same packet number from the same 
> packet number space. Duplicate suppression MUST happen after removing packet 
> protection for the reasons described in [Section 
> 9.5](https://www.rfc-editor.org/rfc/rfc9001#section-9.5) of 
> [[QUIC-TLS](https://www.rfc-editor.org/rfc/rfc9000.html#QUIC-TLS)].

https://www.rfc-editor.org/rfc/rfc9001#section-9.5
> If the recipient of a packet discards packets with duplicate packet numbers 
> without attempting to remove packet protection, they could reveal through 
> timing side channels that the packet number matches a received packet. For 
> authentication to be free from side channels, the entire process of header 
> protection removal, packet number recovery, and packet protection removal 
> MUST be applied together without timing and other side channels.

Additionally check out the header protection section 
https://www.rfc-editor.org/rfc/rfc9001#name-chacha20-based-header-prote:

  header_protection(hp_key, sample):
  counter = sample[0..3]
  nonce = sample[4..15]
  mask = ChaCha20(hp_key, counter, nonce, {0,0,0,0,0})

`sample` is taken from AES-encrypted data, so basically random; there's a 
(minimal) chance that the sample will be the same between unrelated packets, 
and a 100% chance that duplicate packets will have the same sample. Without 
this PR, header protection fails on duplicate samples. With this PR `ChaCha20` 
is usable (in decrypt mode, but both modes produce identical output)

-------------

PR Comment: https://git.openjdk.org/jdk/pull/13428#issuecomment-1553440682

Reply via email to