密码和密钥的大部分工作都与控制它们的存储和复制位置有关。
密码存储在人类用户的脑海中。它在键盘(或等效设备)上输入,并在处理时通过 CPU 的寄存器和计算机的 RAM。除非犯了一些可怕的错误,否则密码永远不会到达像硬盘这样的永久存储区域。
算法作为源代码存在于某处,在开发人员的机器上、源版本控制系统和备份中。有一些设计文件,已经展示给不同的人(例如那些决定是否资助系统开发的人),并且经常被忽视地存放在典型桌面上某层外壳的匿名架子上。更重要的是,该算法还作为一些可执行文件存在于部署的系统本身上;二进制不像源代码那样可读,但逆向工程仍然有效。
因此,我们不能合理地认为该算法是秘密的,或者至少与密码(或密钥)一样秘密。
确实,密码学方法在一个世纪前被拆分为算法和密钥,正是因为如此:在一个正常运行的系统中,部分方法必然会到处泄漏痕迹。拥有密钥意味着将秘密集中在另一半,即我们可以保密的部分。
“通过默默无闻的安全”是一个使用术语默默无闻的表达方式,而不是保密性。密码学是关于通过保密来实现安全性。这就是全部区别:密码可以是秘密的;算法充其量是晦涩难懂的。一旦某个聪明人想到带一个隐喻的灯笼,默默无闻就被驱散了。保密更像是一个钢铁保险箱:要突破它,你需要更强大的工具。
聪明人Auguste Kerckhoffs已经在一个多世纪前写了它。尽管发明了计算机和今天的所有技术,他的发现仍然适用。密码学从业者花了一段时间才学会了这一课。60 年后,德国人仍在对Enigma 机器的设计“保密” 。请注意,当德国人将 4 旋翼海军谜团投入使用时,盟军的密码学家们感到不便(例行破解停止了几个月),但并没有完全感到困惑,因为前一年的一些捕获的文件暗示了新版本的开发,其中第四个“反射器”转子。你有它:算法保密在实践中无法实现。
另一个转折是算法晦涩难懂会损害安全性。我在上面解释的是,在安全性方面不能信任模糊性:它可能会增加安全性,但不会增加太多(而且你无法真正知道“多少”)。事实证明,它也会降低安全性。问题如下:制定安全的密码算法非常困难。唯一已知的方法是发布该算法,并等待世界各地密码学家的集体智慧来啃它并得出一个结论,该结论可以表示为“可以那样破解”或“显然很健壮”。算法被宣布为“好”
互联网、学术拖延和人类狂妄自大,通过正确的沟通活动,你可以让这几百名密码学家免费完成这项艰巨的评估工作——前提是你将算法公开(并以某种方式“有吸引力” )。如果您想保持算法晦涩难懂,那么您无法从这种免费咨询中受益。相反,您必须付费。二十位优秀的密码学家,比如说,两年的努力:我们在这里谈论的是数百万美元。没人这样做,太贵了。相应地,晦涩的算法总是比公共算法的压力测试少得多,因此安全性较低。
(注意小字:安全性不仅是关于不被破坏,而且是关于不会发生破坏的先验知识。我希望能够在晚上睡觉。)
概括:
- 你不应该对你的算法保密。
- 你不知道你的算法有多少是秘密的。
- 你不能对你的算法保密。
- 但是您可以而且必须将密码保密,并且您可以知道它是“多少”秘密(这就是所有“熵”业务)。