Skip to content

Forbid key share reuse#1410

Open
ekr wants to merge 3 commits intomainfrom
must_not_reuse_keys
Open

Forbid key share reuse#1410
ekr wants to merge 3 commits intomainfrom
must_not_reuse_keys

Conversation

@ekr
Copy link
Contributor

@ekr ekr commented Mar 16, 2026

Per discussion on the list. Note that I put this in the section on KeyShares and then removed the text about the impact of reuse on tracking, as it is no longer applicable.

if one is violated.

Clients and Servers MUST NOT reuse a key share for multiple
connections. Because {{RFC8446}} permitted reuse, receiving
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What exactly do you mean by receiving implementations?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementations that receive key shares. I believe this to be adequately clear.

@muhammad-usama-sardar
Copy link
Contributor

Thread for reference and easier finding in future

Copy link
Contributor

@martinthomson martinthomson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very good. Ship it.

Copy link

@thomwiggers thomwiggers left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The proposed changes are good for the main body. I do think we would do well to consider Nick Sullivan's clarification on the list:

Just to be clear about the scope of this change, it only prevents literal reuse of the same share. It does not rule out implementations generating related shares from shared secret material since that is not visible to the client. This change enforces non-reuse, not independence of key shares.

This is actually an important detail when considering security modeling of TLS 1.3. Putting this clarification that we're still not truly mandating ephemeral key exchange in the security considerations may be useful for future analysts.

@ekr
Copy link
Contributor Author

ekr commented Mar 17, 2026

Well, we don't take a position on how the key shares are generated at all, other than to say:

The key_exchange values for each KeyShareEntry MUST be generated independently.

Separately, I don't think it's helpful to use the terms "ephemeral" and "static". Historically, in TLS, "ephemeral" really meant that the key was explicit in the handshake rather than embedded in a credential. For example, TLS 1.0's "ephemeral RSA" keys were routinely reused.

@thomwiggers
Copy link

thomwiggers commented Mar 18, 2026

I am willing to bet that if I ask 10 cryptography academics what "generated independently" means, all of them will assume you are referring to ephemeral key exchange.

On the other hand maybe it's better to not have "this doesn't actually mean you need to do ephemeral key exchange" in the document at all, to avoid giving people ideas.

@ekr
Copy link
Contributor Author

ekr commented Mar 18, 2026

I am willing to bet that if I ask 10 cryptography academics what "generated independently" means, all of them will assume you are referring to ephemeral key exchange.

This text doesn't refer to the relationship between KeyShares in distinct connections at all. It refers to the relationship between the KeyShares in the same connection.

@thomwiggers
Copy link

Ah right, that was from another section of the draft. Thanks for the clarification.

@muhammad-usama-sardar
Copy link
Contributor

On the other hand maybe it's better to not have "this doesn't actually mean you need to do ephemeral key exchange" in the document at all, to avoid giving people ideas.

@thomwiggers I don't find the text you quote anywhere in 8446bis or on the list. Could you please clarify which document and section you are referring to?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants