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

Design team output #99

Merged
merged 53 commits into from
May 7, 2024
Merged

Design team output #99

merged 53 commits into from
May 7, 2024

Conversation

tfpauly
Copy link
Collaborator

@tfpauly tfpauly commented Jan 10, 2024

Creating a PR for the output of the design team, to add a way to encrypt packets in forwarded mode.

Rendered view of this PR
Rendered diff with main

bemasc and others added 30 commits October 11, 2023 11:08
Co-authored-by: Benjamin M. Schwartz <ben@bemasc.net>
Co-authored-by: David Schinazi <DavidSchinazi@users.noreply.github.com>
fixes #94 

This PR creates two registries, however, not sure we really need the parameter names one?

Both registrations are proposed with Specification Requires Policy but I could also see reasons to actually go for IETF Review. Any views?

Following the model in https://www.iana.org/assignments/http-parameters/http-parameters.xhtml both registries have a "Description" and "Notes" section, however, not sure we really need those.
IANA registries for parameter names and transform names
Co-authored-by: David Schinazi <DavidSchinazi@users.noreply.github.com>
Co-authored-by: Tommy Pauly <tpauly@apple.com>
Co-authored-by: Benjamin M. Schwartz <ben@bemasc.net>
Co-authored-by: Tommy Pauly <tpauly@apple.com>
Co-authored-by: David Schinazi <DavidSchinazi@users.noreply.github.com>
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved
tfpauly and others added 3 commits January 24, 2024 08:52
Co-authored-by: mirjak <mirja.kuehlewind@ericsson.com>
Co-authored-by: Benjamin M. Schwartz <ben@bemasc.net>
Co-authored-by: David Schinazi <DavidSchinazi@users.noreply.github.com>
tfpauly and others added 3 commits January 24, 2024 08:57
Co-authored-by: Benjamin M. Schwartz <ben@bemasc.net>
Co-authored-by: mirjak <mirja.kuehlewind@ericsson.com>
tfpauly and others added 3 commits January 24, 2024 08:58
Co-authored-by: Benjamin M. Schwartz <ben@bemasc.net>
Co-authored-by: mirjak <mirja.kuehlewind@ericsson.com>
@@ -203,6 +204,7 @@ Each client <-> proxy HTTP stream MUST be mapped to a single target-facing socke

Multiple streams can map to the same target-facing socket, but a
single stream cannot be mapped to multiple target-facing sockets.
Each stream MUST also be associated with a single Packet Transform.

Choose a reason for hiding this comment

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

Here, shouldn't we map a stream to a mode (proxying / forwarding)? Then we can say that if a given stream is associated to the forwarding mode, then a single packet transform must be mapped to this stream.

Copy link
Contributor

Choose a reason for hiding this comment

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

Technically, forwarding mode is always additional to proxying mode. The long header packets have to be sent in proxying mode anyway, so proxying mode is available and could be used for some short header packets as well.

Choose a reason for hiding this comment

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

Agreed, then implicitly, mapping to "forwarding" means that long header packets are proxyed, and short header packets are forwarded.

draft-ietf-masque-quic-proxy.md Outdated Show resolved Hide resolved

Packet transforms are identified by an IANA-registered name, and negotiated in
the HTTP headers (see {{client-behavior}}). This document defines two initial
transforms: "null" and "scramble".

Choose a reason for hiding this comment

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

In the light of an issue filled by Martin Thomson, I agree that the "null" transform can be named "identity transform" to adopt a similar naming as in mathematics and cryptography.

the HTTP headers (see {{client-behavior}}). This document defines two initial
transforms: "null" and "scramble".

> QUESTION: Should one or both of these be Mandatory To Implement?

Choose a reason for hiding this comment

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

I am in favor of making both transforms mandatory to implement. The null / identity transform is straightforward to implement as soon as a proxy supports forwarded mode, and I think making the scramble transform mandatory allows clients willing to use a proxy using the forwarded mode to benefit from a minimal security level.

A side question that this question triggered: Are we willing to provide a mechanisms to negotiate transform between the client and proxy?

Copy link
Contributor

Choose a reason for hiding this comment

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

Mandatory for whom? I find the idea of making them both mandatory for both clients and proxies to be slightly strange. Perhaps you are thinking of making them both mandatory for proxies, so that clients can choose to offer only one?

that crossed the forwarder, providing a compact proof that a specific client
was communicating to a specific target.

Use of this transform is NOT RECOMMENDED if "scramble" can be deployed.

Choose a reason for hiding this comment

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

If we agree that the scramble method is mandatory to implement, then, why should we keep the null / identity transform?

Copy link
Contributor

Choose a reason for hiding this comment

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

I can certainly imagine that we say "scramble" is MTI for proxies, but clients can choose whether they want the extra protection.

Choose a reason for hiding this comment

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

If we let clients the choice not to use the additional protection, then I suggest making scramble and null/identity MTI by the proxies, and recommend that clients use scramble or alternative method of their choice to protect their communication.

@knekritz
Copy link

If I understand correctly, the scramble transform can be defeated by a single injected packet (ie with duplicated iv bytes, leading to key/iv reuse with aes-ctr). I think we should explicitly mention this in the security considerations, as this is both lower effort than most active attacks, and difficult to detect.

Expand on active attack differences
@tfpauly tfpauly merged commit 9eed730 into main May 7, 2024
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants