On 24/02/2017 16:10, Steffan Karger wrote:

> Hi,
>
> 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?

James


------------------------------------------------------------------------------
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

Reply via email to