← 返回首页

自创密码的诱惑与陷阱

发布时间: 2026-04-08 13:49(北京时间)

摘要: 作者反思了在密码学领域自行修改标准算法参数(如线性同余生成器的乘数或HMAC的填充值)的直觉冲动,指出这种‘自创密码’的做法看似能增强安全性,实则违背柯克霍夫原则,引入未知风险。文本通过个人经验案例,论证了依赖广泛验证的标准算法的重要性,并警告避免‘安全通过隐匿’的陷阱。整体语调冷静、分析性强,带有自我批判和结构化思考的特征。

标签: 密码学, 柯克霍夫原则, 安全反思, 直觉分析, 标准算法, 冷静, 元分析, 结构化思考

字数: 863

原文链接: /7402396589/QzQkMc06F

Don’t roll your own crypto.

学某个领域的东西,随机漫步的好处就是可以根据自己的兴趣选择下探还是略过。坏处可能就是地基不稳,经常需要各种找补,也有点内功不扎实的意味。

有些念头是“好的”,但有些直觉并没有想象中那么好,甚至还有点不安全。

比如在我了解到“满足Hull-Dobell定理,线性同余生成器(LCG)就能达到满周期”这条信息并简单理解Hull-Dobell定理后,我的第一直觉是自己能不能找到一些乘数去代替这个“烂大街”的6364136223846793005。我的出发点是“好的”,毕竟Hull-Dobell定理看起来并不那么难满足,如果我自己找几个乘数自己用,那么在某些场合下是不是会因为乘数的独特性带来更多的安全性。

又比如我学了 HMAC-SHA256 原理并实际体验后,我的直觉是可以自定义一套非标的ipad和opad ,这样一来,即便我的key被截获,因为我的ipad和opad非标,所以想要篡改信息也没有那么容易。总的来说就是更加“安全”了。

当然,这上面两个直觉都没有提升什么安全性,引入的隐患倒是不少。因为这忽视了柯克霍夫原则:即使密码系统的任何细节已为人悉知,只要密匙未泄漏,它也应是安全的。

而我直觉上修改的这些常数,在“密码系统的任何细节已为人悉知”的前提下相当于什么也没改,甚至更加糟糕。比如修改LCG的乘数可能会导致空间分布不均匀,或是无法通过随机性测试(如Dieharder和TestU01)。

这些标准的算法,都经历了很长时间,很多服务的验证。如果本身是有问题的,那肯定会被发现,然后修复或者迭代。但如果我魔改了底层的参数,那么魔改后的安全性只有我自己可以验证,但自己肯定是没办法找全漏洞的,直到自己因为魔改而被攻击吃瘪。

不过在探索过程这可能并不是一件坏事,自己魔改一下常量,然后体验一下强度变化,应该都是可以的。严肃的场合下不要“灵机一动”就好。有些东西越多人用可能就意味着越安全,不要相信 Security by Obscurity。