提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
柯克霍夫斯(Kerckhoffs)原则中有一句描述为:
密码算法的安全性不取决于密码算法本身的机密性,而取决于密钥的机密性。
怎么来理解这句话呢?
一、疑问引入
对于这个说法,我有一个朋友就觉得,我在进行数据加密时,选择了一种密码算法,我对算法进行保密。破译者需要猜测我的算法,而这个具体的算法,可以自动构造,也可以使用现有的算法,在进行组合的情况下,可以说是无穷无尽,不也同样能达到效果吗?为什么不取决于密码算法本身的机密性呢?
二、理解
原因一
如果单纯依赖算法的机密性,一旦算法泄漏,就没有挽回的余地。比如古典的密码体系,就是通过加密算法本身而不是密码来加密的,一旦算法泄漏,在当前基于计算机运算而非手算的情况下,破译就非常快速。
原因二
公开算法,利于对密码算法的安全性进行公开检验和测试。
原因三
便于定期更新。如果是依赖于算法的机密性,定期更换则难度很大,因为算法相对有限,而密钥则可以大量生成。而且算法实现后,对算法存储设备、计算设备、算法程序、运行方式等均有关联,算法更换难度大。