exponenta event banner

Отсутствует ослепление для алгоритма RSA

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

Описание

Этот дефект возникает, если не включить ослепление для объекта контекста 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++
По умолчанию: Откл.
Синтаксис командной строки: CRYPTO_RSA_NO_BLINDING
Воздействие: среднее
CWE ID: 310, 326, 573
Представлен в R2018a