I took a look at whether it is practically possible for a client to
"opt-in" to (ostensibly cheaper) non-DHE TLS 1.3 resumption by sending a
"psk_key_exchange_modes" extension consisting of just "psk_ke".

Turns out that at least when the server is OpenSSL, the client is likely
to be sad.

Details below, but my question based on the details is whether, when the
client offers just [psk_ke], servers should generally be willing to go
along and support non-DHE resumption?  For otherwise, clients that
don't also offer "psk_dhe_ke" are punished for their non-conformity.

It seems to me that in many cases, and perhaps by default, servers
should be liberal in this regard, and accept the client's security
posture.  In server-to-server communications (say DNS resolver via ADoT
to DNS authoritative) where "hogging" idle connections is "rude", but
CPU cost and latency are also a concern on both ends, one might want
to use "psk_ke" with PSK lifetimes of up to an hour, but this turns
out to be impractical, either by design, or lack of clarity on default
expected server behaviour.

Comments welcome.  [ The issue is likely to also carry over into QUIC,
but there perhaps keeping somewhat idle "connections" "open" is less of
a concern, and resumption may be less frequent??? ]

Details:

    - Unless the server is *explicitly* configured with a non-default
      option to support psk_ke resumption, an OpenSSL server will
      (incorrectly I believe) still issue NewSessionTickets (2 by
      default):

        https://mailarchive.ietf.org/arch/msg/tls/ACqre4e9-CWiwJrvdOCIDw0rdl4/

            What this text is supposed to mean is that the server
            shouldn't send tickets if it doesn't like the client's
            psk_ke modes. So, say that the client only supports
            psk_dhe_ke and the server only supports psk_ke, then the
            server shouldn't advertise tickets, because future
            resumption will be useless.

    - And of course, they will then be useless for resumption, which
      results in a full handshake, which again (by default) sends two
      useless tickets...  So sending only [psk_ke] to reduce the cost
      of resumption, actually has the opposite effect of completely
      defeating resumption.

    - If the client sends both "psk_ke" and "psk_dhe_ke", OpenSSL
      servers will always choose to do DHE.

So, unless an, e.g. OpenSSL, server is specifically known (oracular
local configuration?) to support "psk_ke", the client must avoid that
choice, making just [psk_ke] essentially impractical.  The client simply
has to accept the CPU cost of asymmetric key agreement on every
resumption, and hope to amortise the cost by keeping connections open
long enough to perform multiple operations, and not do resumption too
often.

-- 
    Viktor.

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

Reply via email to