你可能已经听说过这样的故事:某家知名公司因为自己“发明”了一套加密算法,结果被黑客轻松攻破,数百万用户的密码泄露。或者,某个开发者用了一个不安全的随机数生成器,导致密钥可以被预测,整个系统形同虚设。这些悲剧的背后,往往不是算法理论的问题,而是工程实现的错误。
密码学是数学,但密码工程是手艺。一个算法再强大,如果在实现时犯了错,它依然脆弱不堪。历史上无数数据泄露事件,不是输在算法,而是输在实现——ECB模式、固定盐值、弱随机数、侧信道泄露……这些都是“自己发明轮子”的代价。
这一章,我们不会讨论复杂的数学公式,而是聚焦于如何正确地把密码学用到真实系统中。我们从一条铁律开始:永远不要自己发明密码。然后,我们会逐一拆解那些常见的陷阱——随机数生成、侧信道攻击、时间攻击,告诉你它们为什么危险,以及如何避免。接着,我们会教你如何选择成熟的密码学库,以及如何正确地调用它们(因为即使是库,用错了也等于没用)。最后,我们用 Python、Go、Java 三种语言的代码示例,展示一个安全的加密流程应该长什么样。
如果你是一个开发者,或者正在学习如何把密码学应用到实际产品中,那么这一章是你的必修课。读完之后,你不仅能写出更安全的代码,还能理解为什么“自己发明”是灾难,而“站在巨人肩上”才是正道。