summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2018-06-13 15:05:04 +0000
committerjsing <>2018-06-13 15:05:04 +0000
commit70f6c28ec4997461a2ea714457e95ada1c2287ef (patch)
treeda8994f3efae63494777101e1c2874396dfd7b32 /src
parent60f21d03f2d8bf7428ce8a6df3877e2f33b2409b (diff)
downloadopenbsd-70f6c28ec4997461a2ea714457e95ada1c2287ef.tar.gz
openbsd-70f6c28ec4997461a2ea714457e95ada1c2287ef.tar.bz2
openbsd-70f6c28ec4997461a2ea714457e95ada1c2287ef.zip
Avoid a timing side-channel leak when generating DSA and ECDSA signatures.
This is caused by an attempt to do fast modular arithmetic, which introduces branches that leak information regarding secret values. Issue identified and reported by Keegan Ryan of NCC Group. ok beck@ tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/dsa/dsa_ossl.c7
-rw-r--r--src/lib/libcrypto/ecdsa/ecs_ossl.c4
2 files changed, 4 insertions, 7 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_ossl.c b/src/lib/libcrypto/dsa/dsa_ossl.c
index 301cdd5095..505ef800dc 100644
--- a/src/lib/libcrypto/dsa/dsa_ossl.c
+++ b/src/lib/libcrypto/dsa/dsa_ossl.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_ossl.c,v 1.31 2018/04/28 14:22:21 tb Exp $ */ 1/* $OpenBSD: dsa_ossl.c,v 1.32 2018/06/13 15:05:04 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -142,11 +142,8 @@ redo:
142 /* Compute s = inv(k) (m + xr) mod q */ 142 /* Compute s = inv(k) (m + xr) mod q */
143 if (!BN_mod_mul(&xr, dsa->priv_key, r, dsa->q, ctx)) /* s = xr */ 143 if (!BN_mod_mul(&xr, dsa->priv_key, r, dsa->q, ctx)) /* s = xr */
144 goto err; 144 goto err;
145 if (!BN_add(s, &xr, &m)) /* s = m + xr */ 145 if (!BN_mod_add(s, &xr, &m, dsa->q, ctx)) /* s = m + xr */
146 goto err; 146 goto err;
147 if (BN_cmp(s, dsa->q) > 0)
148 if (!BN_sub(s, s, dsa->q))
149 goto err;
150 if (!BN_mod_mul(s, s, kinv, dsa->q, ctx)) 147 if (!BN_mod_mul(s, s, kinv, dsa->q, ctx))
151 goto err; 148 goto err;
152 149
diff --git a/src/lib/libcrypto/ecdsa/ecs_ossl.c b/src/lib/libcrypto/ecdsa/ecs_ossl.c
index 4ac140a020..0f594aa86e 100644
--- a/src/lib/libcrypto/ecdsa/ecs_ossl.c
+++ b/src/lib/libcrypto/ecdsa/ecs_ossl.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ecs_ossl.c,v 1.10 2018/04/28 14:17:56 tb Exp $ */ 1/* $OpenBSD: ecs_ossl.c,v 1.11 2018/06/13 15:05:04 jsing Exp $ */
2/* 2/*
3 * Written by Nils Larsch for the OpenSSL project 3 * Written by Nils Larsch for the OpenSSL project
4 */ 4 */
@@ -290,7 +290,7 @@ ecdsa_do_sign(const unsigned char *dgst, int dgst_len,
290 ECDSAerror(ERR_R_BN_LIB); 290 ECDSAerror(ERR_R_BN_LIB);
291 goto err; 291 goto err;
292 } 292 }
293 if (!BN_mod_add_quick(s, tmp, m, order)) { 293 if (!BN_mod_add(s, tmp, m, order, ctx)) {
294 ECDSAerror(ERR_R_BN_LIB); 294 ECDSAerror(ERR_R_BN_LIB);
295 goto err; 295 goto err;
296 } 296 }