From dfe237a93b921ed7dd19222b4f6526498c2e7133 Mon Sep 17 00:00:00 2001 From: Jagadeesh Krishnanjanappa Date: Wed, 22 Aug 2018 17:11:53 +0530 Subject: libgcrypt: CVE-2018-0495 ecc: Add blinding for ECDSA. * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Blind secret D with randomized nonce B. (From OE-Core rev: e05c9b1be8e852293dfc7026f0e3178c3bc5444d) Signed-off-by: Armin Kuster Signed-off-by: Richard Purdie --- .../libgcrypt/files/CVE-2018-0495.patch | 76 ++++++++++++++++++++++ meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb | 1 + 2 files changed, 77 insertions(+) create mode 100644 meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch (limited to 'meta') diff --git a/meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch b/meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch new file mode 100644 index 0000000000..c16bd3abd9 --- /dev/null +++ b/meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch @@ -0,0 +1,76 @@ +From 9010d1576e278a4274ad3f4aa15776c28f6ba965 Mon Sep 17 00:00:00 2001 +From: NIIBE Yutaka +Date: Wed, 13 Jun 2018 15:28:58 +0900 +Subject: [PATCH] ecc: Add blinding for ECDSA. + +* cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Blind secret D with +randomized nonce B. + +-- + +Reported-by: Keegan Ryan +CVE-id: CVE-2018-0495 + +Upstream-Status: Backport [http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=9010d1576e278a4274ad3f4aa15776c28f6ba965] + +Signed-off-by: NIIBE Yutaka +Signed-off-by: Jagadeesh Krishnanjanappa +--- + cipher/ecc-ecdsa.c | 20 ++++++++++++++++++-- + 1 file changed, 18 insertions(+), 2 deletions(-) + +diff --git a/cipher/ecc-ecdsa.c b/cipher/ecc-ecdsa.c +index 1484830b..140e8c09 100644 +--- a/cipher/ecc-ecdsa.c ++++ b/cipher/ecc-ecdsa.c +@@ -50,6 +50,8 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey, + const void *abuf; + unsigned int abits, qbits; + mpi_ec_t ctx; ++ gcry_mpi_t b; /* Random number needed for blinding. */ ++ gcry_mpi_t bi; /* multiplicative inverse of B. */ + + if (DBG_CIPHER) + log_mpidump ("ecdsa sign hash ", input ); +@@ -61,6 +63,15 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey, + if (rc) + return rc; + ++ b = mpi_snew (qbits); ++ bi = mpi_snew (qbits); ++ do ++ { ++ _gcry_mpi_randomize (b, qbits, GCRY_WEAK_RANDOM); ++ mpi_mod (b, b, skey->E.n); ++ } ++ while (!mpi_invm (bi, b, skey->E.n)); ++ + k = NULL; + dr = mpi_alloc (0); + sum = mpi_alloc (0); +@@ -115,8 +126,11 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey, + } + while (!mpi_cmp_ui (r, 0)); + +- mpi_mulm (dr, skey->d, r, skey->E.n); /* dr = d*r mod n */ +- mpi_addm (sum, hash, dr, skey->E.n); /* sum = hash + (d*r) mod n */ ++ mpi_mulm (dr, b, skey->d, skey->E.n); ++ mpi_mulm (dr, dr, r, skey->E.n); /* dr = d*r mod n (blinded with b) */ ++ mpi_mulm (sum, b, hash, skey->E.n); ++ mpi_addm (sum, sum, dr, skey->E.n); /* sum = hash + (d*r) mod n (blinded with b) */ ++ mpi_mulm (sum, bi, sum, skey->E.n); /* undo blinding by b^-1 */ + mpi_invm (k_1, k, skey->E.n); /* k_1 = k^(-1) mod n */ + mpi_mulm (s, k_1, sum, skey->E.n); /* s = k^(-1)*(hash+(d*r)) mod n */ + } +@@ -129,6 +143,8 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey, + } + + leave: ++ mpi_free (b); ++ mpi_free (bi); + _gcry_mpi_ec_free (ctx); + point_free (&I); + mpi_free (x); +-- +2.13.3 + diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb index b36e653a87..9d036c8fb1 100644 --- a/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb +++ b/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb @@ -20,6 +20,7 @@ SRC_URI = "${GNUPG_MIRROR}/libgcrypt/libgcrypt-${PV}.tar.bz2 \ file://0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch \ file://0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch \ file://0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch \ + file://CVE-2018-0495.patch \ " SRC_URI[md5sum] = "cfb0b5c79eab07686b6898160a407139" SRC_URI[sha256sum] = "c8064cae7558144b13ef0eb87093412380efa16c4ee30ad12ecb54886a524c07" -- cgit v1.2.3-54-g00ecf