目录
一、MD5介绍
MD5不是加密算法,而是密码散列函数(哈希函数)。 这是甲方安全建设中必须明确的基础概念,混淆可能导致严重的安全误判。
| 特性 | 加密(如AES) | MD5(哈希) | 对甲方安全的影响 |
|---|---|---|---|
| 可逆性 | ✅ 双向可逆(加解密) | ❌ 单向不可逆 | 若误用于密码保护,无法合规审计原始数据 |
| 目的 | 保护数据机密性 | 验证数据完整性 | 用错场景将导致安全目标失败 |
| 密钥 | 必需 | 无 | MD5无密钥管理要求,但也不提供保密性 |
| 碰撞风险 | 低(依赖算法强度) | 极高(已知攻击) | 可能被绕过完整性检查 |
二、甲方安全建设中MD5的典型应用与风险
A. 仍在使用MD5的场景(需立即整改)
1. 密码存储(高危)
# ❌ 错误示例(仍在许多遗留系统中存在)
def store_password(user, password):
hashed = hashlib.md5(password.encode()).hexdigest()
db.execute("UPDATE users SET password_md5=? WHERE user=?", hashed, user)
风险:
-
彩虹表攻击:秒级破解常见密码
-
撞库攻击:用户在其他网站泄露的MD5密码可直接登录
-
合规违规:违反等保2.0、通用数据保护条例GDPR、支付卡数据安全标准PCI DSS等标准
甲方整改方案:
# ✅ 正确方案(密码专用算法)
import bcrypt
# 或使用 passlib 库的 Argon2
def store_password_secure(user, password):
# bcrypt 自动加盐、可调成本
hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))
db.execute("UPDATE users SET password_bcrypt=? WHERE user=?", hashed, user)


2244

被折叠的 条评论
为什么被折叠?



