秘密鍵が見つかりません
暗号化操作に使用されるコンテキストが、NULL 秘密鍵に関連付けられているか、秘密鍵にまったく関連付けられていない
説明
この欠陥は、復号化、署名、または共有秘密の導出にコンテキスト オブジェクトを使用したが、そのオブジェクトを前もって非 NULL 秘密鍵に関連付けていなかった場合に発生します。
たとえば、NULL 秘密鍵を使用してコンテキスト オブジェクトを初期化し、後で復号化にそのオブジェクトを使用します。
ctx = EVP_PKEY_CTX_new(pkey, NULL); ... ret = EVP_PKEY_decrypt_init(ctx); ... ret = EVP_PKEY_decrypt(ctx, out, &out_len, in, in_len);
対応するチェッカー [公開鍵が見つかりません] は、暗号化および認証操作で公開鍵をチェックします。チェッカー [ピア キーが見つかりません] は、共有秘密の導出でピア キーをチェックします。
リスク
秘密鍵がないと、復号化、署名、共有秘密の導出ステップが発生しません。冗長な操作は多くの場合、コーディング エラーを示します。
修正方法
操作 (復号化、署名、または共有秘密の導出) の配置をチェックします。操作が意図されている場合、操作の前に次のステップを完了するようにします。
非 NULL 秘密鍵を生成する。
次に例を示します。
EVP_PKEY *pkey = NULL; kctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); EVP_PKEY_keygen_init(kctx); EVP_PKEY_CTX_set_rsa_keygen_bits(kctx, RSA_2048BITS); EVP_PKEY_keygen(kctx, &pkey);
非 NULL コンテキスト オブジェクトと秘密鍵を関連付ける。
次に例を示します。
ctx = EVP_PKEY_CTX_new(pkey, NULL);
メモ:
EVP_PKEY_CTX_newの代わりにEVP_PKEY_CTX_new_idを使用する場合、コンテキスト オブジェクトと秘密鍵を関連付けません。
例
結果情報
| グループ: 暗号化 |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: CRYPTO_PKEY_NO_PRIVATE_KEY |
| 影響度: Medium |
バージョン履歴
R2018a で導入