请点击上方蓝字TonyBai订阅公众号!
大家好,我是Tony Bai。
欢迎来到我们《Go 密码学实战》微专栏的最后一站。在过去的六篇文章中,我们上天入地,探索了从加密、认证到签名的各种密码学“积木”。我们学会了如何保护网络上传输的数据,如何验证通信方的身份。
现在,让我们回到所有系统的原点——用户认证。几乎每个需要登录的应用,都面临着一个最古老、也最严峻的安全挑战:我该如何存储用户的密码?
这个问题看似简单,却是一个布满陷阱的雷区。无数次的数据泄露事件告诉我们,即使是知名公司,也可能在这个问题上犯下致命错误。
存储明文密码? 这是绝对禁止的,一旦数据库泄露,所有用户的密码将瞬间暴露。
用 SHA-256 哈希后存储? 这比明文好,但远远不够!攻击者可以使用彩虹表 (Rainbow Table) 或**暴力破解 (Brute-force)**,在短时间内破解掉大量简单密码。
为什么像 SHA-256 这样的通用哈希函数不适合存储密码?因为它们被设计得太快了!一台现代 GPU 每秒可以计算数十亿次 SHA-256 哈希,这意味着攻击者可以以惊人的速度尝试各种密码组合。
为了解决这个问题,我们需要一类特殊的、“刻意变慢”的哈希算法。这便是密钥派生函数 (Key Derivation Function, KDF) 的核心思想。