メインコンテンツ

定数の暗号キー

ランダム化されていない定数の暗号化キーまたは復号化キー

説明

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

リスク

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

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

修正方法

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

暗号法的に脆弱な疑似乱数発生器の一覧については、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 は定数のみを保持します。攻撃者は定数のキーを簡単に手に入れることができます。

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

強力な乱数発生器を使用して暗号キーを作成します。修正した次のコードでは、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); 
}

結果情報

グループ: 暗号化
言語: C | C++
既定値: オフ
コマンド ライン構文: CRYPTO_CIPHER_CONSTANT_KEY
影響度: Medium

バージョン履歴

R2017a で導入