使用已损坏或有风险的加密算法¶
ID: cpp/weak-cryptographic-algorithm
Kind: problem
Security severity: 7.5
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-327
Query suites:
- cpp-code-scanning.qls
- cpp-security-extended.qls
- cpp-security-and-quality.qls
使用已损坏或较弱的加密算法可能会导致数据易于被解密。
已知加密库提供的许多加密算法都比较弱或存在缺陷。使用此类算法意味着攻击者可能能够轻松解密加密数据。
建议¶
确保使用强大且现代的加密算法。至少使用 AES-128 或 RSA-2048。
示例¶
以下代码显示了使用 advapi
Windows API 解密某些数据的示例。创建密钥时,必须指定要使用的算法。第一个示例使用 DES,这是一种较旧的算法,现在被认为比较弱。第二个示例使用 AES,这是一种强大且现代的算法。
void advapi() {
HCRYPTPROV hCryptProv;
HCRYPTKEY hKey;
HCRYPTHASH hHash;
// other preparation goes here
// BAD: use 3DES for key
CryptDeriveKey(hCryptProv, CALG_3DES, hHash, 0, &hKey);
// GOOD: use AES
CryptDeriveKey(hCryptProv, CALG_AES_256, hHash, 0, &hKey);
}
参考文献¶
NIST,FIPS 140 附录 a: 已批准的安全功能。
NIST,SP 800-131A: 转换:有关转换加密算法和密钥长度使用的建议。
常见弱点枚举:CWE-327。