CodeQL 文档

使用 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

点击查看 CodeQL 代码库中的查询

不应将 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)

	// ...
}

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私