RSA アルゴリズムのパディングが脆弱です
暗号化または署名操作で使用されるコンテキストが安全ではないパディング タイプと関連付けられている
説明
この欠陥は、脆弱なパディング スキームに前もって関連付けられたコンテキスト オブジェクトを使用して、RSA 暗号化または署名を実行した場合に発生します。
たとえば、PKCS#1v1.5 パディング スキームに関連付けられているコンテキスト オブジェクトを使用して、暗号化を実行します。このスキームは安全ではないと見なされており、既に解読されています。
ret = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING); ... ret = EVP_PKEY_encrypt(ctx, out, &out_len, in, in_len)
リスク
パディング スキームは RSA アルゴリズムから確定性を排除し、特定の種類の攻撃から RSA 演算を保護します。PKCS#1v1.5、ANSI X9.31、SSLv23 などのパディング スキームは脆弱であることが知られています。暗号化操作または署名操作にこれらのパディング スキームを使用しないようにします。
修正方法
RSA 演算を実行する前に、コンテキスト オブジェクトに強力なパディング スキームを関連付けます。
暗号化: OAEP パディング スキームを使用します。
たとえば、引数
RSA_PKCS1_OAEP_PADDINGを指定して関数EVP_PKEY_CTX_set_rsa_paddingを使用するか、関数RSA_padding_add_PKCS1_OAEPを使用します。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を使用します。ret = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING);
次に、コンテキストに対して、
EVP_PKEY_sign-EVP_PKEY_verifyペアやRSA_private_encrypt-RSA_public_decryptペアなどの関数を使用できます。
例
結果情報
| グループ: 暗号化 |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: CRYPTO_RSA_WEAK_PADDING |
| 影響度: Medium |
バージョン履歴
R2018a で導入