[ The devel list majordomo is not doing too well just now, so please
  pardon my use of postfix-users instead. ]

In TLS 1.3 the key exchange parameters, whether elliptic curve (ECDHE or
ECX, where ECX is one of X25519 or X448) or finite-field (FFDHE), are always
from a negotiated list of well-known groups (no ad-hoc key exchange
parameters).

--- OpenSSL 1.1.1

In OpenSSL 1.1.1 the TLS 1.3 implementation supports only EC key exchange
(ECDHE and ECX), the finite-field (FFDHE) groups are available only for TLS
1.0–1.2.  The APIs for configuring FFDHE parameters and ECDHE curves are
separate and setting the supported EC curve list does not affect the choice
of or the availability of FFDHE groups (server-side only).

When TLS 1.2 is negotiated and "auto" FFDHE group selection is not preëmpted
by configuring an explicit set of DH parameters (in Postfix that would be
via smtpd_tls_dh1024_param_file), the server selects one of the "standard"
(https://www.rfc-editor.org/rfc/rfc7919#appendix-A) FFDHE groups based on
the configured security level, the strength of the certificate private key,
or else the symmetric cipher.

--- OpenSSL 3.0

OpenSSL 3.0 adds support for FFDHE in TLS 1.3.  An SSL_CTX or SSL handle now
has a single "groups" element that stores the combined list of supported EC
and FFDHE code points.  The legacy API for setting the EC curve list is now
an alias for setting this combined list.

This means that applications not tweaked for OpenSSL 3.0 that explicitly set
the EC curve list to just some list of EC curves end up disabling the newly
supported FFDHE groups in TLS 1.3.  Whether this is a feature or a bug, it
is certainly not expected.

--- Postfix

The default list of EC groups compiled into Postfix 3.7 and later is:

    tls_eecdh_auto_curves = X25519 X448 prime256v1 secp521r1 secp384r1

this makes no mention of FFDHE groups, so they remain disabled in TLS
1.3 even with OpenSSL 3.0 where they are by default supported.

If we wish to interoperate with hypothetical SMTP servers or clients that
only support FFDHE (perhaps some emergency makes it necessary to disable the
EC groups), we need to ask OpenSSL to instead enable something along the
lines of:

    X25519 X448 prime256v1 secp521r1 secp384r1 ffdhe2048 ffdhe3072

[ I'm disinclined to by default enable FFDHE at 4096 bits and up, these
  are CPU hogs with no clear security benefit. ]

But doing this in a backwards-compatible way, that still works for any
users who were brave enough to set "tls_eecdh_auto_curves" expecting
to just limit the EC groups, means that we'll need two parameters with
the below defaults:

    tls_eecdh_auto_curves = X25519 X448 prime256v1 secp521r1 secp384r1
    tls_ffdhe_auto_groups = ffdhe2048 ffdhe3072

When Postfix is linked with OpenSSL 3.0, the two lists will be merged
together.

Any comments or questions?

-- 
    Viktor.

Reply via email to