exponenta event banner

Постоянный шифровальный ключ

Ключ шифрования или дешифрования является постоянным, а не рандомизированным

Описание

Этот дефект возникает при использовании константы для ключа шифрования или дешифрования.

Риск

Если вы используете константу для ключа шифрования или дешифрования, злоумышленник может легко извлечь ваш ключ.

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

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

Создание случайного ключа с помощью мощного генератора случайных чисел.

Список генераторов случайных чисел, которые являются криптографически слабыми, см. в разделе Vulnerable pseudo-random number generator.

Примеры

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


#include <openssl/evp.h>
#include <stdlib.h>
#define SIZE16 16

int func(EVP_CIPHER_CTX *ctx, unsigned char *iv){
    unsigned char key[SIZE16] = {'1', '2', '3', '4','5','6','b','8','9',
                                 '1','2','3','4','5','6','7'};
    return EVP_CipherInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv, 1); 
}

В этом примере ключ шифра, key, имеет только константы. Злоумышленник может легко извлечь постоянный ключ.

Коррекция - использовать случайный ключ

Используйте сильный генератор случайных чисел для создания ключа шифра. Исправленный код здесь использует функцию RAND_bytes объявлен в openssl/rand.h.


#include <openssl/evp.h>
#include <openssl/rand.h>
#include <stdlib.h>
#define SIZE16 16

int func(EVP_CIPHER_CTX *ctx, unsigned char *iv){
    unsigned char key[SIZE16];
    RAND_bytes(key, 16);
    return EVP_CipherInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv, 1); 
}

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

Группа: Криптография
Язык: C | C++
По умолчанию: Откл.
Синтаксис командной строки: CRYPTO_CIPHER_CONSTANT_KEY
Воздействие: среднее
CWE ID: 310, 320, 321, 326, 522
Представлен в R2017a