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。