使用损坏或弱的加密算法¶
ID: py/weak-cryptographic-algorithm
Kind: problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-327
Query suites:
- python-code-scanning.qls
- python-security-extended.qls
- python-security-and-quality.qls
使用损坏或弱的加密算法会导致数据容易受到攻击者的解密或伪造。
许多加密库提供的加密算法已知是弱的或有缺陷的。使用这种算法意味着加密或哈希的数据比看起来的安全性要低。
此查询会提示任何使用弱加密算法的情况,这些算法不是哈希算法。使用损坏或弱的加密哈希函数由 py/weak-sensitive-data-hashing
查询处理。
建议¶
确保您使用强大的现代加密算法,例如 AES-128 或 RSA-2048。
示例¶
以下代码使用 pycryptodome
库来加密一些秘密数据。当您使用 pycryptodome
创建密码时,您必须指定要使用的加密算法。第一个示例使用 DES,这是一种较旧的算法,现在被认为是弱的。第二个示例使用 AES,这是一种更强大的现代算法。
from Crypto.Cipher import DES, AES
cipher = DES.new(SECRET_KEY)
def send_encrypted(channel, message):
channel.send(cipher.encrypt(message)) # BAD: weak encryption
cipher = AES.new(SECRET_KEY)
def send_encrypted(channel, message):
channel.send(cipher.encrypt(message)) # GOOD: strong encryption
注意:提供 Crypto
模块的原始 [pycrypto](https://pypi.ac.cn/project/pycrypto/)
PyPI 包不再积极维护,因此您应该改用 [pycryptodome](https://pypi.ac.cn/project/pycryptodome/)
PyPI 包(它具有兼容的 API)。
参考¶
NIST,FIPS 140 附录 a: 批准的安全功能.
NIST,SP 800-131A: 过渡:加密算法和密钥长度使用过渡建议.
OWASP:规则 - 使用强大的经过批准的加密算法.
常见弱点枚举:CWE-327.