密码策略与多因素身份验证
了解强密码要求、MFA 因素(您知道的、拥有的和自身具备的因素),以及多层因素为何能大幅降低账户被入侵的风险。
密码策略与多因素身份验证 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
密码:最薄弱的环节
尽管密码最容易遭到破解,但它仍然是最常见的身份验证机制。攻击者会通过网络钓鱼、凭据填充(重复使用已泄露的凭据)、暴力破解攻击和键盘记录器窃取密码。即使是“强”密码,如果攻击者能够在用户毫无察觉的情况下捕获它,也只能提供有限的保护。密码策略会设置复杂度和定期更换的最低要求,以降低风险;但最有效的安全改进是加入第二个因素——因为仅仅知道密码已经不足以获得访问权限。
密码复杂度要求
有效的密码复杂度策略会定义最低标准,使密码更难被破解。传统要求包括:最小长度(至少 12–16 个字符;长度比复杂度更重要)、必须包含不同的字符类型(大写字母、小写字母、数字、符号)、禁止使用常见密码(密码字典中的密码),以及禁止在密码中包含用户名或组织名称。NIST SP 800-63B 指南于 2017 年更新后,建议优先考虑长度,而不是任意的复杂度规则;同时,应将密码与已泄露凭据数据库进行比对,而不是要求频繁更换密码。
# Check if a password appears in known breach databases
# NIST recommends this approach vs forced periodic rotation
# Example: Using Have I Been Pwned (HIBP) API
# Hash the password first (k-anonymity model - sends only first 5 chars of SHA-1)
echo -n 'mysecretpassword' | sha1sum
# Returns: e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4 -
# Send first 5 chars to HIBP API:
# GET https://api.pwnedpasswords.com/range/E5E9F
# Response includes suffix of any matching hashes
# If found: this password is compromised - reject itNIST SP 800-63B 现代密码指南
NIST SP 800-63B(数字身份指南)大幅修订了密码最佳实践。主要更新包括:除非有证据表明密码已泄露,否则不要要求定期更换密码——强制定期更换会导致用户进行可预测的修改(Password1! → Password2!);应在创建密码时检查泄露数据库,并允许用户在输入时查看密码;允许最长 64 个字符的长密码短语;取消会产生可预测模式的任意复杂度规则;并且应实施账户锁定或限速来防止暴力破解攻击,而不是完全依赖复杂度。
三类身份验证因素
身份验证依赖三类因素中的一种或多种。您知道的东西(知识因素):密码、PIN、安全问题、密码短语。您拥有的东西(持有因素):实体令牌、安装了身份验证器应用的智能手机、智能卡、硬件密钥(YubiKey)。您本身的特征(固有因素):指纹、视网膜扫描、面部识别、声音模式、行为生物特征。有时还会加入第四类——您所在的位置(位置因素)。使用两个或更多类别中的因素称为多因素身份验证(MFA)。来自同一类别的两个因素(例如两个密码)不属于 MFA。
MFA 为何如此有效
多因素身份验证(MFA)是目前最有效的安全控制措施之一。Microsoft 的研究表明,MFA 可以阻止 99.9% 的账户入侵攻击。原因在于:网络钓鱼或凭据窃取能够让攻击者获得“您知道的东西”(密码),但他们通常无法同时获得第二个因素(例如智能手机上的一次性验证码或硬件密钥)。即使用户的密码已被公布在泄露数据库中,只要启用了 MFA,账户仍然受到保护。已实施 MFA 的组织很少会出现在涉及基于凭据的账户接管的泄露报告中。
SMS OTP 及其弱点
SMS 一次性密码(OTP)是部署最广泛的 MFA 方法——通过短信发送一个 6 位验证码。它比完全不使用 MFA 更好,但存在已被记录的弱点。SIM 卡置换攻击:攻击者冒充受害者联系移动运营商,将电话号码转移到自己的 SIM 卡上,从而截获后续 OTP 验证码。SS7 协议漏洞:电话网络使用的信令协议存在已知缺陷,允许攻击者拦截短信。实时网络钓鱼:复杂的网络钓鱼代理会实时转发 OTP,从而绕过验证。NIST SP 800-63B 已将 SMS OTP 限定为“受限身份验证器”。更推荐使用身份验证器应用或硬件令牌。
TOTP:基于 Time 的一次性密码
TOTP(基于 Time 的一次性密码)在 RFC 6238 中进行了标准化,它根据共享密钥和当前时间生成 6 位验证码。Google Authenticator、Authy 和 Microsoft Authenticator 等应用都实现了 TOTP。验证码每 30 秒更换一次,并且仅对一次身份验证尝试有效。与 SMS OTP 不同,TOTP 不经过电话网络,因此不受 SIM 卡置换和 SS7 攻击影响。共享密钥只需交换一次(设置期间通过 QR 码交换),并存储在身份验证器应用中;因此,必须实际接触已注册的设备才能生成验证码。
# TOTP algorithm (RFC 6238) conceptual implementation
import hmac, hashlib, time, struct, base64
def totp(secret_b32, digits=6, interval=30):
# Decode the base32 secret
secret = base64.b32decode(secret_b32, True)
# Time counter: number of 30-second intervals since epoch
counter = int(time.time()) // interval
# HMAC-SHA1 of counter with secret
msg = struct.pack('>Q', counter)
digest = hmac.new(secret, msg, hashlib.sha1).digest()
# Dynamic truncation to get 6 digits
offset = digest[-1] & 0xf
code = struct.unpack('>I', digest[offset:offset+4])[0] & 0x7fffffff
return str(code % (10**digits)).zfill(digits)FIDO2 和 WebAuthn:抗网络钓鱼的 MFA
FIDO2(快速在线身份识别 2)及其 Web 实现WebAuthn代表了目前抗网络钓鱼能力最强的身份验证标准。FIDO2 在设备层使用公钥密码学——身份验证器(例如 YubiKey 等硬件密钥,或 Windows Hello 等设备生物特征)会存储一个永远不会离开设备的私钥。身份验证会以密码学方式绑定到特定来源(网站),因此能够抵御网络钓鱼:即使用户被骗去访问假网站,身份验证质询也会失败,因为来源不匹配。FIDO2 是高安全性身份验证的黄金标准。
硬件令牌:HOTP 和智能卡
实体硬件令牌独立于智能手机,提供“您拥有的东西”。HOTP(基于 HMAC 的 OTP)在 RFC 4226 中进行了标准化,它根据计数器和共享密钥生成验证码;每次按下按钮时,计数器都会增加。与 TOTP 不同,HOTP 验证码不会因计时器到期,但必须按顺序使用。智能卡(例如 US 政府雇员使用的 PIV 卡)会将私钥存储在防篡改硬件中,并要求输入 PIN 才能解锁,将“您拥有的东西”(卡片)与“您知道的东西”(PIN)结合起来。在高安全性环境中,智能卡身份验证是特权访问的标准方式。
密码管理器:解决人为问题
密码管理器通过为每个网站生成并存储唯一的随机密码,解决了人们重复使用密码的倾向。主密码可以解锁包含所有凭据的加密保险库。企业密码管理器(1Password Teams、Bitwarden Business、CyberArk)还提供集中式策略执行、审计日志、安全共享和紧急访问等功能。安全团队应积极鼓励或要求采用密码管理器——能够同时提升安全性(在所有地方使用唯一密码)和易用性(无需记住几十个密码)的安全控制措施十分少见。密码管理器与 MFA 结合后,可以大幅降低基于凭据的账户入侵风险。
账户锁定与限速
Account lockout会在登录失败次数达到规定数量后停用账户,从而防止暴力破解攻击。典型策略会在连续失败 3–10 次后锁定账户,锁定时长可能是固定时间(30 分钟),也可能要求管理员解锁。限速是一种更温和的替代方案:它不会锁定账户,而是逐步增加登录尝试之间的延迟,使暴力破解攻击需要数年而不是几分钟,同时避免锁定对用户体验造成的影响。Web 应用应同时实施这两种措施——在 API 层进行速率限制,并在账户层进行限速——以防止自动化凭据攻击。
# Configure account lockout policy via Windows Group Policy
# Computer Configuration > Windows Settings > Security Settings
# > Account Policies > Account Lockout Policy
#
# Account lockout threshold: 5 invalid logon attempts
# Account lockout duration: 30 minutes
# Reset account lockout after: 30 minutes
# Linux PAM-based lockout (/etc/pam.d/common-auth)
# auth required pam_tally2.so deny=5 unlock_time=1800
# auth required pam_faillock.so preauth deny=5 unlock_time=1800快速检查
测试您对本课 CompTIA Security+(SY0-701)概念的理解。
课程回顾
本课您学到了:NIST SP 800-63B建议使用长密码短语并检查泄露情况,而不是采用复杂的定期更换策略;MFA 的三个因素是知道、拥有和自身特征;TOTP 应用比 SMS OTP 更安全;FIDO2/WebAuthn能够抵御网络钓鱼;而Account lockout可以防止暴力破解攻击。接下来,我们将学习Biometrics 和基于令牌的身份验证。
常见问题解答
「密码策略与多因素身份验证」课时是免费的吗?
是的 — 「密码策略与多因素身份验证」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「密码策略与多因素身份验证」这节课中我会学到什么?
了解强密码要求、MFA 因素(您知道的、拥有的和自身具备的因素),以及多层因素为何能大幅降低账户被入侵的风险。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「密码策略与多因素身份验证」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。