このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
キー生成のパラメーターがセキュリティで保護されていません
キー生成に使用されるコンテキストが脆弱なパラメーターに関連付けられている
説明
この欠陥は、脆弱なパラメーターに関連付けられた EVP_PKEY_CTX
コンテキスト オブジェクトを使用して、キー生成を試みた場合に発生します。脆弱なパラメーターの構成要素は使用する公開鍵 アルゴリズムによって決まります。DSA アルゴリズムでは、不十分なパラメーターの長さを設定した結果、脆弱なパラメーターになる可能性があります。
たとえば、DSA パラメーター生成に使用するビット数を 512 ビットに設定し、このパラメーターをキー生成に使用します。
EVP_PKEY_CTX *pctx,*kctx; EVP_PKEY *params, *pkey; /* Initializations for parameter generation */ pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DSA, NULL); params = EVP_PKEY_new(); /* Parameter generation */ ret = EVP_PKEY_paramgen_init(pctx); ret = EVP_PKEY_CTX_set_dsa_paramgen_bits(pctx, KEYLEN_512BITS); ret = EVP_PKEY_paramgen(pctx, ¶ms); /* Initializations for key generation */ kctx = EVP_PKEY_CTX_new(params, NULL); pkey = EVP_PKEY_new(); /* Key generation */ ret = EVP_PKEY_keygen_init(kctx); ret = EVP_PKEY_keygen(kctx, &pkey);
リスク
脆弱なパラメーターは暗号の強固さが不十分なキーにつながり、既知の攻撃方法に機密情報をさらすことになります。
修正方法
アルゴリズムに応じて、以下のパラメーターを使用します。
Diffie-Hellman (DH): DH プライム パラメーターの長さを 2048 ビットに設定します。
DH ジェネレーターを 2 または 5 に設定します。ret = EVP_PKEY_CTX_set_dh_paramgen_prime_len(pctx, 2048);
ret = EVP_PKEY_CTX_set_dh_paramgen_generator(pctx, 2);
デジタル署名アルゴリズム (DSA): DSA パラメーター生成に使用するビット数を 2048 ビットに設定します。
ret = EVP_PKEY_CTX_set_dsa_paramgen_bits(pctx, 2048);
RSA: RSA キーの長さを 2048 ビットに設定します。
ret = EVP_PKEY_CTX_set_rsa_keygen_bits(kctx, 2048);
楕円曲線 (EC):
X9_62_prime256v1
など、解読されることがわかっている曲線の使用を避けます。たとえば、sect239k1
を使用します。ret = EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, NID_sect239k1);
例
結果情報
グループ: 暗号化 |
言語: C | C++ |
既定値: オフ |
コマンド ライン構文: CRYPTO_PKEY_WEAK_PARAMS |
影響度: Medium |
バージョン履歴
R2018a で導入