このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
RSA アルゴリズム演算のパディングに互換性がありません
コンテキストに設定されたパディング タイプで暗号化操作がサポートされていない
説明
この欠陥は、事前に関連付けられたパディングと互換性がないコンテキスト オブジェクトに対して RSA アルゴリズム演算を実行した場合に発生します。
たとえば、OAEP パディング スキームとコンテキスト オブジェクトを関連付けたものの、後で、署名検証にこのコンテキストを使用する場合です。署名検証はこのパディング スキームでサポートされていない操作です。
ret = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING); ... ret = EVP_PKEY_verify(ctx, out, out_len, in, in_len);
リスク
パディング スキームは RSA アルゴリズムから確定性を排除し、特定の種類の攻撃から RSA 演算を保護します。
正しくないパディング スキームを使用すると、RSA 演算が失敗するか、予期しない暗号文になる可能性があります。
修正方法
RSA 演算を実行する前に、この演算と互換性のあるパディング スキームにコンテキスト オブジェクトを関連付けます。
暗号化: OAEP パディング スキームを使用します。
たとえば、引数
RSA_PKCS1_OAEP_PADDING
を指定して関数EVP_PKEY_CTX_set_rsa_padding
を使用するか、関数RSA_padding_add_PKCS1_OAEP
を使用します。PKCS#1v1.5 または SSLv23 スキームを使用することもできます。これらのスキームは安全ではないと見なされていることに注意してください。ret = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING);
次に、コンテキストに対して、
EVP_PKEY_encrypt
/EVP_PKEY_decrypt
やRSA_public_encrypt
/RSA_private_decrypt
などの関数を使用することができます。署名: RSA-PSS パディング スキームを使用します。
たとえば、引数
RSA_PKCS1_PSS_PADDING
を指定して関数EVP_PKEY_CTX_set_rsa_padding
を使用します。ANSI X9.31、PKCS#1v1.5、または SSLv23 スキームを使用することもできます。これらのスキームは安全ではないと見なされていることに注意してください。ret = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING);
次に、コンテキストに対して、
EVP_PKEY_sign
-EVP_PKEY_verify
ペアやRSA_private_encrypt
-RSA_public_decrypt
ペアなどの関数を使用できます。
同じコンテキストを使用して 2 種類の操作を実行する場合、最初の操作後、2 番目の操作の前にコンテキストのパディング スキームをリセットします。
例
結果情報
グループ: 暗号化 |
言語: C | C++ |
既定値: オフ |
コマンド ライン構文: CRYPTO_RSA_BAD_PADDING |
影響度: Medium |
バージョン履歴
R2018a で導入