Subject: Re: [Network-tokens] [TLS] Network Tokens I-D and TLS / ESNI

From: "Yiannis Yiakoumis" <[email-masked]>
Date: Fri, 26 Jun 2020 05:34:12 +0000

(cross-posting to network-tokens@ as this is the first related topic - apologies for any duplicates)

Hi Erik,

Thanks for the comments. That's a good point, and wanted to clarify the reasoning around binding fields in general, as well as  binding tokens to IP addresses specifically.

Unlike access and security tokens, network tokens are not protected by a secure TLS connection and can be read by any intermediary node. Therefore, they are open to replay attacks, and unless  used in a fully trusted environment, one should take measures against such attacks. There are two main approaches here:

* Limit a token's lifetime, to make replay attacks hard. The extreme here is to make tokens single use (e.g., through a nonce), and reject tokens with previously seen nonces (within a time window).

* Bind the token to a field that limits the scope it can be used (e.g., a user, a device, a set of exit gateways, etc). The network should be able to separately verify that the token is used within this scope. A binding field can be in an IP address, an IMSI, or any other field the network operator may use to limit the scope of a token.

Note that the binding value matters only at the point of enforcement ( the place where the network checks the scope). It doesn't play any role on the client, the server, or other network nodes.  Moreover, when tokens are encrypted, the binding field itself is not visible to anyone other than the network that issued the token, which should cover privacy concerns.

Two use cases where binding tokens to IP addresses should be fine are i) when users (a home or a mobile subscriber) are assigned a static IP address ( or a DHCP lease that lasts beyond a token's expiration time), and ii) for public IP addresses. Consider the following scenario:

home device → home NAT → operator network (static IP addresses) → operator NAT → Internet .

Despite multiple NATs, the operator can bind the token to the IP address it assigns to the modem and not worry about the downstream and upstream NAT.

As you mentioned, there will be cases where IP binding won't work, either because the endpoint that gets the token doesn't have an assigned IP address, because the enforcement point is behind a NAT, or because of heavy use of proxies etc. In such cases one could bind tokens to a different field, or use short-lived tokens and/or nonces to prevent replay attacks. The overall benefit of binding tokens to certain fields is that they can have a longer lifetime and require less state in the network.

Does this address your concern? Also, any ideas/references on how common it is to have static/long-leased IP addresses in different scenarios (e.g., residential networks and mobile networks)?

Thanks,

Yiannis

On Thu, Jun 25, 2020 at 4:29 PM, Erik Nygren < [email-masked] > wrote:

> 
> One quick comment is that binding tokens to IP addresses is strongly
> counter-recommended.
> 
> It doesn't survive NATs or proxies, mobility, and it is especially
> problematic in IPv6+IPv4 dual-stack environments.
> 
> (Even in IPv6-only, privacy addressing causes problems here.)  Even if you
> have a way to convert tokens over
> 
> for your set of IP addresses (eg, to deal with dual-stack) that still may
> not help enough with NAT environments.
> 
> 
> 
> Erik
> 
> 
> 
> 
> On Thu, Jun 25, 2020 at 4:29 PM Yiannis Yiakoumis < yiannis@ selfienetworks.
> com ( [email-masked] ) > wrote:
> 
> 
>> Hi all,
>> 
>> 
>> 
>> I wanted to briefly introduce network tokens ( https://networktokens.org )
>> into this list, how they relate with TLS and ESNI, and kindly ask anyone
>> that is interested to share feedback and join the discussion.
>> 
>> 
>> 
>> Network tokens is a method for endpoints to explicitly and securely
>> coordinate with networks about how their traffic is treated. They are
>> inserted by endpoints in existing protocols, interpreted by trusted
>> networks, and may be signed or encrypted to meet security and privacy
>> requirements. Network tokens provide a means for network operators to
>> expose datapath services (such as a zero-rating service, a user-driven QoS
>> service, or a firewall whitelist), and for end users and application
>> providers to access such services. Network tokens are inspired and derived
>> by existing security tokens (like JWT and CWT), borrowing several of their
>> security and privacy properties, and adjusting them for use in a
>> networking context.
>> 
>> 
>> 
>> There are two ways that network tokens relate with TLS:
>> 
>> * They can support ESNI adoption: in a world where ESNI is widely adopted,
>> network tokens can enable use cases where endpoint-network coordination is
>> required, without having to go back to plaintext SNI that everyone can
>> read.
>> 
>> * Network tokens are embedded as TLS handshake extensions (among others).
>> 
>> We are shooting for a BoF in November, and are very much interested into
>> feedback around the concept, use cases, what we need to do to make network
>> tokens adopted as a TLS handshake extension, and folks that are interested
>> to get involved in the effort!
>> 
>> 
>> 
>> Links to an IETF I-D, a mailing list, and initial implementation are
>> available at https:/ / networktokens. org ( https://networktokens.org/ ).
>> 
>> 
>> 
>> Best,
>> 
>> Yiannis
>> 
>> 
>> =====================
>> 
>> Yiannis Yiakoumis
>> Co-Founder & CEO
>> 
>> https:/ / selfienetworks. com ( https://selfienetworks.com ) |
>> +1-650-644-7857
>> 
>> 
>> 
>> _______________________________________________
>> TLS mailing list
>> TLS@ ietf. org ( [email-masked] )
>> https:/ / www. ietf. org/ mailman/ listinfo/ tls (
>> https://www.ietf.org/mailman/listinfo/tls )
> 
> 
>

---

From: "Yiannis Yiakoumis" <[email-masked]>
Date: Fri, 26 Jun 2020 17:16:25 +0000

On Fri, Jun 26, 2020 at 7:29 AM, Christian Huitema < [email-masked] > wrote:

> 
> 
> 
> On 6/25/2020 11:11 PM, Melinda Shore wrote:
> 
> 
> 
>> 
>> 
>> On 6/25/20 3:29 PM, Erik Nygren wrote:
>> 
>> 
>> 
>>> 
>>> 
>> There's been a bunch of past work done developing similar sorts of
>> protocols, and for what it's worth I wrote up a mechanism for using
>> address tags and address rewrites, but unfortunately Cisco decided to
>> patent it. Anyway, there are ways of dealing with this problem that don't
>> require binding the address to the token ("all technical problems can be
>> solved by introducing a layer of indirection").
>> 
>> 
>> 
> 
> 
> 
> There is also an interesting privacy issue. The token is meant to let a
> provider identify some properties of the connection. I suppose there are
> ways to do that without having it become a unique identifier that can be
> tracked by, well, pretty much everybody. But you have better spell out
> these ways.
> 
> 
> 
> 

You are right that for the duration of a token, one could use it to identify an endpoint (either application or most likely a combination of user/application). Tokens expire and intermediary nodes cannot correlate tokens with each other as they are encrypted. So tracking cannot happen across different tokens (of the same user), or between token-enabled and non-token-enabled traffic. I guess similar type of tracking happens when users are not behind a NAT and their IP address can be used to track them. Would it make sense to have the user add a random value to a token, and then encrypt it with the network's public key, so that each token becomes unique and cannot be tracked. Would that address the privacy concerns better?

> 
> 
> 
> Then, there are potential interactions with ESNI/ECH. The whole point of
> ECH is to keep private extensions private. The token extension would need
> to be placed in the outer envelope, which is public but does not expose
> seemingly important information like the SNI or the ALPN.
> 
> 
> 
> 

Ah, I was not aware that ESNI can now include all CH extensions - thanks for the pointer. Yes, the token would have to stay on the outer envelope so the network can process it. The main idea is you can encrypt everything that is client-server specific, and just keep a token to explicitly exchange information with trusted networks.

> 
> 
> 
> There are also implications for QUIC, in which the TLS data is part of an
> encrypted payload. The encryption key of the TLS carrying initial packets
> is not secret in V1, but it might well become so in a future version.
> 
> 
> 
> 

Haven't looked into QUIC yet, but is on the list of things to do. If anyone is interested to help us explore this, please let me know.

> -- Christian Huitema

---

From: Christian Huitema <[email-masked]>
Date: Fri, 26 Jun 2020 10:42:36 -0700

On 6/26/2020 10:16 AM, Yiannis Yiakoumis wrote:
>
>
>
> On Fri, Jun 26, 2020 at 7:29 AM, Christian Huitema
> <[email-masked] <mailto:[email-masked]>> wrote:
>
>             One quick comment is that binding tokens to IP addresses
>             is strongly counter-recommended.
>             It doesn't survive NATs or proxies, mobility, and it is
>             especially problematic in IPv6+IPv4 dual-stack environments.
>
>         There's been a bunch of past work done developing similar
>         sorts of protocols, and for what it's worth I wrote up a
>         mechanism for using address tags and address rewrites, but
>         unfortunately Cisco decided to patent it. Anyway, there are
>         ways of dealing with this problem that don't require binding
>         the address to the token ("all technical problems can be
>     There is also an interesting privacy issue. The token is meant to
>     let a provider identify some properties of the connection. I
>     suppose there are ways to do that without having it become a
>     unique identifier that can be tracked by, well, pretty much
>     everybody. But you have better spell out these ways.
>
>
> You are right that for the duration of a token, one could use it to
> identify an endpoint (either application or most likely a combination
> of user/application). Tokens expire and intermediary nodes cannot
> correlate tokens with each other as they are encrypted. So tracking
> cannot happen across different tokens (of the same user), or between
> token-enabled and non-token-enabled traffic. I guess similar type of
> tracking happens when users are not behind a NAT and their IP address
> can be used to track them. Would it make sense to have the user add a
> random value to a token, and then encrypt it with the network's public
> key, so that each token becomes unique and cannot be tracked. Would
> that address the privacy concerns better?

That would certainly be better. The basic rule is that any such
identifier should be used only once. Pretty much the same issue as the
session resume tickets.

>
>     Then, there are potential interactions with ESNI/ECH. The whole
>     point of ECH is to keep private extensions private. The token
>     extension would need to be placed in the outer envelope, which is
>     public but does not expose seemingly important information like
>     the SNI or the ALPN.
>
>
> Ah, I was not aware that ESNI can now include all CH extensions -
> thanks for the pointer. Yes, the token would have to stay on the outer
> envelope so the network can process it. The main idea is you can
> encrypt everything that is client-server specific, and just keep a
> token to explicitly exchange information with trusted networks. 
>
>     There are also implications for QUIC, in which the TLS data is
>     part of an encrypted payload. The encryption key of the TLS
>     carrying initial packets is not secret in V1, but it might well
>     become so in a future version.
>
>
> Haven't looked into QUIC yet, but is on the list of things to do. If
> anyone is interested to help us explore this, please let me know.

You may want to have that discussion in the QUIC WG. If you are building
some kind of QoS service, you probably want it to work with QUIC too.

-- Christian Huitema