Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flesh out the extensions story #296

Merged
merged 5 commits into from
Mar 5, 2020
Merged

Flesh out the extensions story #296

merged 5 commits into from
Mar 5, 2020

Conversation

bifurcation
Copy link
Collaborator

Extensions in the CIK were only half of the story. To do things like RTreeKEM or fork/merge as extensions, we need the ability to (1) tell new members that the group is doing something different, and (2) confirm that all group members have the same view of the rules of the road. This PR adds extensions to the GroupInfo object for the first case, and to the Welcome object for the second, and a bunch of explanatory text to make it all work.

One thing this PR does not do is define a way to change extensions in a running group. You could in principle do this by sending new extensions in Commit that could overwrite or add to extensions. But that entails some messy questions (how do you delete an extension in use?), so it is currently left to an extension (heh), or to a group restart.

Depends on #295 to avoid conflicts in GroupInfo changes.

@bifurcation bifurcation mentioned this pull request Feb 5, 2020
@raphaelrobert
Copy link
Member

I think this could also be useful for deniability.


* Set the confirmed transcript hash in the new state to the value of the
`confirmed_transcript_hash` in the GroupInfo.

* Verify the confirmation MAC in the GroupInfo using the derived confirmation
key and the `confirmed_transcript_hash` from the GroupInfo.

# Extensibility
Copy link
Contributor

Choose a reason for hiding this comment

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

This means we need some more text in the IANA considerations about setting up the space.

Copy link
Collaborator

@Bren2010 Bren2010 left a comment

Choose a reason for hiding this comment

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

You've essentially just added extension fields without defining /how/ they'll interact with the protocol. Which tells me they're probably meant to be able to change /anything/ about the protocol. In that case, it needs to be clear that all extensions (outside of CIKs) are effectively mandatory, and that we can't have non-mandatory extensions.


This protocol includes a mechanism for negotiating extension parameters similar
to one in TLS {{RFC8446}}. In TLS, extension negotiation is one-to-one. The
client offers extensions in its ClientHello message, and the server expersses
Copy link
Collaborator

Choose a reason for hiding this comment

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

expresses

# Extensibility

This protocol includes a mechanism for negotiating extension parameters similar
to one in TLS {{RFC8446}}. In TLS, extension negotiation is one-to-one. The
Copy link
Collaborator

Choose a reason for hiding this comment

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

"to the one"
"one-to-one: the"

places:

* In ClientInitKeys, to describe client capabilities and aspects of their
particiation in the group (once in the ratchet tree)
Copy link
Collaborator

Choose a reason for hiding this comment

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

participation

* For each parent of the common ancestor, up to the root of the tree, derive
a new path secret and set the private key for the node to the private key
derived from the path secret. The private key MUST be the private key
that correspondns to the public key in the node.
Copy link
Collaborator

Choose a reason for hiding this comment

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

corresponds

@Bren2010
Copy link
Collaborator

Bren2010 commented Mar 3, 2020

I imagine we also need to define an IANA registry of extensions, designated experts, a private space?

@bifurcation
Copy link
Collaborator Author

Filed #312 for the IANA stuff

draft-ietf-mls-protocol.md Outdated Show resolved Hide resolved

[[ OPEN ISSUE: Should we put bounds on what an extension can change? For
example, should we make an explicit guarantee that as long as you're speaking
MLS 1.0, the format of the ClientInitKey will remain the same? (Analogous to
Copy link
Collaborator

Choose a reason for hiding this comment

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

I think this would be good. Making sure the CIK format doesn't change is all I think you need for backwards-compatibility.

Co-Authored-By: Brendan McMillion <brendan@cloudflare.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

5 participants