Query minimum RSA key size?

Felipe Gasper felipe at felipegasper.com
Mon Sep 26 15:50:11 UTC 2022



> On Sep 26, 2022, at 11:47, Viktor Dukhovni <openssl-users at dukhovni.org> wrote:
> 
> On Mon, Sep 26, 2022 at 10:46:40AM -0400, Felipe Gasper wrote:
> 
>>> The security levels are documented.  You can set the security level
>>> in the cipher string:
>>> 
>>>   DEFAULT:@SECLEVEL=1
>>> 
>>> or via the API.
>> 
>> Ahh, OK. Indeed, when I set that as the cipher string the error goes away. Thank you!
> 
> You can, if you wish, change the default security level in openssl.cnf.
> IIRC the default from the upstream OpenSSL software is 1.  If your
> system default is 2 or higher, that was done by your OS package
> maintainers.
> 
>> I see that the API exposes SSL_CTX_get_security_level(); is that the
>> best way to determine minimum RSA key size, or would there be anything
>> more explicit?
> 
> The documentation for that function reads in part:
> 
>    Level 0
>        Everything is permitted. This retains compatibility with
>        previous versions of OpenSSL.
> 
>    Level 1
>        The security level corresponds to a minimum of 80 bits of
>        security. Any parameters offering below 80 bits of security are
>        excluded. As a result RSA, DSA and DH keys shorter than 1024
>        bits and ECC keys shorter than 160 bits are prohibited. Any
>        cipher suite using MD5 for the MAC is also prohibited.  Any
>        cipher suites using CCM with a 64 bit authentication tag are
>        prohibited. Note that signatures using SHA1 and MD5 are also
>        forbidden at this level as they have less than 80 security bits.
>        Additionally, SSLv3, TLS 1.0, TLS 1.1 and DTLS 1.0 are all
>        disabled at this level.
> 
>    Level 2
>        Security level set to 112 bits of security. As a result RSA, DSA
>        and DH keys shorter than 2048 bits and ECC keys shorter than 224
>        bits are prohibited. In addition to the level 1 exclusions any
>        cipher suite using RC4 is also prohibited. Compression is
>        disabled.
> 
>    Level 3
>        Security level set to 128 bits of security. As a result RSA, DSA
>        and DH keys shorter than 3072 bits and ECC keys shorter than 256
>        bits are prohibited. In addition to the level 2 exclusions
>        cipher suites not offering forward secrecy are prohibited.
>        Session tickets are disabled.
> 
>    Level 4
>        Security level set to 192 bits of security. As a result RSA, DSA
>        and DH keys shorter than 7680 bits and ECC keys shorter than 384
>        bits are prohibited. Cipher suites using SHA1 for the MAC are
>        prohibited.
> 
>    Level 5
>        Security level set to 256 bits of security. As a result RSA, DSA
>        and DH keys shorter than 15360 bits and ECC keys shorter than
>        512 bits are prohibited.
> 
> Levels 4 and 5 are tantamount to making RSA and DSA unavailable.  Even
> level 3 is too distruptive for interoperable use on the public Internet.
> 
> As you observed, Level 2 disables 1024-bit RSA.  The symmetric
> equivalent bit strength of a particular public key can be queried via:
> EVP_PKEY_security_bits(3):
> 
>    EVP_PKEY_security_bits() returns the number of security bits of the
>    given pkey, bits of security is defined in NIST SP800-57.

Thank you!

It sounds like I’ll still need to hard code the correlation between security level and minimum security bits (i.e., as I see OpenSSL does in multiple locations), but that’s pretty trivial.

cheers,
-Felipe




More information about the openssl-users mailing list