资讯专栏INFORMATION COLUMN

密码学是科学而非工程学

陈伟 / 376人阅读

摘要:我认为学习密码学,不仅不需要写代码,而且编写攻击代码对于学习现代密码学根本毫无用处。学习现代密码学最好的方式是研究数学论证。这就是纯粹的工程学。我相信托马斯所做的事情,以及他在实施密码攻击上所积累的经验是非常有用的。

托马斯.普塔切克曾经发过一条Twitter“如果你不是编写攻击代码的时候学习的密码学,那么你可能根本没有在学密码学”。 从Twitter上对这条信息的关注及其引用数来看,它似乎得到了很多人的认同。尽管我很尊重托马斯,但我绝对不同意他的观点。我认为学习密码学,不仅不需要写代码,而且编写攻击代码对于学习现代密码学根本毫无用处。学习现代密码学最好的方式是研究数学论证。

如果我们仍然是处在20世纪90年代的话,我会同意托马斯的观点。当时的密码学充满了漏洞,你能想到的最浪漫的事就是了解你的工具是如何崩溃的,因为之后你就可以去解决它们的问题。那时,DES和RC4加密算法,尽管有很多已知的缺陷,却被广泛地使用;那时,人们避免使用CTR模式去转换块密码到序列密码,因为他们担心如果所提供的输入数据块中包含有很多相同(0)数据的话,脆弱的块密码会被破解;那时,人们关心块密码的误差传播能力,这关系到在密文中有少量的位发生未知变化后,对于解密数据的正确性会产生多少影响;那时,人们通常建议在加密数据前,先对其进行压缩,因为这将会“压缩”信息熵使得攻击者即使得到了秘钥也很难理解密文。因此,诞生于这个时代的SSL,有很多很多的缺陷,也就不足为奇了。

但是,从2010年开始密码学变得完全不同了。现在,我们开始有了可以高度信赖的的基础构件——比如:块密码已被确信是近似随机排列,并且已经从数学上证明它是足够安全的,可以抵御某些类型的攻击——比如:AES是已知的可以抵御差分密码分析的加密算法。我们以这些组件为基础,利用已被证明是不会引入漏洞的机制创建高阶的系统。例如,如果你在CTR模式下,使用类随机排列的块加密算法(比如,AES)对数据加密,从而产生一个有序的分组序列,并使用分组序列号作为CTR随机数,然后追加一个不易伪造的针对被加密数据的MAC地址(比如,HMAC-SHA256)及分组序列号,那么这些分组既可以保密数据,也可以禁止任何未声明的篡改(包括报文重放和重新排序)。一旦Keccak(即SHA-3)得到更加广泛地检验和信任,生活甚至会变得更加美好,因为它类似海绵的弹性结构去构造大量重要的加密构件,这已经被证明是安全的了。

在20世纪90年代的密码学就像是在尝试建一种桥,你花了许多时间确保你的桥能屹立不倒,并且为此忧心忡忡,即使有一些地方焊接的不够完美,一些螺丝生锈了,由于周期性的负载导致的金属疲劳,等等。虽然从理论上讲量身定制可以有很好效果,但你知道的实际总是与理论不符,因此这座桥实际是建在了安全与不安全的边界上,这使得桥的构造成本更高,也更加复杂。这就是纯粹的工程学。

但是,现代密码学是截然不同的,它不是在建造一座桥,而是像规划一个依靠重力辅助的星际的轨道。当然,这是复杂的,你必须正确的掌握所有的细节。但是,如果你做到了,一旦开始运行,使你无法到达目的地的唯一可能就是物理或数学定理改变了。现代密码学已经充分地发展到理论与实际相符,因此,相比通过观察桥的倒塌进行学习,理论学习就已经十分有效了,然后你需要遵从一个简单的原则:只做数学告诉你你能做的事情。这就是纯粹的科学。

我相信托马斯所做的事情,以及他在实施密码攻击上所积累的经验是非常有用的。毕竟,他是以挖掘应用缺陷为生,但他所遇到的绝大多数加密方法很可能是20世纪90年代的加密方法,那是一个已经逝去的时代。因此对于开发者,我推荐以一个更加现代化的方法学习密码学,那就是学习理论并设计出你能证明是安全的系统。


原文 Cryptography is a science, not engineering
翻译 周耀平
via idf.cn

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11081.html

相关文章

  • 阿里云又添最强大脑:理论计算机最高奖得主马里奥入职达摩院

    摘要:据阿里云官方消息报道,两次理论计算机最高奖哥德尔奖得主匈牙利裔美国计算机科学家马里奥塞格德入职阿里巴巴达摩院位于西雅图的阿里云量子实验室。据阿里云官方消息报道,两次理论计算机最高奖哥德尔奖得主、匈牙利裔美国计算机科学家马里奥·塞格德(Mario Szegedy)入职阿里巴巴达摩院位于西雅图的阿里云量子实验室(AQL)。马里奥·塞格德出生于盛产科学家的国度匈牙利,研究领域包括量子计算和计算复杂...

    csRyan 评论0 收藏0
  • 你需要知道的软件工程师和码农的区别

    摘要:解决问题的心态软件工程师不认为编程是他们事业的全部。好的软件工程师以经验和直觉判定。环境与测试软件工程师写的程序要保证在不同环境,不同时区正常工作。软件缺陷是不可见的,我们预测和避免缺陷的能力也是有限的,所以软件工程师懂得利用工具矫正代码。 原文 Software Engineering is different from Programming 一些人因为工程这个词而不喜欢软件工程...

    jubincn 评论0 收藏0
  • Python与R、Matlab的对比

    摘要:我们来看一下美国相关专业人员对两者的对比,只是粗略而不精准的翻译一下。小结其实在写这篇文章之前,我就问过一下包括清华在内的学校以及一些数学专业的学生,和还是占主流,但是经过一番调查发现在美国在数据科学数学等方面好像渐成压倒性的优势。 作为一枚程序员,想要研究Python编程语言与数学学习(教学)的结合,就不能不了解以及比对一下其他数学学习与应用的解决方案,比如R语言、Matlab等数学...

    yunhao 评论0 收藏0
  • 用Python相关教程、开源包推荐与下载

    摘要:在上篇文章里,为大家推荐了一些数学学习的软件和微积分线性代数概率统计的学习视频,今天再推荐一些精心挑选的经典教材,并为大家提供电子书的下载链接,和视频搭配起来一起学习,效果会更好。我们要使用的以及等都包含在里面,无需额外下载。 在上篇文章里,为大家推荐了一些数学学习的软件和微积分、线性代数、概率统计的学习视频,今天再推荐一些精心挑选的经典教材,并为大家提供电子书的下载链接,和视频搭配起...

    wapeyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<