使用已损坏或弱的加密算法¶
ID: js/weak-cryptographic-algorithm
Kind: path-problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-327
- external/cwe/cwe-328
Query suites:
- javascript-code-scanning.qls
- javascript-security-extended.qls
- javascript-security-and-quality.qls
使用已损坏或弱的加密算法会导致数据容易受到攻击者的解密或伪造攻击。
许多加密库提供的加密算法已知是弱的或有缺陷的。使用此类算法意味着加密或哈希的数据的安全性低于表面上看起来的。
建议¶
确保使用强大、现代的加密算法。对于加密,至少使用 AES-128 或 RSA-2048,对于安全散列,使用 SHA-2 或 SHA-3。
示例¶
以下代码显示了一个使用 NodeJS 内置加密库加密一些秘密数据的示例。在创建Cipher
实例以使用该实例加密秘密数据时,必须指定要使用的加密算法。第一个示例使用 DES,DES 是一种较旧的算法,现在被认为是弱的。第二个示例使用 AES,AES 是一种强大的现代算法。
const crypto = require('crypto');
var secretText = obj.getSecretText();
const desCipher = crypto.createCipher('des', key);
let desEncrypted = desCipher.write(secretText, 'utf8', 'hex'); // BAD: weak encryption
const aesCipher = crypto.createCipher('aes-128', key);
let aesEncrypted = aesCipher.update(secretText, 'utf8', 'hex'); // GOOD: strong encryption
参考资料¶
NIST,FIPS 140 附录 a: Approved Security Functions.
NIST,SP 800-131A: Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths.
常见弱点枚举:CWE-327.
常见弱点枚举:CWE-328.