密码身份验证的根本问题
研究传统密码身份验证为何会在服务器端造成攻击面,以及哪些协议能够解决这一问题
密码身份验证的根本问题 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
传统的密码模型
在传统的密码认证中,客户端会将密码(或其哈希值)发送给服务器,服务器再将其与存储的值进行比较。这种模型虽然简单,却将巨大的风险集中在服务器上:一旦数据库遭到入侵,所有用户的凭据可能同时暴露。
服务器遭入侵与哈希破解
当攻击者入侵服务器并窃取密码数据库后,就可以在没有速率限制的情况下,充分利用 GPU 的速度进行离线字典攻击。现代 GPU 每秒可以针对 bcrypt 或 SHA-256 哈希测试数十亿个密码猜测值,因此弱密码或常见密码很容易被恢复。
密码复用会放大入侵影响
研究一再表明,大多数用户会在多个网站重复使用密码。因此,一台服务器遭到入侵,就可能泄露能够登录其他服务的凭据。凭据填充攻击会自动将泄露的用户名和密码组合发送到热门网站进行测试,使一次入侵演变成多起入侵。
网络钓鱼绕过服务器端防护
服务器端密码强化措施(强哈希、加盐、速率限制)无法防护网络钓鱼。当用户在仿冒网站上输入密码时,攻击者会直接获取明文密码,无论合法服务器如何安全地存储密码。如今,网络钓鱼是最主要的凭据窃取途径。
大规模凭据填充
暗网上公开提供着来自历史数据泄露事件的数十亿组用户名/密码对。攻击者使用自动化工具,以工业级规模将这些凭据批量尝试用于金融机构、电子商务网站和电子邮件服务,只要用户重复使用了此前泄露的密码,攻击就可能成功。
服务器会获知您的密码
在传统密码认证中,服务器在登录过程中必然会获知用户的明文密码(即使只是短暂获知,并在哈希处理之前)。这意味着每个服务器运营方都必须被完全信任,确保其不会滥用、记录日志或意外泄露凭据,而在实际中几乎无法保证这一点。
我们真正需要的是什么
理想的认证协议应允许用户证明自己知道密码,同时始终不向服务器泄露密码。服务器也应证明自己是合法服务器(双向认证),从而防止网络钓鱼。即使服务器数据库遭到入侵,攻击者也不应获得任何有用信息。
零知识证明应用于认证
零知识证明为此提供了理论框架:证明者可以让验证者确信某个秘密有效,而不泄露秘密本身。SRP 和 OPAQUE 等密码认证协议应用了这些原理,在不直接传输密码或在服务器端存储密码的情况下实现认证。
抵抗字典攻击
即使服务器存储的数据全部遭到泄露,强大的密码认证协议也应能抵御离线字典攻击。这意味着存储的验证器不能直接用于冒充用户,也不能在没有服务器配合的情况下高效地离线猜测密码。
大规模场景下的信任问题
当数百项服务都要求进行认证时,传统模式要求用户信任每个服务运营方,并将可能在其他地方重复使用的秘密交给这些运营方。解决方案是完全消除密码传输,仅存储不可复用的验证器,并将认证绑定到特定服务器身份,以防止网络钓鱼。
未来方向
现代方案包括 SRP(安全远程密码)、OPAQUE 和 FIDO2/通行密钥。它们分别解决这一根本问题的不同方面。SRP 和 OPAQUE 消除了服务器端对密码的知晓。FIDO2/通行密钥则利用绑定到特定源站的公钥密码学,彻底消除了密码。
密码认证弱点检查
哪种攻击是 NOT 能被强大的服务器端密码哈希(例如 bcrypt)防止的?
课程回顾:密码问题
传统密码认证要求服务器验证其获知的秘密,数据泄露后会导致离线破解,并且无法抵御网络钓鱼。密码复用会将单个数据泄露事件转变为系统性故障。理想的系统应在不传输秘密的情况下提供双向认证,仅存储不可破解的验证器,并将认证绑定到服务器身份。
用 AI 导师学习 Cryptology Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 67
- 课程
- 261
常见问题解答
「密码身份验证的根本问题」课时是免费的吗?
是的 — 「密码身份验证的根本问题」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「密码身份验证的根本问题」这节课中我会学到什么?
研究传统密码身份验证为何会在服务器端造成攻击面,以及哪些协议能够解决这一问题 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「密码身份验证的根本问题」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。