Missing blinding for RSA algorithm

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

Описание

Отсутствие ослепляющий для алгоритма 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++
Значение по умолчанию: 'off'
Синтаксис командной строки: CRYPTO_RSA_NO_BLINDING
Удар: носитель
ID CWE: 310, 326, 573

Введенный в R2018a