《身份认证机制深度解析》
第2章 密码认证机制

2、密码认证机制

密码认证是最古老、最广泛使用的身份认证方式。其核心在于“你知道什么”(Something You Know)。本章节将深入剖析静态密码的原理、安全存储、策略管理以及面临的常见攻击。

2.1 静态密码原理

静态密码是指在用户注册时设定,并在后续登录过程中保持不变的一组字符序列。其认证流程如下:

  1. 注册阶段:用户提供密码,系统经过安全处理后存储。
  2. 登录阶段:用户再次输入密码,系统将输入值与存储值进行比对。
  3. 验证结果:若匹配,则认证成功;否则失败。
用户 输入密码 认证系统 查询存储 数据库 返回比对结果

图2-1:静态密码认证基本流程

2.2 密码存储安全(哈希加盐)

明文存储密码是极其危险的行为。现代系统采用哈希加盐技术来保护密码。

  • 哈希(Hash):一种单向函数,将任意长度的密码转换为固定长度的摘要。例如 SHA-256。
  • 加盐(Salt):为每个用户生成一个随机字符串,与密码拼接后再进行哈希。即使两个用户密码相同,哈希结果也不同。
用户密码 随机盐值 拼接 哈希函数 存储 存储内容:盐值 + 哈希值(例如:s3cure! + 5e884898da28047151d0e56f8dc62927...)

图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分钟
密码强度:强 密码有效期:90天 | 剩余天数:45天 账户锁定状态:正常 | 失败次数:0/5

图2-3:密码策略可视化示意

2.4 常见攻击(暴力破解、撞库)

密码认证面临多种攻击威胁,了解这些攻击是防御的第一步。

暴力破解(Brute Force)

攻击者尝试所有可能的密码组合,直到找到正确密码。防御措施包括:

  • 限制登录尝试次数
  • 增加验证码(CAPTCHA)
  • 使用延迟响应

撞库(Credential Stuffing)

攻击者利用用户在多个平台使用相同密码的习惯,使用已泄露的密码尝试登录其他系统。防御措施包括:

  • 强制使用唯一密码
  • 检测异常登录行为
  • 使用多因素认证(MFA)
攻击者 暴力破解 撞库 目标系统 防御措施 限速/验证码/MFA 泄露密码库

图2-4:暴力破解与撞库攻击示意

通过以上分析可以看出,静态密码虽然简单,但需要结合哈希加盐存储、严格的密码策略以及多层防御措施,才能构建相对安全的认证体系。