Nonsecure hash algorithm

Контекст, используемый для создания дайджеста сообщений, связан со слабым алгоритмом

Описание

Этот дефект возникает, когда вы используете криптографическую хеш-функцию, которая доказала свою слабость против определенных форм атаки.

Функции мешанины, сигнализируемые этим контролером, включают SHA-0, SHA-1, MD4, MD5 и RIPEMD-160. Шашка обнаруживает использование этих хеш-функций в:

  • Функции из EVP API, такие как EVP_DigestUpdate или EVP_SignUpdate.

  • Функции из низкоуровневого API, такие как SHA1_Update или MD5_Update.

Риск

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

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

Используйте более безопасную хеш-функцию. Например, используйте более поздние функции SHA, такие как SHA-224, SHA-256, SHA-384 и SHA-512.

Примеры

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

#include <openssl/evp.h>

#define fatal_error() exit(-1)

int ret;
unsigned char *out_buf;
unsigned int out_len;

void func(unsigned char *src, size_t len, EVP_PKEY* pkey){
  EVP_MD_CTX* ctx = EVP_MD_CTX_create();

  ret = EVP_SignInit_ex(ctx, EVP_md5(), NULL);
  if (ret != 1) fatal_error();

  ret = EVP_DigestUpdate(ctx,src,len);

  if (ret != 1) fatal_error();

  ret = EVP_SignFinal(ctx, out_buf, &out_len, pkey);
  if (ret != 1) fatal_error();
}

В этом примере, во время инициализации с EVP_SignInit_exобъект контекста связан со слабым MD5 хеш-функции. Средство проверки помечает использование этого контекста на шаге обновления следующим образом EVP_DigestUpdate.

Коррекция - Используйте функцию SHA-2 семейства

Одной из возможных коррекций является использование хеш-функции из семейства SHA-2, такой как SHA-256.

#include <openssl/evp.h>

#define fatal_error() exit(-1)

int ret;
unsigned char *out_buf;
unsigned int out_len;

void func(unsigned char *src, size_t len, EVP_PKEY* pkey){
  EVP_MD_CTX* ctx = EVP_MD_CTX_create();

  ret = EVP_SignInit_ex(ctx, EVP_sha256(), NULL); 
  if (ret != 1) fatal_error();

  ret = EVP_SignUpdate(ctx, src, len); 
  if (ret != 1) fatal_error();

  ret = EVP_SignFinal(ctx, out_buf, &out_len, pkey);
  if (ret != 1) fatal_error();
}

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

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