Missing blinding for RSA algorithm

Контекст, используемый при расшифровке или верификации подписи, не ослеплен от атак синхронизации

Описание

Этот дефект возникает, когда вы не разрешаете ослепление для объекта контекста RSA перед использованием объекта для расшифровки или верификации подписи.

Например, вы не включаете ослепление в объекте контекста rsa перед этим шагом дешифрования:

  ret = RSA_public_decrypt(in_len, in, out, rsa, RSA_PKCS1_PADDING)

Риск

Без ослепления время, необходимое для выполнения криптографической операции, коррелирует со значением ключа. Атакующий может собрать информацию о ключе RSA, измерив время завершения. Ослепление удаляет эту корреляцию и защищает операцию дешифрования или верификации от атак синхронизации.

Зафиксировать

Перед выполнением расшифровки RSA или верификации подписи включите ослепление.

ret = RSA_blinding_on(rsa, NULL);

Примеры

расширить все

#include <stddef.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>

#define fatal_error() exit(-1)

int ret;
unsigned char *out_buf;
int func(unsigned char *src, size_t len, RSA* rsa){
  if (rsa == NULL) fatal_error();

  RSA_blinding_off(rsa);
  return RSA_private_decrypt(len, src, out_buf, rsa, RSA_PKCS1_OAEP_PADDING);
}

В этом примере ослепление отключено для объекта контекста rsa. Расшифровка с помощью этого контекстного объекта может быть уязвима для атак синхронизации.

Коррекция - включите ослепление перед расшифровкой

Одной из возможных коррекций является явное включение ослепления перед дешифрованием. Даже если ослепление может быть включено ранее или по умолчанию, явное включение ослепления гарантирует, что безопасность текущего шага дешифрования не зависит от вызывающего абонента func.

#include <stddef.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>

#define fatal_error() exit(-1)

int ret;
unsigned char *out_buf;
int func(unsigned char *src, size_t len, RSA* rsa){
  if (rsa == NULL) fatal_error();

  ret = RSA_blinding_on(rsa, NULL);
  if (ret <= 0) fatal_error();
  return RSA_private_decrypt(len, src, out_buf, rsa, RSA_PKCS1_OAEP_PADDING);
}

Информация о результатах

Группа: Криптография
Язык: C | C++
По умолчанию: Off
Синтаксис командной строки : CRYPTO_RSA_NO_BLINDING
Влияние: Средний
ИДЕНТИФИКАТОР CWE : 310, 326, 573
Введенный в R2018a