Thanks Christian,

I think all of the suggested solutions are viable with different tradeoffs. 
Actually, I think it is hard to find special cases where none of the solutions 
work.

>One approach is to encrypt the PSK identifier using the public key of
>the destination. That works nicely if we suppose that the clients have
>somehow acquired that public key, maybe using a setup similar to ECH.
>But it supposes that the encrypted result is reasonably short so it can
>fit in the Client Hello without blowing its size. I am concerned that
>this will not work well using post quantum public keys.

If you distribute the external PSK, I think you can distribute a public key as 
well. If the external PSK is derived that is trickier as the client has to 
fetch it from e.g., DNS. The size of ECIES is 32 bytes for the public key + 
overhead for the tag and a few bytes for any encoding overhead. I don't think 
quantum-resistance should be a excuse to not do anything. Using ECIES is much 
much better than sending the psk identifier in cleartext.

>Another approach would be to use symmetric key cryptography. Of course,
>we cannot really assume that random clients will have access to the
>encryption key chosen by the server. But we could have a system in which
>clients are provisioned with a set of equivalent encrypted identifiers.
>That approach works for Session Resumption Tickets. They are provisioned
>by the server, and the best practice is for client to use them only
>once. The downside is that this encryption typically uses Session Ticket
>Encryption Keys that are short lived and frequently rotated. That's a
>good fit for session resumption, but not so much for long term PSK.

In many systems you can replace the external PSK quite often. In 3GPP the 
external PSK used in TLS are refreshed every week.

>If neither STEK nor public keys are adequate, we could use trial
>encryption. Encrypt the PSK-ID using the PSK, and let the server do
>trial decryption by going through the list of provisioned PSK. Your
>guess as to whether this is acceptable is as good as mine.

You can trial decrypt (symmetic crypto) quite many PSK-ID using the same number 
of cycles as an asymmetric signature. But if the server needs to fetch the PSKs 
from a database it might be problematic.

I think mentioning that you can encrypt the PSK identifier and that the server 
can do trial decryption would be very good additions to Section C.4 of 
RFC8446bis that discusses tracking.

Cheers,
John Preuß Mattsson

From: TLS <tls-boun...@ietf.org> on behalf of Christian Huitema 
<huit...@huitema.net>
Date: Friday, 8 December 2023 at 21:25
To: John Mattsson <john.mattsson=40ericsson....@dmarc.ietf.org>, Russ Housley 
<hous...@vigilsec.com>
Cc: IETF TLS <tls@ietf.org>
Subject: [TLS] Privacy and PSK identifiers (was Re: Call to Move RFC 8773 from 
Experimental to Standards Track)
On 12/8/2023 6:57 AM, John Mattsson wrote:
> That seems like a good start. I think it would be good the TLS WG came
> up with additional guidelines/mechanisms/requirements for doing External
>   PSK in a secure way that does not enable tracking. Using the same
> External PSK identifier for a long time should be discouraged. Maybe ECH
>   is the solution. That would however be outside the scope of RFC 8773.

I spent a lot of time studying a related problem with DNSSD. It is very
hard, and we could only find partial solutions.

One approach is to encrypt the PSK identifier using the public key of
the destination. That works nicely if we suppose that the clients have
somehow acquired that public key, maybe using a setup similar to ECH.
But it supposes that the encrypted result is reasonably short so it can
fit in the Client Hello without blowing its size. I am concerned that
this will not work well using post quantum public keys.

Another approach would be to use symmetric key cryptography. Of course,
we cannot really assume that random clients will have access to the
encryption key chosen by the server. But we could have a system in which
clients are provisioned with a set of equivalent encrypted identifiers.
That approach works for Session Resumption Tickets. They are provisioned
by the server, and the best practice is for client to use them only
once. The downside is that this encryption typically uses Session Ticket
Encryption Keys that are short lived and frequently rotated. That's a
good fit for session resumption, but not so much for long term PSK.

If neither STEK nor public keys are adequate, we could use trial
encryption. Encrypt the PSK-ID using the PSK, and let the server do
trial decryption by going through the list of provisioned PSK. Your
guess as to whether this is acceptable is as good as mine.

-- Christian Huitema

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to