不使用 OAEP 的 RSA 算法¶
ID: java/rsa-without-oaep
Kind: path-problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-780
Query suites:
- java-code-scanning.qls
- java-security-extended.qls
- java-security-and-quality.qls
加密算法通常使用填充方案来使明文更不可预测。OAEP(最佳非对称加密填充)方案应与 RSA 加密一起使用。使用过时的填充方案(如 PKCS1)或根本不使用填充方案会削弱加密,使其容易受到填充预言机攻击。
建议¶
在使用 RSA 加密时使用 OAEP 方案。
示例¶
在以下示例中,BAD 案例显示没有使用填充,而 GOOD 案例显示使用 OAEP 方案。
// BAD: No padding scheme is used
Cipher rsa = Cipher.getInstance("RSA/ECB/NoPadding");
...
//GOOD: OAEP padding is used
Cipher rsa = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
...