第 4 课,共 4 课 · 8 分钟
密钥与密码:为什么丢失一个就会毁掉一切
本课程中的每一项保证,都建立在一把密钥或一个密码保持秘密的基础之上。密钥管理是那门不起眼、却决定密码学成败的学问。
本课程的每一课都悄悄依赖着同一个前提:正确的密钥留在了正确的人手里。对称加密一旦其共享密钥泄露就会失效。非对称加密一旦私钥暴露就会失效。一份签名一旦其私钥被盗就毫无意义——攻击者此刻可以对任何东西签名,而它都会被验证为真实的。NCAE-C 的基础密码学知识单元把密钥管理和算法本身并列,列为一个“必须在实现之前就得到处理”的问题,而不是事后才补的东西。
为什么强算法救不了一把弱密钥
一把 256 位的 AES 密钥,在实际意义上是猜不出来的。但如果这把密钥本身被写在便利贴上、被在多个账户之间重复使用,或者只由一个攻击者几秒钟就能试出来的四位数密码保护着,以上这些都无关紧要。现实世界中大多数密码学层面的失败,并不是算法被攻破,而是密钥泄露、密码被重复使用,或者本该受到保护的秘密被以明文留在了不该留的地方。这正是为什么前面几课的保证总是附带着一个条件——“只要共享密钥保持秘密”“只有私钥的持有者”——密钥管理正住在这个条件里。
当前的密码指南实际上是怎么说的
NIST 当前的数字身份指南(SP 800-63B)推翻了很多人从前被教导的建议中的大部分。它指出,验证方“不应要求订阅者定期更改密码”,也不应强加要求混用多种字符类型的组成规则——这两种做法都在推动人们做出微小、可预测的变化,而不是真正更强的密码。相反,NIST 建议使用更长的密码(其指南建议根据不同场景采用八到十五个字符区间的最低长度,并至少允许长达六十四个字符),并把新密码与已知泄露或常见的密码列表进行核对,而不是要求人为地追求复杂度。它还明确要求验证方“允许使用密码管理器和自动填充功能”,包括允许在密码字段中粘贴内容——这承认了一个能为每个网站生成并存储独一无二、足够长的密码的工具,比任何要求人凭记忆遵守的规则都更能提升安全性。
密钥(Passkey):彻底去掉共享秘密
密码是一种共享秘密:你和这个服务都知道它,而这正是它容易被钓鱼的原因——一个假的登录页面只需要索要同一个秘密就够了。密钥(passkey)利用本课程前面讲到的非对称加密避开了这个问题。苹果的支持文档描述了这个过程:当你创建一个密钥时,你的设备会生成“一对独一无二的密码学密钥”——一把公钥被发送给该服务,一把私钥则永远不会离开你的设备。苹果指出,密钥之所以能抵御钓鱼,是因为没有共享秘密可供骗你输入:无论一个假网站做得多逼真,它都无法把这把私钥提取出来。在苹果设备上,这把私钥受到保护,并通过 iCloud 钥匙串在你自己的设备之间同步,苹果将其描述为端到端加密,因此苹果自己也不持有这把密钥。
CISA 的验证方式分级,简述
美国网络安全和基础设施安全局(CISA)关于多因素验证的指南,按抗钓鱼能力对各种方式进行了分级。它指出,“目前唯一被广泛使用的抗钓鱼验证方式是 FIDO/WebAuthn 验证”——正是密钥所依据的那同一套底层标准。用它的话说,一条通过短信发送的一次性验证码,仍然远好过完全没有第二重验证,但它可能以一种抗钓鱼方式无法被复制的方式遭到转发或拦截。当某个服务提供密钥或 FIDO 安全密钥选项时,这是目前广泛可用中最强的选择;当它只提供基于应用的验证码或短信验证码时,两者中的任何一种仍然比单纯的密码有意义地更强。
| 如果这个丢失或暴露 | 后果 |
|---|---|
| 一把对称加密密钥 | 任何拿到它的人都能读取它曾经保护过的一切内容,不论过去还是将来,除非该系统具备前向保密性 |
| 一把用于签名的私钥 | 攻击者可以生成能被验证为确实出自你之手的签名 |
| 一个被重复使用的密码 | 一旦其中任何一个账户被入侵,使用同一个密码的每一个账户都会变得脆弱 |
| 一把密钥(passkey)的私钥(很少见,因为它本就不应该离开设备) | 设备本身及其自带的保护措施(锁屏、磁盘加密)成为最后一道防线 |
一条实用的结论
使用一个密码管理器,让每个账户都拥有一个你永远不必去记的、足够长且独一无二的密码。开启该账户所能提供的最强的第二重验证——如果有的话,选密钥或一把实体安全密钥,否则退而求其次选身份验证器应用。而且要把任何一个密码或密钥可能已经暴露的时刻——一次钓鱼点击、一台丢失的设备、一份数据泄露通知——当作需要立刻采取行动的事情,而不是留到以后:更改这个凭证,并检查它是否在其他地方也被重复使用过。
要点
- 本课程中的每一项密码学保证,都取决于一把密钥或一个密码是否保持秘密;密钥管理不是可有可无的。
- NIST 当前的指南放弃了强制定期更改密码和复杂度规则,转而强调长度、与泄露列表核对,以及使用密码管理器。
- 密钥(passkey)去掉了密码所依赖的那种共享秘密,改用一把永远不离开你设备的私钥——这正是它能抵御钓鱼的原因。
- CISA 把 FIDO/WebAuthn(密钥背后的标准)列为广泛可用中抗钓鱼能力最强的验证方式。
- 把密码或密钥任何可能的暴露——钓鱼、设备丢失、数据泄露通知——都当作需要立刻处理的事情。
自我检测
1. 为什么一个强大的加密算法本身并不能保证安全?
- 强算法总是运行很慢
- 这项保证只有在密钥保持秘密时才成立;一把暴露的密钥能让即便最强的算法也失效 — 正确。
- 算法需要每个月更换一次
- 只有对称算法才能被破解
密码学的强度以密钥保密为前提;一把泄露或过弱的密钥会削弱即便在数学上无懈可击的算法。
2. NIST 当前的指南(SP 800-63B)对密码更改是怎么建议的?
- 密码应该每三十天更改一次
- 验证方不应要求定期更改密码 — 正确。
- 密码应该总是混合使用符号和数字
- 出于安全考虑应该禁止使用密码管理器
NIST 明确指出验证方不应强制定期更改密码,而应改为核对泄露密码列表,并允许使用密码管理器。
3. 为什么密钥(passkey)被认为能抵御钓鱼?
- 它们使用比通常更长的密码
- 没有可供窃取的共享秘密;私钥永远不会离开设备,也无法被输入到一个假网站中 — 正确。
- 它每次都需要指纹,没有任何例外
- 密钥无法在手机上使用
密钥的私钥留在设备上;一个钓鱼网站永远只能获取一个共享秘密,而密钥根本没有这样的秘密可以交出去。
4. 如果你怀疑某个密码因为一次钓鱼点击或一份数据泄露通知而暴露,你应该怎么做?
- 先观望,等出了问题再行动
- 立刻更改该凭证,并检查它是否在其他地方也被重复使用过 — 正确。
- 如果该账户没有敏感数据就不用管
- 只有服务明确要求更改时才需要担心
因为一个被重复使用的密码会让使用它的每一个账户都处于风险之中,立刻采取行动——更改它并检查是否重复使用——能限制损害范围。
用 FireAI 动手做
在你自己的 Mac 上练习这节课的内容。
来源
- NIST SP 800-63B: Digital Identity Guidelines — Authentication and Authenticator Management
- Apple Support: About passkeys
- CISA: More than a Password (Multi-Factor Authentication)
在你的 Mac 上实践
免费试用全部功能 17 天,无需绑定银行卡。