メインコンテンツ

CWE Rule 321

Use of Hard-coded Cryptographic Key

R2023b 以降

説明

ルールの説明

The use of a hard-coded cryptographic key significantly increases the possibility that encrypted data may be recovered.

Polyspace 実装

ルール チェッカーは、"定数の暗号キー" をチェックします。

すべて展開する

問題

この問題は、暗号化キーまたは復号化キーに定数が使用された場合に発生します。

リスク

暗号化キーまたは復号化キーに定数を使用すると、攻撃者はそのキーを簡単に手に入れることができます。

データの暗号化とその後の復号化にはキーを使用します。キーが容易に取得される場合、そのキーを使用して暗号化したデータは安全ではありません。

修正方法

強力な乱数発生器を使用してランダムなキーを作成します。

暗号法的に脆弱な疑似乱数発生器の一覧については、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);  //Noncompliant
}

この例では、暗号キー key は定数のみを保持します。攻撃者は定数のキーを簡単に手に入れることができます。

修正 — ランダムなキーを使用

強力な乱数発生器を使用して暗号キーを作成します。修正した次のコードでは、openssl/rand.h で宣言されている関数 RAND_bytes を使用します。



#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); 
}

チェック情報

カテゴリ: Information Management Errors

バージョン履歴

R2023b で導入