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 で導入