cloudflare / cloudflare/quiche

ClientHello not identical when Retry is received

Open
#1,375 3 comments 3 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
11.8k
Forks
1.1k
Avg merge
21h 9m
Merged PRs (30d)
6

Description

This originates from a Wireshark bug report: https://gitlab.com/wireshark/wireshark/-/issues/18757.

When the quiche client receives a Retry packet, it resends the ClientHello. According to the standard, this new ClientHello has to be the same as the first one, but it isn't, as the 32 random bytes are different.

> From [RFC 9000](https://www.rfc-editor.org/rfc/rfc9000.html#section-17.2.5.3):
>
> Other than updating the Destination Connection ID and Token fields, the Initial packet sent by the client is subject to the same restrictions as the first Initial packet. A client MUST use the same cryptographic handshake message it included in this packet. **A server MAY treat a packet that contains a different cryptographic handshake message as a connection error or discard it.** Note that including a Token field reduces the available space for the cryptographic handshake message, which might result in the client needing to send multiple Initial packets.
> A client MUST NOT reset the packet number for any packet number space after processing a Retry packet.

Contributor guide

Open the contributing guide

Research direction

No file or test is named; start by tracing the client’s Retry-packet handling and the code that constructs the initial ClientHello, using RFC 9000 as the reference. Done means the resent ClientHello’s cryptographic handshake message, including its random bytes, matches the first one after Retry processing while packet-number behavior remains compliant.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.