On 25-02-17 07:04, James Yonan wrote: > On 24/02/2017 16:10, Steffan Karger wrote: >> On 24-02-17 22:28, James Yonan wrote: >>> On 24/02/2017 02:40, Steffan Karger wrote: >>>> On 23-02-17 22:41, James Yonan wrote: >>>>> On 23/02/2017 01:22, Steffan Karger wrote: >>>>>> On 22-02-17 19:48, James Yonan wrote: >>>>>>> mbedTLS 2 has a new feature that allows rejection of certificates if the >>>>>>> key size is too small or the signing hash is weak. >>>>>>> >>>>>>> The feature is controlled via struct mbedtls_x509_crt_profile. >>>>>>> >>>>>>> For example, you could specify that certificates must be at least 2048 >>>>>>> bits and use a SHA-2 signing alg. >>>>>>> >>>>>>> Wondering if we should enable this via an option, or tie it into the >>>>>>> existing tls-version-min. >>>>>>> >>>>>>> The granular approach would be to have specific options for each limit, >>>>>>> such as ssl-min-key-size, ssl-require-sha2 >>>>>>> >>>>>>> The bundled approach would be to take an existing option such as >>>>>>> tls-version-min and add additional constraints onto it. For example, if >>>>>>> tls-version-min is 1.2 or higher, then also require minimum key size to >>>>>>> be 2048 and certificate signing hash to be SHA-2. >>>>>> OpenVPN 2.4 currently just uses mbed TLS' default profile, and we tell >>>>>> people to use stronger keys (RSA 2048+ / ECDSA) or a stronger hash >>>>>> function (SHA1+) if that causes trouble. >>>>>> >>>>>> If we are going to make this configurable, I think we should separate it >>>>>> from tls-version-min. The main use case I see for using a lower >>>>>> security setting would be an out-of-the-admins-control CA, or something >>>>>> like (old) smart cards that don't support RSA-2048. I wouldn't want to >>>>>> block people from enforcing TLS 1.2, because their smart card is crappy. >>>>>> >>>>>> So I think we'll have to add the relevant --tls-rsa-key-size-min, >>>>>> --tls-curves (could replace --ecdh-curves), --tls-digests options. If >>>>>> we want to make it configurable, that is. >>>>> I think it needs to be configurable to allow for transitions to stronger >>>>> keys. >>>>> >>>>> For naming, how about --tls-rsa-key-size-min and --tls-cert-sign-min? >>>> Adding 'cert' in the option name is very good, it removes confusion >>>> between the TLS transcript digest and the cert digest. >>>> >>>> 'sign' reads like 'signature', while RSA (or ECDSA) is the signature >>>> algorithm, but 'SHAx' is the certificates message digest algorithm. >>>> >>>> So, I raise you '--tls-cert-digest-min' (or '--tls-cert-md-min'?). >>>> >>>>> For --tls-cert-sign-min, the choices could be "none" (anything allowed >>>>> by the underlying SSL lib) or "sha2" (requiring sha256 or higher). >>>> This makes sense for the SHA family, but 'or higher' becomes tricky when >>>> e.g. BLAKE2 enters the arena. I'm uncertain whether we should worry >>>> about that. >>> I'm still somewhat on the fence about making these options granular vs. >>> bundled. >> Yeah, I too find it hard to decide what the best approach is here. >> Being involved in OpenVPN the past few years has definitely learned me >> the importance of choosing the options right... >> >>> If we do granular, then we need to deal with every option, i.e. rsa key >>> size, cert digests, curves, etc. and we need to establish defaults and a >>> notion of "minimum" which is problematic as you mention above when new >>> algs (such as BLAKE2 as you mention above) enter the mix and its not >>> clear where to place them on the continuum. Or avoid minimums by simple >>> enumerating the whole whitelist. But this can become unwieldy with so >>> many options. >>> >>> Using the bundled approach would be more like the mbedTLS cert profiles >>> approach where you have a default that allows everything reasonable, and >>> a somewhat stricter profile that requires RSA key sizes >= 2048 and >>> disallows SHA1. If we use this approach with OpenVPN, then we could >>> have an option --tls-cert-profile <profile-name>. We would of course >>> need to define named profiles for this to work. >> Something like --tls-cert-profile sounds good, I think. It's decoupled >> from --tls-version-min (which I think is good), but still doesn't offer >> a gazillion combinations of configurations. We good go for e.g. >> 'legacy', 'default', 'suiteb' and perhaps something like 'paranoid'? >> We'd have to keep actively monitoring cryptographic advances, and kick >> out algs when they become deprecated and/or broken though. >> > > That sounds good. So how about legacy allows 1024-bit RSA keys and > sha1, default requires 2048-bit keys and sha256 or higher? > I'd say so. Something like:
legacy: RSA 1024+, SHA1+, all curves default: RSA 2048+, SHA2+, all curves suiteb: no RSA, SHA256/SHA384, P-256/P-384 As long as we kick anything that's deprecated out of 'default', that should probably suffice. -Steffan ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel