《身份认证机制深度解析》
第2章 密码认证机制
2、密码认证机制
密码认证是最古老、最广泛使用的身份认证方式。其核心在于“你知道什么”(Something You Know)。本章节将深入剖析静态密码的原理、安全存储、策略管理以及面临的常见攻击。
2.1 静态密码原理
静态密码是指在用户注册时设定,并在后续登录过程中保持不变的一组字符序列。其认证流程如下:
- 注册阶段:用户提供密码,系统经过安全处理后存储。
- 登录阶段:用户再次输入密码,系统将输入值与存储值进行比对。
- 验证结果:若匹配,则认证成功;否则失败。
图2-1:静态密码认证基本流程
2.2 密码存储安全(哈希加盐)
明文存储密码是极其危险的行为。现代系统采用哈希加盐技术来保护密码。
- 哈希(Hash):一种单向函数,将任意长度的密码转换为固定长度的摘要。例如 SHA-256。
- 加盐(Salt):为每个用户生成一个随机字符串,与密码拼接后再进行哈希。即使两个用户密码相同,哈希结果也不同。
图2-2:哈希加盐存储流程
代码示例(Python):
import hashlib
import os
def hash_password(password):
# 生成随机盐值(16字节)
salt = os.urandom(16)
# 使用 PBKDF2 进行哈希(迭代100000次)
hashed = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)
# 返回盐值+哈希值(十六进制)
return salt.hex() + ':' + hashed.hex()
def verify_password(stored_password, provided_password):
salt_hex, hashed_hex = stored_password.split(':')
salt = bytes.fromhex(salt_hex)
hashed = hashlib.pbkdf2_hmac('sha256', provided_password.encode('utf-8'), salt, 100000)
return hashed.hex() == hashed_hex
2.3 密码策略(复杂度、有效期)
良好的密码策略能显著提升系统安全性。常见策略包括:
| 策略类型 | 描述 | 推荐配置 |
|---|---|---|
| 复杂度 | 要求包含大写字母、小写字母、数字、特殊字符 | 至少8位,包含3种以上字符类型 |
| 有效期 | 强制用户定期更换密码 | 90天(高安全环境30天) |
| 历史记录 | 禁止使用最近使用过的密码 | 保留最近5次历史 |
| 锁定策略 | 连续失败多次后锁定账户 | 5次失败后锁定15分钟 |
图2-3:密码策略可视化示意
2.4 常见攻击(暴力破解、撞库)
密码认证面临多种攻击威胁,了解这些攻击是防御的第一步。
暴力破解(Brute Force)
攻击者尝试所有可能的密码组合,直到找到正确密码。防御措施包括:
- 限制登录尝试次数
- 增加验证码(CAPTCHA)
- 使用延迟响应
撞库(Credential Stuffing)
攻击者利用用户在多个平台使用相同密码的习惯,使用已泄露的密码尝试登录其他系统。防御措施包括:
- 强制使用唯一密码
- 检测异常登录行为
- 使用多因素认证(MFA)
图2-4:暴力破解与撞库攻击示意
通过以上分析可以看出,静态密码虽然简单,但需要结合哈希加盐存储、严格的密码策略以及多层防御措施,才能构建相对安全的认证体系。