使用 ECB 加密¶
ID: swift/ecb-encryption
Kind: path-problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-327
Query suites:
- swift-code-scanning.qls
- swift-security-extended.qls
- swift-security-and-quality.qls
不应将 ECB 用作加密模式,因为它存在严重的弱点。数据始终以相同的方式加密,这意味着相同的明文输入始终会产生相同的密文。这种行为使得使用 ECB 加密的邮件更容易受到重放攻击。
建议¶
使用其他密码模式,例如 CBC。
示例¶
以下示例展示了使用各种加密密钥和块模式实例化密码的六种情况。在“BAD”情况下,加密模式为 ECB,使得加密数据容易受到重放攻击。在“GOOD”情况下,加密模式为 CBC,这可以保护加密数据免受重放攻击。
func encrypt(key : Key, padding : Padding) {
// ...
// BAD: ECB is used for block mode
let blockMode = ECB()
_ = try AES(key: key, blockMode: blockMode, padding: padding)
_ = try AES(key: key, blockMode: blockMode)
_ = try Blowfish(key: key, blockMode: blockMode, padding: padding)
// GOOD: ECB is not used for block mode
let blockMode = CBC()
_ = try AES(key: key, blockMode: blockMode, padding: padding)
_ = try AES(key: key, blockMode: blockMode)
_ = try Blowfish(key: key, blockMode: blockMode, padding: padding)
// ...
}
参考资料¶
维基百科,块密码操作模式,电子密码本 (ECB).
通用弱点枚举:CWE-327.