Fix SCA vulnerability when using PVK and MSBLOB key formats
authorCesar Pereida Garcia <cesar.pereidagarcia@tut.fi>
Wed, 14 Aug 2019 07:17:06 +0000 (10:17 +0300)
committerMatt Caswell <matt@openssl.org>
Tue, 27 Aug 2019 08:13:34 +0000 (09:13 +0100)
This commit addresses a side-channel vulnerability present when
PVK and MSBLOB key formats are loaded into OpenSSL.
The public key was not computed using a constant-time exponentiation
function.

This issue was discovered and reported by the NISEC group at TAU Finland.

Reviewed-by: Nicola Tuveri <nic.tuv@gmail.com>
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9587)

(cherry picked from commit 724339ff44235149c4e8ddae614e1dda6863e23e)

crypto/pem/pvkfmt.c

index e39c2438140d05e0da9b6f29d248cb29fce5e0ff..609e3ad9ca417e7b7efa57777939a3d5ce1d9901 100644 (file)
@@ -274,6 +274,9 @@ static EVP_PKEY *b2i_dss(const unsigned char **in,
         if (!read_lebn(&p, 20, &priv_key))
             goto memerr;
 
+        /* Set constant time flag before public key calculation */
+        BN_set_flags(priv_key, BN_FLG_CONSTTIME);
+
         /* Calculate public key */
         pub_key = BN_new();
         if (pub_key == NULL)