openssl/ssl
David Benjamin 5b8fa431ae Make RSA key exchange code actually constant-time.
Using RSA_PKCS1_PADDING with RSA_private_decrypt is inherently unsafe.
The API requires writing output on success and touching the error queue
on error. Thus, although the padding check itself is constant-time as of
294d1e36c2, and the logic after the
decryption in the SSL code is constant-time as of
adb46dbc6d, the API boundary in the middle
still leaks whether the padding check succeeded, giving us our
much-loved Bleichenbacher padding oracle.

Instead, PKCS#1 padding must be handled by the caller which uses
RSA_NO_PADDING, in timing-sensitive code integrated with the
Bleichenbacher mitigation. Removing PKCS#1 padding in constant time is
actually much simpler when the expected length is a constant (and if
it's not a constant, avoiding a padding oracle seems unlikely), so just
do it inline.

Signed-off-by: Kurt Roeckx <kurt@roeckx.be>
Reviewed-by: Rich Salz <rsalz@openssl.org>

GH: #1222
2016-06-21 20:55:54 +02:00
..
record Useless header include of openssl/rand.h 2016-06-18 16:30:24 -04:00
statem Make RSA key exchange code actually constant-time. 2016-06-21 20:55:54 +02:00
bio_ssl.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
build.info Update build.info files for auto-init/de-init 2016-02-09 15:11:38 +00:00
d1_lib.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
d1_msg.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
d1_srtp.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
methods.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
packet_locl.h Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
pqueue.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
s3_cbc.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
s3_enc.c Add some missing return value checks 2016-06-13 17:38:39 +01:00
s3_lib.c Add SSL_CTX_get_tlsext_status_type() 2016-06-07 17:05:52 +01:00
s3_msg.c Always use session_ctx when removing a session 2016-06-08 15:22:41 +01:00
ssl_asn1.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_cert.c Fix ssl_cert_set0_chain invalid pointer 2016-05-27 17:20:10 +01:00
ssl_ciph.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_conf.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_err.c RT3895: Remove fprintf's from SSL library. 2016-06-04 07:08:29 -04:00
ssl_init.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_lib.c Don't compare a just free()d pointer 2016-06-11 16:43:49 +02:00
ssl_locl.h Handle a memory allocation failure in ssl3_init_finished_mac() 2016-06-03 20:29:04 +01:00
ssl_mcnf.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_rsa.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_sess.c Initialize the session_id 2016-06-14 19:30:36 +02:00
ssl_stat.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_txt.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
ssl_utst.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
t1_enc.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
t1_ext.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
t1_lib.c Useless header include of openssl/rand.h 2016-06-18 16:30:24 -04:00
t1_reneg.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
t1_trce.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00
tls_srp.c Copyright consolidation 01/10 2016-05-17 14:19:19 -04:00