[crypto/ec] for ECC parameters with NULL or zero cofactor, compute it
authorBilly Brumley <bbrumley@gmail.com>
Mon, 2 Sep 2019 12:02:30 +0000 (15:02 +0300)
committerMatt Caswell <matt@openssl.org>
Thu, 5 Sep 2019 09:21:04 +0000 (10:21 +0100)
commitb783beeadf6b80bc431e6f3230b5d5585c87ef87
tree2d89ea92547a26f7a8aa21dabf1a82ca724e6c28
parent46c428d73633bc68377a3a425f22313584999365
[crypto/ec] for ECC parameters with NULL or zero cofactor, compute it

The cofactor argument to EC_GROUP_set_generator is optional, and SCA mitigations for ECC currently use it. So the library currently falls back to very old SCA-vulnerable code if the cofactor is not present.

This PR allows EC_GROUP_set_generator to compute the cofactor for all curves of cryptographic interest. Steering scalar multiplication to more SCA-robust code.

This issue affects persisted private keys in explicit parameter form, where the (optional) cofactor field is zero or absent.

It also affects curves not built-in to the library, but constructed programatically with explicit parameters, then calling EC_GROUP_set_generator with a nonsensical value (NULL, zero).

The very old scalar multiplication code is known to be vulnerable to local uarch attacks, outside of the OpenSSL threat model. New results suggest the code path is also vulnerable to traditional wall clock timing attacks.

CVE-2019-1547

Reviewed-by: Nicola Tuveri <nic.tuv@gmail.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9827)
crypto/ec/ec_lib.c