1 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com) 2 * All rights reserved. 3 * 4 * This package is an SSL implementation written 5 * by Eric Young (eay (at) cryptsoft.com). 6 * The implementation was written so as to conform with Netscapes SSL. 7 * 8 * This library is free for commercial and non-commercial use as long as 9 * the following conditions are aheared to. The following conditions 10 * apply to all code found in this distribution, be it the RC4, RSA, 11 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * included with this distribution is covered by the same copyright terms 13 * except that the holder is Tim Hudson (tjh (at) cryptsoft.com). 14 * 15 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * the code are not to be removed. 17 * If this package is used in a product, Eric Young should be given attribution 18 * as the author of the parts of the library used. 19 * This can be in the form of a textual message at program startup or 20 * in documentation (online or textual) provided with the package. 21 * 22 * Redistribution and use in source and binary forms, with or without 23 * modification, are permitted provided that the following conditions 24 * are met: 25 * 1. Redistributions of source code must retain the copyright 26 * notice, this list of conditions and the following disclaimer. 27 * 2. Redistributions in binary form must reproduce the above copyright 28 * notice, this list of conditions and the following disclaimer in the 29 * documentation and/or other materials provided with the distribution. 30 * 3. All advertising materials mentioning features or use of this software 31 * must display the following acknowledgement: 32 * "This product includes cryptographic software written by 33 * Eric Young (eay (at) cryptsoft.com)" 34 * The word 'cryptographic' can be left out if the rouines from the library 35 * being used are not cryptographic related :-). 36 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * the apps directory (application code) you must include an acknowledgement: 38 * "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)" 39 * 40 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 46 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * SUCH DAMAGE. 51 * 52 * The licence and distribution terms for any publically available version or 53 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * copied and put under another distribution licence 55 * [including the GNU Public Licence.] */ 56 57 #include <openssl/rsa.h> 58 59 #include <assert.h> 60 #include <limits.h> 61 #include <string.h> 62 63 #include <openssl/bn.h> 64 #include <openssl/err.h> 65 #include <openssl/mem.h> 66 #include <openssl/thread.h> 67 #include <openssl/type_check.h> 68 69 #include "internal.h" 70 #include "../bn/internal.h" 71 #include "../../internal.h" 72 #include "../delocate.h" 73 74 75 static int check_modulus_and_exponent_sizes(const RSA *rsa) { 76 unsigned rsa_bits = BN_num_bits(rsa->n); 77 78 if (rsa_bits > 16 * 1024) { 79 OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE); 80 return 0; 81 } 82 83 // Mitigate DoS attacks by limiting the exponent size. 33 bits was chosen as 84 // the limit based on the recommendations in [1] and [2]. Windows CryptoAPI 85 // doesn't support values larger than 32 bits [3], so it is unlikely that 86 // exponents larger than 32 bits are being used for anything Windows commonly 87 // does. 88 // 89 // [1] https://www.imperialviolet.org/2012/03/16/rsae.html 90 // [2] https://www.imperialviolet.org/2012/03/17/rsados.html 91 // [3] https://msdn.microsoft.com/en-us/library/aa387685(VS.85).aspx 92 static const unsigned kMaxExponentBits = 33; 93 94 if (BN_num_bits(rsa->e) > kMaxExponentBits) { 95 OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE); 96 return 0; 97 } 98 99 // Verify |n > e|. Comparing |rsa_bits| to |kMaxExponentBits| is a small 100 // shortcut to comparing |n| and |e| directly. In reality, |kMaxExponentBits| 101 // is much smaller than the minimum RSA key size that any application should 102 // accept. 103 if (rsa_bits <= kMaxExponentBits) { 104 OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL); 105 return 0; 106 } 107 assert(BN_ucmp(rsa->n, rsa->e) > 0); 108 109 return 1; 110 } 111 112 size_t rsa_default_size(const RSA *rsa) { 113 return BN_num_bytes(rsa->n); 114 } 115 116 int RSA_encrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, 117 const uint8_t *in, size_t in_len, int padding) { 118 if (rsa->n == NULL || rsa->e == NULL) { 119 OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING); 120 return 0; 121 } 122 123 const unsigned rsa_size = RSA_size(rsa); 124 BIGNUM *f, *result; 125 uint8_t *buf = NULL; 126 BN_CTX *ctx = NULL; 127 int i, ret = 0; 128 129 if (max_out < rsa_size) { 130 OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL); 131 return 0; 132 } 133 134 if (!check_modulus_and_exponent_sizes(rsa)) { 135 return 0; 136 } 137 138 ctx = BN_CTX_new(); 139 if (ctx == NULL) { 140 goto err; 141 } 142 143 BN_CTX_start(ctx); 144 f = BN_CTX_get(ctx); 145 result = BN_CTX_get(ctx); 146 buf = OPENSSL_malloc(rsa_size); 147 if (!f || !result || !buf) { 148 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE); 149 goto err; 150 } 151 152 switch (padding) { 153 case RSA_PKCS1_PADDING: 154 i = RSA_padding_add_PKCS1_type_2(buf, rsa_size, in, in_len); 155 break; 156 case RSA_PKCS1_OAEP_PADDING: 157 // Use the default parameters: SHA-1 for both hashes and no label. 158 i = RSA_padding_add_PKCS1_OAEP_mgf1(buf, rsa_size, in, in_len, 159 NULL, 0, NULL, NULL); 160 break; 161 case RSA_NO_PADDING: 162 i = RSA_padding_add_none(buf, rsa_size, in, in_len); 163 break; 164 default: 165 OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE); 166 goto err; 167 } 168 169 if (i <= 0) { 170 goto err; 171 } 172 173 if (BN_bin2bn(buf, rsa_size, f) == NULL) { 174 goto err; 175 } 176 177 if (BN_ucmp(f, rsa->n) >= 0) { 178 // usually the padding functions would catch this 179 OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); 180 goto err; 181 } 182 183 if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) || 184 !BN_mod_exp_mont(result, f, rsa->e, rsa->n, ctx, rsa->mont_n)) { 185 goto err; 186 } 187 188 // put in leading 0 bytes if the number is less than the length of the 189 // modulus 190 if (!BN_bn2bin_padded(out, rsa_size, result)) { 191 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 192 goto err; 193 } 194 195 *out_len = rsa_size; 196 ret = 1; 197 198 err: 199 if (ctx != NULL) { 200 BN_CTX_end(ctx); 201 BN_CTX_free(ctx); 202 } 203 OPENSSL_free(buf); 204 205 return ret; 206 } 207 208 // MAX_BLINDINGS_PER_RSA defines the maximum number of cached BN_BLINDINGs per 209 // RSA*. Then this limit is exceeded, BN_BLINDING objects will be created and 210 // destroyed as needed. 211 #define MAX_BLINDINGS_PER_RSA 1024 212 213 // rsa_blinding_get returns a BN_BLINDING to use with |rsa|. It does this by 214 // allocating one of the cached BN_BLINDING objects in |rsa->blindings|. If 215 // none are free, the cache will be extended by a extra element and the new 216 // BN_BLINDING is returned. 217 // 218 // On success, the index of the assigned BN_BLINDING is written to 219 // |*index_used| and must be passed to |rsa_blinding_release| when finished. 220 static BN_BLINDING *rsa_blinding_get(RSA *rsa, unsigned *index_used, 221 BN_CTX *ctx) { 222 assert(ctx != NULL); 223 assert(rsa->mont_n != NULL); 224 225 BN_BLINDING *ret = NULL; 226 BN_BLINDING **new_blindings; 227 uint8_t *new_blindings_inuse; 228 char overflow = 0; 229 230 CRYPTO_MUTEX_lock_write(&rsa->lock); 231 232 unsigned i; 233 for (i = 0; i < rsa->num_blindings; i++) { 234 if (rsa->blindings_inuse[i] == 0) { 235 rsa->blindings_inuse[i] = 1; 236 ret = rsa->blindings[i]; 237 *index_used = i; 238 break; 239 } 240 } 241 242 if (ret != NULL) { 243 CRYPTO_MUTEX_unlock_write(&rsa->lock); 244 return ret; 245 } 246 247 overflow = rsa->num_blindings >= MAX_BLINDINGS_PER_RSA; 248 249 // We didn't find a free BN_BLINDING to use so increase the length of 250 // the arrays by one and use the newly created element. 251 252 CRYPTO_MUTEX_unlock_write(&rsa->lock); 253 ret = BN_BLINDING_new(); 254 if (ret == NULL) { 255 return NULL; 256 } 257 258 if (overflow) { 259 // We cannot add any more cached BN_BLINDINGs so we use |ret| 260 // and mark it for destruction in |rsa_blinding_release|. 261 *index_used = MAX_BLINDINGS_PER_RSA; 262 return ret; 263 } 264 265 CRYPTO_MUTEX_lock_write(&rsa->lock); 266 267 new_blindings = 268 OPENSSL_malloc(sizeof(BN_BLINDING *) * (rsa->num_blindings + 1)); 269 if (new_blindings == NULL) { 270 goto err1; 271 } 272 OPENSSL_memcpy(new_blindings, rsa->blindings, 273 sizeof(BN_BLINDING *) * rsa->num_blindings); 274 new_blindings[rsa->num_blindings] = ret; 275 276 new_blindings_inuse = OPENSSL_malloc(rsa->num_blindings + 1); 277 if (new_blindings_inuse == NULL) { 278 goto err2; 279 } 280 OPENSSL_memcpy(new_blindings_inuse, rsa->blindings_inuse, rsa->num_blindings); 281 new_blindings_inuse[rsa->num_blindings] = 1; 282 *index_used = rsa->num_blindings; 283 284 OPENSSL_free(rsa->blindings); 285 rsa->blindings = new_blindings; 286 OPENSSL_free(rsa->blindings_inuse); 287 rsa->blindings_inuse = new_blindings_inuse; 288 rsa->num_blindings++; 289 290 CRYPTO_MUTEX_unlock_write(&rsa->lock); 291 return ret; 292 293 err2: 294 OPENSSL_free(new_blindings); 295 296 err1: 297 CRYPTO_MUTEX_unlock_write(&rsa->lock); 298 BN_BLINDING_free(ret); 299 return NULL; 300 } 301 302 // rsa_blinding_release marks the cached BN_BLINDING at the given index as free 303 // for other threads to use. 304 static void rsa_blinding_release(RSA *rsa, BN_BLINDING *blinding, 305 unsigned blinding_index) { 306 if (blinding_index == MAX_BLINDINGS_PER_RSA) { 307 // This blinding wasn't cached. 308 BN_BLINDING_free(blinding); 309 return; 310 } 311 312 CRYPTO_MUTEX_lock_write(&rsa->lock); 313 rsa->blindings_inuse[blinding_index] = 0; 314 CRYPTO_MUTEX_unlock_write(&rsa->lock); 315 } 316 317 // signing 318 int rsa_default_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out, 319 size_t max_out, const uint8_t *in, size_t in_len, 320 int padding) { 321 const unsigned rsa_size = RSA_size(rsa); 322 uint8_t *buf = NULL; 323 int i, ret = 0; 324 325 if (max_out < rsa_size) { 326 OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL); 327 return 0; 328 } 329 330 buf = OPENSSL_malloc(rsa_size); 331 if (buf == NULL) { 332 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE); 333 goto err; 334 } 335 336 switch (padding) { 337 case RSA_PKCS1_PADDING: 338 i = RSA_padding_add_PKCS1_type_1(buf, rsa_size, in, in_len); 339 break; 340 case RSA_NO_PADDING: 341 i = RSA_padding_add_none(buf, rsa_size, in, in_len); 342 break; 343 default: 344 OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE); 345 goto err; 346 } 347 348 if (i <= 0) { 349 goto err; 350 } 351 352 if (!RSA_private_transform(rsa, out, buf, rsa_size)) { 353 goto err; 354 } 355 356 *out_len = rsa_size; 357 ret = 1; 358 359 err: 360 OPENSSL_free(buf); 361 362 return ret; 363 } 364 365 int rsa_default_decrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, 366 const uint8_t *in, size_t in_len, int padding) { 367 const unsigned rsa_size = RSA_size(rsa); 368 uint8_t *buf = NULL; 369 int ret = 0; 370 371 if (max_out < rsa_size) { 372 OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL); 373 return 0; 374 } 375 376 if (padding == RSA_NO_PADDING) { 377 buf = out; 378 } else { 379 // Allocate a temporary buffer to hold the padded plaintext. 380 buf = OPENSSL_malloc(rsa_size); 381 if (buf == NULL) { 382 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE); 383 goto err; 384 } 385 } 386 387 if (in_len != rsa_size) { 388 OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN); 389 goto err; 390 } 391 392 if (!RSA_private_transform(rsa, buf, in, rsa_size)) { 393 goto err; 394 } 395 396 switch (padding) { 397 case RSA_PKCS1_PADDING: 398 ret = 399 RSA_padding_check_PKCS1_type_2(out, out_len, rsa_size, buf, rsa_size); 400 break; 401 case RSA_PKCS1_OAEP_PADDING: 402 // Use the default parameters: SHA-1 for both hashes and no label. 403 ret = RSA_padding_check_PKCS1_OAEP_mgf1(out, out_len, rsa_size, buf, 404 rsa_size, NULL, 0, NULL, NULL); 405 break; 406 case RSA_NO_PADDING: 407 *out_len = rsa_size; 408 ret = 1; 409 break; 410 default: 411 OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE); 412 goto err; 413 } 414 415 if (!ret) { 416 OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED); 417 } 418 419 err: 420 if (padding != RSA_NO_PADDING) { 421 OPENSSL_free(buf); 422 } 423 424 return ret; 425 } 426 427 static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); 428 429 int RSA_verify_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, 430 const uint8_t *in, size_t in_len, int padding) { 431 if (rsa->n == NULL || rsa->e == NULL) { 432 OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING); 433 return 0; 434 } 435 436 const unsigned rsa_size = RSA_size(rsa); 437 BIGNUM *f, *result; 438 439 if (max_out < rsa_size) { 440 OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL); 441 return 0; 442 } 443 444 if (in_len != rsa_size) { 445 OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN); 446 return 0; 447 } 448 449 if (!check_modulus_and_exponent_sizes(rsa)) { 450 return 0; 451 } 452 453 BN_CTX *ctx = BN_CTX_new(); 454 if (ctx == NULL) { 455 return 0; 456 } 457 458 int ret = 0; 459 uint8_t *buf = NULL; 460 461 BN_CTX_start(ctx); 462 f = BN_CTX_get(ctx); 463 result = BN_CTX_get(ctx); 464 if (f == NULL || result == NULL) { 465 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE); 466 goto err; 467 } 468 469 if (padding == RSA_NO_PADDING) { 470 buf = out; 471 } else { 472 // Allocate a temporary buffer to hold the padded plaintext. 473 buf = OPENSSL_malloc(rsa_size); 474 if (buf == NULL) { 475 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE); 476 goto err; 477 } 478 } 479 480 if (BN_bin2bn(in, in_len, f) == NULL) { 481 goto err; 482 } 483 484 if (BN_ucmp(f, rsa->n) >= 0) { 485 OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); 486 goto err; 487 } 488 489 if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) || 490 !BN_mod_exp_mont(result, f, rsa->e, rsa->n, ctx, rsa->mont_n)) { 491 goto err; 492 } 493 494 if (!BN_bn2bin_padded(buf, rsa_size, result)) { 495 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 496 goto err; 497 } 498 499 switch (padding) { 500 case RSA_PKCS1_PADDING: 501 ret = 502 RSA_padding_check_PKCS1_type_1(out, out_len, rsa_size, buf, rsa_size); 503 break; 504 case RSA_NO_PADDING: 505 ret = 1; 506 *out_len = rsa_size; 507 break; 508 default: 509 OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE); 510 goto err; 511 } 512 513 if (!ret) { 514 OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED); 515 goto err; 516 } 517 518 err: 519 BN_CTX_end(ctx); 520 BN_CTX_free(ctx); 521 if (buf != out) { 522 OPENSSL_free(buf); 523 } 524 return ret; 525 } 526 527 int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in, 528 size_t len) { 529 if (rsa->n == NULL || rsa->d == NULL) { 530 OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING); 531 return 0; 532 } 533 534 BIGNUM *f, *result; 535 BN_CTX *ctx = NULL; 536 unsigned blinding_index = 0; 537 BN_BLINDING *blinding = NULL; 538 int ret = 0; 539 540 ctx = BN_CTX_new(); 541 if (ctx == NULL) { 542 goto err; 543 } 544 BN_CTX_start(ctx); 545 f = BN_CTX_get(ctx); 546 result = BN_CTX_get(ctx); 547 548 if (f == NULL || result == NULL) { 549 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE); 550 goto err; 551 } 552 553 if (BN_bin2bn(in, len, f) == NULL) { 554 goto err; 555 } 556 557 if (BN_ucmp(f, rsa->n) >= 0) { 558 // Usually the padding functions would catch this. 559 OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); 560 goto err; 561 } 562 563 if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx)) { 564 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 565 goto err; 566 } 567 568 const int do_blinding = (rsa->flags & RSA_FLAG_NO_BLINDING) == 0; 569 570 if (rsa->e == NULL && do_blinding) { 571 // We cannot do blinding or verification without |e|, and continuing without 572 // those countermeasures is dangerous. However, the Java/Android RSA API 573 // requires support for keys where only |d| and |n| (and not |e|) are known. 574 // The callers that require that bad behavior set |RSA_FLAG_NO_BLINDING|. 575 OPENSSL_PUT_ERROR(RSA, RSA_R_NO_PUBLIC_EXPONENT); 576 goto err; 577 } 578 579 if (do_blinding) { 580 blinding = rsa_blinding_get(rsa, &blinding_index, ctx); 581 if (blinding == NULL) { 582 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 583 goto err; 584 } 585 if (!BN_BLINDING_convert(f, blinding, rsa->e, rsa->mont_n, ctx)) { 586 goto err; 587 } 588 } 589 590 if (rsa->p != NULL && rsa->q != NULL && rsa->e != NULL && rsa->dmp1 != NULL && 591 rsa->dmq1 != NULL && rsa->iqmp != NULL) { 592 if (!mod_exp(result, f, rsa, ctx)) { 593 goto err; 594 } 595 } else if (!BN_mod_exp_mont_consttime(result, f, rsa->d, rsa->n, ctx, 596 rsa->mont_n)) { 597 goto err; 598 } 599 600 // Verify the result to protect against fault attacks as described in the 601 // 1997 paper "On the Importance of Checking Cryptographic Protocols for 602 // Faults" by Dan Boneh, Richard A. DeMillo, and Richard J. Lipton. Some 603 // implementations do this only when the CRT is used, but we do it in all 604 // cases. Section 6 of the aforementioned paper describes an attack that 605 // works when the CRT isn't used. That attack is much less likely to succeed 606 // than the CRT attack, but there have likely been improvements since 1997. 607 // 608 // This check is cheap assuming |e| is small; it almost always is. 609 if (rsa->e != NULL) { 610 BIGNUM *vrfy = BN_CTX_get(ctx); 611 if (vrfy == NULL || 612 !BN_mod_exp_mont(vrfy, result, rsa->e, rsa->n, ctx, rsa->mont_n) || 613 !BN_equal_consttime(vrfy, f)) { 614 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 615 goto err; 616 } 617 618 } 619 620 if (do_blinding && 621 !BN_BLINDING_invert(result, blinding, rsa->mont_n, ctx)) { 622 goto err; 623 } 624 625 if (!BN_bn2bin_padded(out, len, result)) { 626 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 627 goto err; 628 } 629 630 ret = 1; 631 632 err: 633 if (ctx != NULL) { 634 BN_CTX_end(ctx); 635 BN_CTX_free(ctx); 636 } 637 if (blinding != NULL) { 638 rsa_blinding_release(rsa, blinding, blinding_index); 639 } 640 641 return ret; 642 } 643 644 // mod_montgomery sets |r| to |I| mod |p|. |I| must already be fully reduced 645 // modulo |p| times |q|. It returns one on success and zero on error. 646 static int mod_montgomery(BIGNUM *r, const BIGNUM *I, const BIGNUM *p, 647 const BN_MONT_CTX *mont_p, const BIGNUM *q, 648 BN_CTX *ctx) { 649 // Reducing in constant-time with Montgomery reduction requires I <= p * R. We 650 // have I < p * q, so this follows if q < R. In particular, this always holds 651 // if p and q are the same size, which is true for any RSA keys we or anyone 652 // sane generates. For other keys, we fall back to |BN_mod|. 653 if (!bn_less_than_montgomery_R(q, mont_p)) { 654 return BN_mod(r, I, p, ctx); 655 } 656 657 if (// Reduce mod p with Montgomery reduction. This computes I * R^-1 mod p. 658 !BN_from_montgomery(r, I, mont_p, ctx) || 659 // Multiply by R^2 and do another Montgomery reduction to compute 660 // I * R^-1 * R^2 * R^-1 = I mod p. 661 !BN_to_montgomery(r, r, mont_p, ctx)) { 662 return 0; 663 } 664 665 // By precomputing R^3 mod p (normally |BN_MONT_CTX| only uses R^2 mod p) and 666 // adjusting the API for |BN_mod_exp_mont_consttime|, we could instead compute 667 // I * R mod p here and save a reduction per prime. But this would require 668 // changing the RSAZ code and may not be worth it. 669 return 1; 670 } 671 672 static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { 673 assert(ctx != NULL); 674 675 assert(rsa->n != NULL); 676 assert(rsa->e != NULL); 677 assert(rsa->d != NULL); 678 assert(rsa->p != NULL); 679 assert(rsa->q != NULL); 680 assert(rsa->dmp1 != NULL); 681 assert(rsa->dmq1 != NULL); 682 assert(rsa->iqmp != NULL); 683 684 BIGNUM *r1, *m1, *vrfy; 685 int ret = 0; 686 687 BN_CTX_start(ctx); 688 r1 = BN_CTX_get(ctx); 689 m1 = BN_CTX_get(ctx); 690 vrfy = BN_CTX_get(ctx); 691 if (r1 == NULL || 692 m1 == NULL || 693 vrfy == NULL) { 694 goto err; 695 } 696 697 if (!BN_MONT_CTX_set_locked(&rsa->mont_p, &rsa->lock, rsa->p, ctx) || 698 !BN_MONT_CTX_set_locked(&rsa->mont_q, &rsa->lock, rsa->q, ctx)) { 699 goto err; 700 } 701 702 if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx)) { 703 goto err; 704 } 705 706 // This is a pre-condition for |mod_montgomery|. It was already checked by the 707 // caller. 708 assert(BN_ucmp(I, rsa->n) < 0); 709 710 // compute I mod q 711 if (!mod_montgomery(r1, I, rsa->q, rsa->mont_q, rsa->p, ctx)) { 712 goto err; 713 } 714 715 // compute r1^dmq1 mod q 716 if (!BN_mod_exp_mont_consttime(m1, r1, rsa->dmq1, rsa->q, ctx, rsa->mont_q)) { 717 goto err; 718 } 719 720 // compute I mod p 721 if (!mod_montgomery(r1, I, rsa->p, rsa->mont_p, rsa->q, ctx)) { 722 goto err; 723 } 724 725 // compute r1^dmp1 mod p 726 if (!BN_mod_exp_mont_consttime(r0, r1, rsa->dmp1, rsa->p, ctx, rsa->mont_p)) { 727 goto err; 728 } 729 730 // TODO(davidben): The code below is not constant-time, even ignoring 731 // |bn_correct_top|. To fix this: 732 // 733 // 1. Canonicalize keys on p > q. (p > q for keys we generate, but not ones we 734 // import.) We have exposed structs, but we can generalize the 735 // |BN_MONT_CTX_set_locked| trick to do a one-time canonicalization of the 736 // private key where we optionally swap p and q (re-computing iqmp if 737 // necessary) and fill in mont_*. This removes the p < q case below. 738 // 739 // 2. Compute r0 - m1 (mod p) in constant-time. With (1) done, this is just a 740 // constant-time modular subtraction. It should be doable with 741 // |bn_sub_words| and a select on the borrow bit. 742 // 743 // 3. When computing mont_*, additionally compute iqmp_mont, iqmp in 744 // Montgomery form. The |BN_mul| and |BN_mod| pair can then be replaced 745 // with |BN_mod_mul_montgomery|. 746 747 if (!BN_sub(r0, r0, m1)) { 748 goto err; 749 } 750 // This will help stop the size of r0 increasing, which does 751 // affect the multiply if it optimised for a power of 2 size 752 if (BN_is_negative(r0)) { 753 if (!BN_add(r0, r0, rsa->p)) { 754 goto err; 755 } 756 } 757 758 if (!BN_mul(r1, r0, rsa->iqmp, ctx)) { 759 goto err; 760 } 761 762 if (!BN_mod(r0, r1, rsa->p, ctx)) { 763 goto err; 764 } 765 766 // If p < q it is occasionally possible for the correction of 767 // adding 'p' if r0 is negative above to leave the result still 768 // negative. This can break the private key operations: the following 769 // second correction should *always* correct this rare occurrence. 770 // This will *never* happen with OpenSSL generated keys because 771 // they ensure p > q [steve] 772 if (BN_is_negative(r0)) { 773 if (!BN_add(r0, r0, rsa->p)) { 774 goto err; 775 } 776 } 777 if (!BN_mul(r1, r0, rsa->q, ctx)) { 778 goto err; 779 } 780 if (!BN_add(r0, r1, m1)) { 781 goto err; 782 } 783 784 ret = 1; 785 786 err: 787 BN_CTX_end(ctx); 788 return ret; 789 } 790 791 static int ensure_bignum(BIGNUM **out) { 792 if (*out == NULL) { 793 *out = BN_new(); 794 } 795 return *out != NULL; 796 } 797 798 // kBoringSSLRSASqrtTwo is the BIGNUM representation of 22. This is 799 // chosen to give enough precision for 3072-bit RSA, the largest key size FIPS 800 // specifies. Key sizes beyond this will round up. 801 // 802 // To verify this number, check that n < 2 < (n+1), where n is value 803 // represented here. Note the components are listed in little-endian order. Here 804 // is some sample Python code to check: 805 // 806 // >>> TOBN = lambda a, b: a << 32 | b 807 // >>> l = [ <paste the contents of kSqrtTwo> ] 808 // >>> n = sum(a * 2**(64*i) for i, a in enumerate(l)) 809 // >>> n**2 < 2**3071 < (n+1)**2 810 // True 811 const BN_ULONG kBoringSSLRSASqrtTwo[] = { 812 TOBN(0xdea06241, 0xf7aa81c2), TOBN(0xf6a1be3f, 0xca221307), 813 TOBN(0x332a5e9f, 0x7bda1ebf), TOBN(0x0104dc01, 0xfe32352f), 814 TOBN(0xb8cf341b, 0x6f8236c7), TOBN(0x4264dabc, 0xd528b651), 815 TOBN(0xf4d3a02c, 0xebc93e0c), TOBN(0x81394ab6, 0xd8fd0efd), 816 TOBN(0xeaa4a089, 0x9040ca4a), TOBN(0xf52f120f, 0x836e582e), 817 TOBN(0xcb2a6343, 0x31f3c84d), TOBN(0xc6d5a8a3, 0x8bb7e9dc), 818 TOBN(0x460abc72, 0x2f7c4e33), TOBN(0xcab1bc91, 0x1688458a), 819 TOBN(0x53059c60, 0x11bc337b), TOBN(0xd2202e87, 0x42af1f4e), 820 TOBN(0x78048736, 0x3dfa2768), TOBN(0x0f74a85e, 0x439c7b4a), 821 TOBN(0xa8b1fe6f, 0xdc83db39), TOBN(0x4afc8304, 0x3ab8a2c3), 822 TOBN(0xed17ac85, 0x83339915), TOBN(0x1d6f60ba, 0x893ba84c), 823 TOBN(0x597d89b3, 0x754abe9f), TOBN(0xb504f333, 0xf9de6484), 824 }; 825 const size_t kBoringSSLRSASqrtTwoLen = OPENSSL_ARRAY_SIZE(kBoringSSLRSASqrtTwo); 826 827 int rsa_greater_than_pow2(const BIGNUM *b, int n) { 828 if (BN_is_negative(b) || n == INT_MAX) { 829 return 0; 830 } 831 832 int b_bits = BN_num_bits(b); 833 return b_bits > n + 1 || (b_bits == n + 1 && !BN_is_pow2(b)); 834 } 835 836 // generate_prime sets |out| to a prime with length |bits| such that |out|-1 is 837 // relatively prime to |e|. If |p| is non-NULL, |out| will also not be close to 838 // |p|. 839 static int generate_prime(BIGNUM *out, int bits, const BIGNUM *e, 840 const BIGNUM *p, const BIGNUM *sqrt2, BN_CTX *ctx, 841 BN_GENCB *cb) { 842 if (bits < 128 || (bits % BN_BITS2) != 0) { 843 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 844 return 0; 845 } 846 847 // See FIPS 186-4 appendix B.3.3, steps 4 and 5. Note |bits| here is nlen/2. 848 849 // Use the limit from steps 4.7 and 5.8 for most values of |e|. When |e| is 3, 850 // the 186-4 limit is too low, so we use a higher one. Note this case is not 851 // reachable from |RSA_generate_key_fips|. 852 if (bits >= INT_MAX/32) { 853 OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE); 854 return 0; 855 } 856 int limit = BN_is_word(e, 3) ? bits * 32 : bits * 5; 857 858 int ret = 0, tries = 0, rand_tries = 0; 859 BN_CTX_start(ctx); 860 BIGNUM *tmp = BN_CTX_get(ctx); 861 if (tmp == NULL) { 862 goto err; 863 } 864 865 for (;;) { 866 // Generate a random number of length |bits| where the bottom bit is set 867 // (steps 4.2, 4.3, 5.2 and 5.3) and the top bit is set (implied by the 868 // bound checked below in steps 4.4 and 5.5). 869 if (!BN_rand(out, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD) || 870 !BN_GENCB_call(cb, BN_GENCB_GENERATED, rand_tries++)) { 871 goto err; 872 } 873 874 if (p != NULL) { 875 // If |p| and |out| are too close, try again (step 5.4). 876 if (!BN_sub(tmp, out, p)) { 877 goto err; 878 } 879 BN_set_negative(tmp, 0); 880 if (!rsa_greater_than_pow2(tmp, bits - 100)) { 881 continue; 882 } 883 } 884 885 // If out < 2^(bits-1)2, try again (steps 4.4 and 5.5). This is equivalent 886 // to out <= 2^(bits-1)2, or out <= sqrt2 for FIPS key sizes. 887 // 888 // For larger keys, the comparison is approximate, leaning towards 889 // retrying. That is, we reject a negligible fraction of primes that are 890 // within the FIPS bound, but we will never accept a prime outside the 891 // bound, ensuring the resulting RSA key is the right size. 892 if (!BN_less_than_consttime(sqrt2, out)) { 893 continue; 894 } 895 896 // Check gcd(out-1, e) is one (steps 4.5 and 5.6). 897 if (!BN_sub(tmp, out, BN_value_one()) || 898 !BN_gcd(tmp, tmp, e, ctx)) { 899 goto err; 900 } 901 if (BN_is_one(tmp)) { 902 // Test |out| for primality (steps 4.5.1 and 5.6.1). 903 int is_probable_prime; 904 if (!BN_primality_test(&is_probable_prime, out, BN_prime_checks, ctx, 1, 905 cb)) { 906 goto err; 907 } 908 if (is_probable_prime) { 909 ret = 1; 910 goto err; 911 } 912 } 913 914 // If we've tried too many times to find a prime, abort (steps 4.7 and 915 // 5.8). 916 tries++; 917 if (tries >= limit) { 918 OPENSSL_PUT_ERROR(RSA, RSA_R_TOO_MANY_ITERATIONS); 919 goto err; 920 } 921 if (!BN_GENCB_call(cb, 2, tries)) { 922 goto err; 923 } 924 } 925 926 err: 927 BN_CTX_end(ctx); 928 return ret; 929 } 930 931 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { 932 // See FIPS 186-4 appendix B.3. This function implements a generalized version 933 // of the FIPS algorithm. |RSA_generate_key_fips| performs additional checks 934 // for FIPS-compliant key generation. 935 936 // Always generate RSA keys which are a multiple of 128 bits. Round |bits| 937 // down as needed. 938 bits &= ~127; 939 940 // Reject excessively small keys. 941 if (bits < 256) { 942 OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL); 943 return 0; 944 } 945 946 int ret = 0; 947 BN_CTX *ctx = BN_CTX_new(); 948 if (ctx == NULL) { 949 goto bn_err; 950 } 951 BN_CTX_start(ctx); 952 BIGNUM *totient = BN_CTX_get(ctx); 953 BIGNUM *pm1 = BN_CTX_get(ctx); 954 BIGNUM *qm1 = BN_CTX_get(ctx); 955 BIGNUM *gcd = BN_CTX_get(ctx); 956 BIGNUM *sqrt2 = BN_CTX_get(ctx); 957 if (totient == NULL || pm1 == NULL || qm1 == NULL || gcd == NULL || 958 sqrt2 == NULL) { 959 goto bn_err; 960 } 961 962 // We need the RSA components non-NULL. 963 if (!ensure_bignum(&rsa->n) || 964 !ensure_bignum(&rsa->d) || 965 !ensure_bignum(&rsa->e) || 966 !ensure_bignum(&rsa->p) || 967 !ensure_bignum(&rsa->q) || 968 !ensure_bignum(&rsa->dmp1) || 969 !ensure_bignum(&rsa->dmq1) || 970 !ensure_bignum(&rsa->iqmp)) { 971 goto bn_err; 972 } 973 974 if (!BN_copy(rsa->e, e_value)) { 975 goto bn_err; 976 } 977 978 int prime_bits = bits / 2; 979 980 // Compute sqrt2 >= 2^(prime_bits-1)2. 981 if (!bn_set_words(sqrt2, kBoringSSLRSASqrtTwo, kBoringSSLRSASqrtTwoLen)) { 982 goto bn_err; 983 } 984 int sqrt2_bits = kBoringSSLRSASqrtTwoLen * BN_BITS2; 985 assert(sqrt2_bits == (int)BN_num_bits(sqrt2)); 986 if (sqrt2_bits > prime_bits) { 987 // For key sizes up to 3072 (prime_bits = 1536), this is exactly 988 // 2^(prime_bits-1)2. 989 if (!BN_rshift(sqrt2, sqrt2, sqrt2_bits - prime_bits)) { 990 goto bn_err; 991 } 992 } else if (prime_bits > sqrt2_bits) { 993 // For key sizes beyond 3072, this is approximate. We err towards retrying 994 // to ensure our key is the right size and round up. 995 if (!BN_add_word(sqrt2, 1) || 996 !BN_lshift(sqrt2, sqrt2, prime_bits - sqrt2_bits)) { 997 goto bn_err; 998 } 999 } 1000 assert(prime_bits == (int)BN_num_bits(sqrt2)); 1001 1002 do { 1003 // Generate p and q, each of size |prime_bits|, using the steps outlined in 1004 // appendix FIPS 186-4 appendix B.3.3. 1005 if (!generate_prime(rsa->p, prime_bits, rsa->e, NULL, sqrt2, ctx, cb) || 1006 !BN_GENCB_call(cb, 3, 0) || 1007 !generate_prime(rsa->q, prime_bits, rsa->e, rsa->p, sqrt2, ctx, cb) || 1008 !BN_GENCB_call(cb, 3, 1)) { 1009 goto bn_err; 1010 } 1011 1012 if (BN_cmp(rsa->p, rsa->q) < 0) { 1013 BIGNUM *tmp = rsa->p; 1014 rsa->p = rsa->q; 1015 rsa->q = tmp; 1016 } 1017 1018 // Calculate d = e^(-1) (mod lcm(p-1, q-1)), per FIPS 186-4. This differs 1019 // from typical RSA implementations which use (p-1)*(q-1). 1020 // 1021 // Note this means the size of d might reveal information about p-1 and 1022 // q-1. However, we do operations with Chinese Remainder Theorem, so we only 1023 // use d (mod p-1) and d (mod q-1) as exponents. Using a minimal totient 1024 // does not affect those two values. 1025 if (!BN_sub(pm1, rsa->p, BN_value_one()) || 1026 !BN_sub(qm1, rsa->q, BN_value_one()) || 1027 !BN_mul(totient, pm1, qm1, ctx) || 1028 !BN_gcd(gcd, pm1, qm1, ctx) || 1029 !BN_div(totient, NULL, totient, gcd, ctx) || 1030 !BN_mod_inverse(rsa->d, rsa->e, totient, ctx)) { 1031 goto bn_err; 1032 } 1033 1034 // Check that |rsa->d| > 2^|prime_bits| and try again if it fails. See 1035 // appendix B.3.1's guidance on values for d. 1036 } while (!rsa_greater_than_pow2(rsa->d, prime_bits)); 1037 1038 if (// Calculate n. 1039 !BN_mul(rsa->n, rsa->p, rsa->q, ctx) || 1040 // Calculate d mod (p-1). 1041 !BN_mod(rsa->dmp1, rsa->d, pm1, ctx) || 1042 // Calculate d mod (q-1) 1043 !BN_mod(rsa->dmq1, rsa->d, qm1, ctx)) { 1044 goto bn_err; 1045 } 1046 1047 // Sanity-check that |rsa->n| has the specified size. This is implied by 1048 // |generate_prime|'s bounds. 1049 if (BN_num_bits(rsa->n) != (unsigned)bits) { 1050 OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); 1051 goto err; 1052 } 1053 1054 // Calculate inverse of q mod p. Note that although RSA key generation is far 1055 // from constant-time, |bn_mod_inverse_secret_prime| uses the same modular 1056 // exponentation logic as in RSA private key operations and, if the RSAZ-1024 1057 // code is enabled, will be optimized for common RSA prime sizes. 1058 if (!BN_MONT_CTX_set_locked(&rsa->mont_p, &rsa->lock, rsa->p, ctx) || 1059 !bn_mod_inverse_secret_prime(rsa->iqmp, rsa->q, rsa->p, ctx, 1060 rsa->mont_p)) { 1061 goto bn_err; 1062 } 1063 1064 // The key generation process is complex and thus error-prone. It could be 1065 // disastrous to generate and then use a bad key so double-check that the key 1066 // makes sense. 1067 if (!RSA_check_key(rsa)) { 1068 OPENSSL_PUT_ERROR(RSA, RSA_R_INTERNAL_ERROR); 1069 goto err; 1070 } 1071 1072 ret = 1; 1073 1074 bn_err: 1075 if (!ret) { 1076 OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN); 1077 } 1078 err: 1079 if (ctx != NULL) { 1080 BN_CTX_end(ctx); 1081 BN_CTX_free(ctx); 1082 } 1083 return ret; 1084 } 1085 1086 int RSA_generate_key_fips(RSA *rsa, int bits, BN_GENCB *cb) { 1087 // FIPS 186-4 allows 2048-bit and 3072-bit RSA keys (1024-bit and 1536-bit 1088 // primes, respectively) with the prime generation method we use. 1089 if (bits != 2048 && bits != 3072) { 1090 OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_RSA_PARAMETERS); 1091 return 0; 1092 } 1093 1094 BIGNUM *e = BN_new(); 1095 int ret = e != NULL && 1096 BN_set_word(e, RSA_F4) && 1097 RSA_generate_key_ex(rsa, bits, e, cb) && 1098 RSA_check_fips(rsa); 1099 BN_free(e); 1100 return ret; 1101 } 1102 1103 DEFINE_METHOD_FUNCTION(RSA_METHOD, RSA_default_method) { 1104 // All of the methods are NULL to make it easier for the compiler/linker to 1105 // drop unused functions. The wrapper functions will select the appropriate 1106 // |rsa_default_*| implementation. 1107 OPENSSL_memset(out, 0, sizeof(RSA_METHOD)); 1108 out->common.is_static = 1; 1109 } 1110