exponenta event banner

Missing data for encryption, decryption or signing operation

Данные предусмотрели операцию шифрования с открытым ключом, NULL, или длина данных является нулем

Описание

Этот дефект происходит, когда данные предусмотрели шифрование, дешифрование, подписание, или операцией аутентификации является NULL, или длина данных является нулем.

Например, вы непреднамеренно вводите Нулевое значение для in или нулевое значение для in_len в этой операции дешифрования:

ret = EVP_PKEY_decrypt(ctx, out, &out_len, in, in_len);
Или, вы вводите Нулевое значение для md или sig, или нулевое значение для md_len или sig_len в этой операции верификации:
ret = EVP_PKEY_verify(ctx, md, mdlen, sig, siglen);

Риск

С данными NULL или нулевой длиной, не происходит операция. Избыточная операция часто указывает на ошибку кодирования.

Фиксация

Проверяйте размещение шифрования, дешифрования или подписания операции. Если операция предназначается, чтобы произойти, убедитесь, что обеспеченные данные являются непустыми. Установите длину данных на ненулевое значение.

Примеры

развернуть все

#include <openssl/evp.h>

#define fatal_error() exit(-1)

int ret;
int func(EVP_PKEY_CTX * ctx){
  if (ctx == NULL) fatal_error(); 
  unsigned char* sig = (unsigned char*) "0123456789";
  unsigned char* md = (unsigned char*) "0123456789";

  ret = EVP_PKEY_verify_init(ctx);
  if (ret <= 0) fatal_error();
  ret = EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256());
  if (ret <= 0) fatal_error();
  return EVP_PKEY_verify(ctx, sig, 0, md, 0); 
}

В этом примере, длины данных (третьи и пятые аргументы к EVP_PKEY_verify) нуль. Сбои операции.

Коррекция — использует ненулевую длину данных

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

#include <openssl/evp.h>

#define fatal_error() exit(-1)

int ret;
int func(EVP_PKEY_CTX * ctx){
  if (ctx == NULL) fatal_error(); 
  unsigned char* sig = (unsigned char*) "0123456789";
  unsigned char* md = (unsigned char*) "0123456789";

  ret = EVP_PKEY_verify_init(ctx);
  if (ret <= 0) fatal_error();
  ret = EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256());
  if (ret <= 0) fatal_error();
  return EVP_PKEY_verify(ctx, sig, 10, md, 10); 
}

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

Группа: криптография
Язык: C | C++
Значение по умолчанию: Off
Синтаксис командной строки: CRYPTO_PKEY_NO_DATA
Удар: носитель
ID CWE: 310, 325, 372, 573
Введенный в R2018a