Constant cipher key

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

Описание

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

Риск

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

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

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

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

Список генераторов случайных чисел, которые являются криптографически слабыми, см. 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++
По умолчанию: Off
Синтаксис командной строки: CRYPTO_CIPHER_CONSTANT_KEY
Влияние: Средний
ИДЕНТИФИКАТОР CWE: 310, 320, 321, 326, 522
Введенный в R2017a