密码学是工程学还是科学?

回复一个推特Thomas Ptacek说过,“如果你不是通过编码攻击来学习密码,你可能并没有真正学习密码,”科林·珀西瓦尔发表了一篇深思熟虑的文章反驳,在某种程度上说:

如果我们还在90年代,我同意托马斯的观点。90年代的密码学漏洞百出,你所能期望的最好的结果就是知道你的工具是如何坏掉的,这样你就可以试着解决它们的缺陷。这是DES和RC4被广泛使用的时期,尽管有众所周知的缺陷。当时人们避免使用CTR模式将分组密码转换为流密码,由于担心如果共享许多(零)字节的fed输入块可能会导致弱块密码中断。当时人们关心的是分组密码的“错误传播”特性——也就是说,如果密文中有少量位被翻转,会有多少输出被破坏。在那个时代,人们通常建议在加密前压缩数据,因为这压缩了信息中的熵,这使得“攻击者更难以识别他何时找到了正确的密钥”。SSL,设计于这个时代,有一长串的设计缺陷。

2010年代的密码学则有所不同。现在我们从被认为是高度安全的基本组件开始——例如,块密码被认为与随机排列无法区分,并且在数学上已被证明对某些类型的攻击是安全的,例如,已知AES对差分密码分析免疫。从这些组件,然后,我们使用已被证明不会引入漏洞的机制构建高阶系统。例如,如果您使用与随机排列块密码(例如,(AES)在CTR模式下,使用包序列号作为CTR nonce,然后附加一个弱不可伪造的MAC(例如,加密数据和数据包序列号的HMAC-SHA256),这些数据包既保护隐私,又不允许任何未被检测到的篡改(包括重放和重新排序数据包)。生活将变得更好,一旦Keccak(又名。SHA-3)得到更广泛的审查和信任,由于其“海绵”结构可用于构造——具有可证明的安全性——非常广泛的重要加密组件。

他推荐了一种更现代的密码学方法:“研究你可以研究的理论和设计系统证明是安全的。”

我认为这两个这些说法都是正确的,一点也不矛盾。这种明显的分歧源于对密码学的不同定义。

许多年前,在RSA会议的密码专家小组中,then-chief scientist for RSA Bert Kaliski talked about the rise of something he called the "crypto engineer." His point was that the practice of cryptography was changing.有传统的数学密码学——设计和分析算法和协议,建立密码学理论——但也有一种更注重实践的密码学:利用现有的密码学构建块并从中创建安全的系统。他称之为密码工程师的是后者。这是我写的一群人应用密码学,而且,最近,作者加密工程,对。科林知道这一点,将他的建议传达给“开发人员”——哈利斯基的密码工程师。

传统密码学是一门科学——应用数学——应用密码学是工程学。我更喜欢“安全工程”这个术语,因为它包含的内容肯定比密码学多得多伟大的书叫这个名字的。工程上的错误是许多真实密码系统崩溃的地方。

可证明的安全性有其局限性。密码学家Lars Knudsen曾经说过:“如果它被证明是安全的,it probably isn't." Yes,我们有安全的密码学,但是这些证据采取非常具体的形式来对抗非常具体的攻击。它们减少了我们对系统的安全假设的数量,但我们仍然需要做很多安全假设。

密码学有它的局限性,尽管有明显的优势。密码学的强大之处在于它给了防御者一个天然的优势:在密钥中添加一个比特只会增加少量的加密工作,但破解加密所需的工作量翻了一番。这就是我们设计算法的方式——理论上讲——在宇宙自行坍缩之前,这些算法是无法被打破的。

尽管如此,密码系统一直在被破坏:远在宇宙热死之前。它们之所以坏掉,是因为在编码算法时出现了软件错误。它们之所以坏掉是因为电脑的内存管理系统把钥匙的一个零乱的拷贝到处都是,操作系统会自动将其复制到磁盘上。由于缓冲区溢出和其他安全缺陷,它们被破坏。它们被侧道攻击破坏了。因为糟糕的用户界面,或者不安全的用户实践。

很多人他说:“理论上,理论和实践是一致的。但在实践中,they are not." It's true about cryptography.如果你想成为一名密码学家,研究数学。学习密码学的数学,特别是密码分析。科学中有很多艺术,在你获得破解现有算法和协议的经验之前,你无法设计出好的算法和协议。如果你想成为一名安全工程师,研究实现和编码。拿密码学家创造的工具来说,并学会如何使用它们。

这个世界需要的安全工程师甚至比它需要的密码学家还要多。我们擅长数学上的安全密码学,在使用这些工具来设计安全系统方面也很糟糕。

写这篇文章后,我发现了一个谈话两者之间,他们基本上都同意我的观点。

发布于7月5日,2013年7月4日上午•24日评188滚球网站论

188滚球网站评论

Stefan挚7月5日2013年49点

当您为密码学给出两个“定义”时,(密码科学与密码工程,正如你所说),无论是甚至远程相关“如果百度€™不学习加密编码的攻击,你可能没有学过密码。”

其次,我不相信密码科学和密码工程之间的二分法。(我更喜欢其他名字,but so what.) Science and engineering are the two poles in the world of crypto,但任何优秀的密码学家都必须理解这两者,而几乎所有真正的密码学工作都介于两者之间。正如地球的大部分既不在北极也不在南极,但在两者之间。

(我认为有这么多糟糕的密码存在的主要原因是太多想成为密码设计者的人要么理解科学部分,要么不理解工程部分,或反之亦然。这就是让我对你的文章感到不安的地方——你的信息似乎是“要么选择科学部分,要么选择工程部分,要么是好的”,而我认为信息应该是“如果你喜欢数学,想做密码,你还必须了解工程学,如果你喜欢工程并且想做密码,你还必须做数学,否则,永远不要做密码。

作为一个例子,有很多加密实现可以不止一次使用nonces,在某些情况下。如果您不理解这个理论——为什么永远不允许nonce重用(对于某些加密系统)如此重要,你很可能会犯那个错误。所以即使

作为一个更具体的例子,想想2011年对TLS的野兽攻击。这是一个实际的例子,通过一些相当勤奋的开发和一些艰难的编码工作。所以它似乎是在工程方面被发现的。然而,这次攻击是基于10年前Phil Rogaway的理论观察。很显然,TLS记录协议(或当时的SSL)的作者,其中的加密工程师没有正确理解他们本应理解的理论——否则,他们从未想过使用CBC的“chain IV”模式。(第一个信息的IV是随机的,所有其他消息都使用前一个消息的最后一个块作为它们的IV。

BEAST作者的主要创新是让TLS实际上加密了一些选定的明文。这似乎是一个伟大的密码工程(或攻击工程)。但如果不理解理论(密码科学),他们不可能攻击任何东西。

举个设计方面的例子,…这是斯京。或任何其他精心设计的哈希函数——包括Keccak。你不能从头开始设计一个合理的哈希函数,对基础理论(密码科学)和实际问题有很好的理解,如何有效地将其应用于软件或硬件。

Bruce 188滚球网站Schneier7月5日2013年52点

@Stefan

有趣的是,和令人信服的。你说得对,很多实际的密码学都是理论和实践相结合的。

汉诺7月5日2013年14点

“这是DES和RC4被广泛使用的时期,尽管有众所周知的缺陷"

几十年后的今天,RC4仍然被广泛使用:-)

QnJ1Y2U7月5日2013年14点

你可以想象,非专业人士对密码学术语甚至更困惑。这篇关于斯诺登和美国国家安全局的文章因为各种各样的原因让人翻白眼,但关于“加密”的说法有些夸张:

http://www.washingtonpost.com/opinions/marc-thiessen-the-danger-of-what-edward-snowden-has-not-revealed/2013/07/01/67f95a18-e251-11e2-aef3-339619eab080_story.html

随后的twitter对话并没有改善。一些片段:

https://twitter.com/ggreenwald/status/351728841116499972
https://twitter.com/marcthiessen/status/351737348544933890
https://twitter.com/20committee/status/351785839778480129
https://twitter.com/jaysonblair7/status/351805362116116482


普林斯顿大学7月5日2013年42点

“不要重复使用nonce”只是一个声音字节。初始化向量通常只是附加到密码文本中,但它的源是什么?很多时候,源是PRNG但你不会打乱随机数源的输出,在所有。没有随机数这种东西,只有随机数的来源(冯·诺依曼)。如果源确实是随机的,那么同样的数字有可能连续输出两次。当你说"哦,这是同样的数字,那么它就不再是一个随机数源了。我可以生成随机字符的页面,并在其中找到一个看似智能的字符串。它的意思是,不要储存任何东西。不要储存任何东西。不要储存任何东西。但人们不是这么说的。

事实上7月5日2013年48点

Crypto.cat is a good example of why proper coding is essential as its been broken so many times now I can't count.http://tobtu.com/decryptocat.php

密码破解速度仅为3MH/s,Lastpass在一个合理的时间内使用7970gpu在750MH/s

普林斯顿大学7月5日2013年52点

密码讨论的上下文常常模糊不清。通常他们谈论的是加密而不是密码学。您是在保护静止的信息还是在保护通信中的信息?我的一本旧课本,金宝搏博彩公司优秀的材料,是Koblitz的“数论和密码学课程”,但它只涉及与共享密钥系统相关的数学,几乎没有涉及块密码设计。其他材料将所有密码学视为仅仅由p盒和s盒的各种排列组成。

普林斯顿大学7月5日2013每天上午9点

想象一下,有一间黑屋子,里面聚集了一群人。门在他们身后关上了。在室内,温度会慢慢上升,直到它们都在高温中被消耗殆尽。每次他们开始尖叫,要求某人做某事……另一个人喊道:“开门!”Don't go out there!" and another "Just wait here." That is the current state of information security.

普林斯顿大学7月5日2013年9:19我

第二章。
一个小时过去了,房间里的温度开始变热。几个倒塌。他们在扇子里放了一些文件夹纸,可以卖给别人。最后有人伸手去开门。门把手烫伤了他们的手。其他人尖叫道:“有人告诉你不要开门!”That's what you get!" Then they beat him and threw his body into the corner.

博士。我。Needtob雅典7月5日2013年36点

“传统密码学是一门科学……”

我想知道。我很难找到它的定义科学这包括密码学。我看到的大多数定义都是指对自然的观察,或者研究宇宙,但密码学似乎独立于现实世界。它是如何适应的?这当然是数学的一个分支,数学被认为是科学的语言,但从技术上讲,它本身就是一门科学吗?

杰夫Warnica7月5日2013上午10:05

也有,甚至超越了密码工程,另一层,没有比这更好的词了,我们称之为操作。

作为系统管理员,所有我需要配置密码的东西,我总觉得其他人都已经彻底洗手不干了,不再生产真正有用的东西。

Joel Spolsky将漏出的抽象视为简化的一个不可避免的副作用。如果配置Apache或使用openssl(1)泄露了一些容易忘记的细节,那就太好了。我不确定是不是因为研究这个的学者不关心现实世界的可用性,或者那些从事加密工作的人身边有律师……每一层都增加了尖锐的边缘,可以让我的头撞进去,也可以让我走过破碎的玻璃。

例如,我不认为apache mod_ssl知道密码,刚刚公开了openssl的所有选项,并设法拼凑出一个基本“工作”的模板配置。像我这样的凡人,怎么能知道在这个世界之外有多安全呢?设置的哪些组合和交互是合理的?我没有时间解读openssl文档的全部深度,当然,还需要解码的学术论文的全部深度支持的实际低级算法。

有人在做配置检查来阻止我进入21世纪的双rot -13吗?

我知道有些人花上数小时或数天来调整他们的设置,我不相信他们中的一些人会去买食品杂货,有些我非常尊重。我害怕自己被双重腐蚀,我通常使用默认值,担心它们在今天是合理的,而不仅仅是有人在1999年创造出来却被遗忘的东西。

name.withheld.for.obvious.reasons7月5日2013上午10:45

@bruce

这让我无法适应应用空间的变化:

美国国家安全局获取这些文件(特别是加密的文件)允许了一些直到最近才可能发生的加密攻击。

这是我对存储在Microsoft Word等文件中的salt的关注。随着这些文档被你知道的人缓存,我想第一个目标是特定文件的盐分。为什么,解密数据过去是通过干草堆,看另一堆干草。当一个源产生加密数据时,它通常是在很短的不确定周期内。因此,功能加密分析在使用强私有和受控密钥破解rest文件时相对较弱。但是,如果你有所有来源的所有文件,事情开始发生变化。

现在一点点的熵会消失…

wumpus7月5日2013年十一17点

“当时人们避免使用CTR模式将分组密码转换成流密码,由于担心弱块密码可能会中断,如果美联储输入块共享许多(零)字节的公共。

如果你在使用CTR的时候有“很多个0”,你会遇到比打破这些0的可能性更大的问题。您很容易忘记,在此方案下绝对不能重用密钥。重复使用任何键,就会出现重复使用一次性键盘的所有问题。

奇怪的是,我最近主要看到了CTR+CBC的使用(使用加密的种子启动计数器也可以解决密钥重用问题。无论如何,CTR+CBC很可能会包括一种盐,因此没有传输效率问题)。这打破了使用CTR的一个主要原因(您可以并行计算任意数量的块),但是消除了“许多零字节”的问题。实际上,我怀疑没有人关心字节是否为零,仅仅一个计数器就意味着序列之间平均有两个比特的变化。首先,这有点弱(它甚至可能匹配某些选定的明文),其次,还有一种危险,即在轮与轮之间变化不够。如果第二轮(还有几轮)没有完全改变,您也可以使用简化的圆形加密方案。它可能仍然是安全的(这个东西最好是为这种情况设计的),但实际上,与CTR+CBC相比,您使用的是一个简化的圆形密码系统,一个XOR将提供完整的圆形系统。

莫特7月5日2013年一下午

@princeton
"不要重复使用"不是"只是一个声音字节"它实际上是一个nonce的定义。
如果随机生成nonces,同一个数“有可能”连续输出两次,但对于大型非物质而言,这种可能性完全可以忽略不计。对于较小的非ces随机生成将是灾难性的,但是一个简单的计数器可以很好地工作。

我想底线是,像往常一样,大多数开发人员应该使用能够自动处理此问题的库。

尼克P7月5日2013年下午2点

@ Bruce 188滚球网站Schneier

我偶然发现了这个不错的小项目,正在阅读你链接到的讨论。它在可用性上似乎比流行的密码库要高很多,安全性和性能。你很少一次得到所有这些。

NaCl密码(Bernstein等)
http://nacl.cr.yp.to/features.html

尼克P7月5日2013年46点

我忘了说它似乎解决了其他评论者的一些困难,188滚球网站在ycombinator,提及。主要动作只是一个功能。错误处理,侧槽预防、原始的选择,等都是内置的。只要调用这个函数,就完成了。

瑞克史密斯7月5日2013年具体点

实际的边境地区可能还没有调查,但我同意密码工程有一个独特的领域,正如计算机架构可以独立于电路设计。

在这两种情况下,我们都试图建立设计规则,以便工程师能够构建具有可预测属性的东西。在这两种情况下,我们都可以挑战这些规则的极限,从而导致灾难。

很多人被密码机制的理论数学力量所误导,他们让完美成为善良的敌人。

MingoV7月5日2013年下午几点

“传统密码学是一门科学——应用数学……”

应用数学不是一门科学。我教统计,我从不认为这是一门科学。它是一套对科学家和其他人有用的数学工具。

科学需要科学的方法(我的版本):观察一个尚未解释的现象,假设一些与现象相关的非琐碎的东西,在受控条件下进行观察(如:实验),分析结果,并评估假设是否被证实。

如何用密码学做到这一点?如果密码学是一门科学,那么,开发创造独特数独游戏的最佳方式也是如此。

马修绿色7月6日2013年3:10我

正如上面给Stefan的提示:

对野兽理论的理解可以追溯到2001年,但是TLS 1.0可以追溯到1999年。TLS的设计者(或者更确切地说,OpenSSL的维护者)非常清楚/在/被指出后/块选择明文攻击的问题,但是他们被一个糟糕的规范所困。(They did hack mitigations into OpenSSL starting in about 2002.) In a perfect world they would have guessed the problems before someone explicitly told them about it,但不管。

TLS的设计者们被判终身监禁的原因是TLS 1.1(2006)的规范,其中他们提出了一系列可疑的修正,他们承认其中一些没有经过仔细分析。

关于Colin的观点:我已经亲自考察了一些可以使用Colin的CTR+HMAC描述作为起点的产品。有些人还是做错了。

冷冰冰的人7月9日,2013年14点

密码学是工程学还是科学?
根据卡尔·波普尔,如果密码学是不可证伪的,它就不是一门科学。
是这样吗?
只要有足够的时间和资源,所有密码系统最终都会被破解。因此它是可证伪的。(即使OTP也容易受到橡胶软管密码分析的影响。)

简单的答案是密码学是:
科学的一部分,部分工程,和艺术的一部分。

例如:我拥有“计算机编程的艺术”,"编程科学"“编程的实践”和“软件工程”,我喜欢它们都有不同的原因。

除了文字游戏,密码学中的“艺术”可能与Bruce创造的短语“安全思维”同义。

所以我的结论有点无聊:我同意布鲁斯的观点。
学习传统密码学需要学习如何破解密码系统。
要学习安全工程,就必须学习如何破坏计算机系统。

这就提出了一个有趣的问题:“如果我研究如何通过浏览互联网来破坏计算机系统,我的互联网流量被国家安全局收集并存储在他们的数据库中——国家安全局什么时候会决定我是白帽子还是黑帽子,并从他们的系统中清除我的数据/元数据?从来没有?”

让我们让他们更容易:我访问这个博客并阅读Bruce的书,因为我想学习如何构建有用的计算机系统金宝搏博彩公司尽可能地保护我的客户。
我宁愿做最好的安全工程师,而不是一个想要成为密码设计者的人。
(我想知道到目前为止我在这个博客上留下了多少“身份信息”?)

密码工程与密码科学的两分法感觉有点人造。

一个更好的讨论话题是:


社会工程和社会科学哪个更有趣、更有利可图?

克莱夫·罗宾逊7月9日,2013年5:55到达

@博士。我。Needtob雅典,

    我很难找到包括密码学在内的科学定义。我看到的大多数定义都是指对自然的观察…

没有密码学不是传统意义上的科学有几个原因,第一个是,正如其他人注意到的数学的一个子集,其次,它与有形物体无关,能量或力。

最初的科学,如我们现在所称,被称为“自然哲学”,将其与宗教区分开来,包括各种逻辑形式的法律及其背后的哲学。

本质上你可以把科学看成是量子物理的基础科学,把物理学应用于物理对象,能源和力量,从化学到生物学,再到你通过哲学和道德等进入炭疽热的软科学,最终你会再次进入宗教。爱因斯坦几乎涵盖了前量子科学的全部内容他断言上帝不会和世界玩骰子。

但你会注意到,即使你通过哲学中的逻辑来理解真理,数学也不会出现在列表中。原因是它是一种描述物理世界建模的方法。它实际上就像一幅物理对象的图画,它使用信息来表达关于物理对象的意义。数学可以用来模拟世界的原因有两个方面,首先我们知道如何用一致的尺度来量化和比较心房肌,其次,在我们的物理世界中,由于我们所认为的自然法则对物理对象的各种限制,所有的事件在一定程度上都是概率性的。

数学使我们能够以一种抽象的方式描述我们周围的物理世界,但它不会以任何方式塑造物理世界。因此,我们可以用数学公理和规则所赋予的任何我们喜欢的方式来摆弄抽象的描述,但总的来说,这种玩法在物理世界中是没有意义的。为了赋予意义我们观察物质世界,通过这些我们可以做出预测然后我们通常可以把这些预测变成数学模型,然后我们用不同的方法来测试它们是否与物质世界一致。我们经常发现我们的模型不完整或不完全符合物理世界(想想牛顿运动定律)。当我们发现一般情况下的异常时,我们用它们来建立新的模型,这就是为什么有人说:“在物理学中,你被教导一连串的谎言,这些谎言不断地、更准确地接近真理。”

重要的是,即使我们知道模型是错误的,我们仍然可以继续使用它,因为它对我们头脑中的特定应用程序“有效”。例如,牛顿的运动定律对于计算绕地球和太阳系的轨道路径已经足够了,然而,它们对于GPS系统来说是不够的,我们需要使用爱因斯坦定律来获得期望的精度和可重复性。

所以数学不是一门科学,而是一种研究科学的工具,它在物理世界中的应用是不可知的。密码学不属于物理世界,它描述了如何操作独立于物质/能量和约束它们的物理定律的信息。

记住这一点很重要,因为我们的加密模型来自安全性方面,这只是物理实现安全性的一小部分。例如,你见过一种密码算法,专门考虑了自然法则对物质和能量的影响吗?

Figureitout7月9日,2013年41点

社会工程和社会科学哪个更有趣、更有利可图?
冷冰冰的人
抱歉在你的玉米片里大便,但以上都不是。SE是有风险的如果你真的这么做了如果你被抓住了你真的没有任何合理的借口;更不用提公然欺骗某人的眼睛/耳朵/脸,很卑鄙。SS是一种软绒毛它并没有使用主要的工具使其成为一门受人尊敬的科学,数学。所以,请为了人类的利益,不要鼓励它,并坚持与密码和编程b/c你创造更多的价值;即使从理论上讲密码是不必要的也是一种巨大的浪费。

G7月10日2013年39点

我郑重声明,the Universe's expansion is accelerating -- there will be no "big crunch." ;)

伯特Kaliski8月5日2013年9:48点

布鲁斯,您引发了一些关于密码学领域是否以及如何同时包括科学和工程的讨论。

当我在1995年左右对密码工程师188滚球网站的崛起发表评论时,当时,诸如HMAC之类的消息身份验证代码是由散列函数构建的,对称加密方案(如3DES-CBC)是由块密码构造的。这些新技术的设计,我认为,展示了工程的各个方面:应用科学从更小的部件建造更大的结构。

我想也可以说工程涉及到哈希函数和分组密码的设计,但在这些情况下,它的组成部分是旋转、排列和数学运算:还不是密码学。用密码原语构建密码方案和协议更像是密码工程。

到了90年代中期,它真的变成了一种工程实践。

不仅仅是用轶事证据证明它应该有效的临时部件组装,但一个严格的,指定,“可证明的”设计,将针对特定攻击的总体方案的安全性与底层原语的推测属性联系起来。

上世纪80年代定义安全性的坚实科学基础意味着并演示了如何证明安全性让位于实际应用程序,在实际应用程序中,可以为给定的环境“恰到好处”地设计安全加密方案。这就是工程部分。

所以它们都是需要的。很明显,它们都是随着新原语的发现而不断发展的——想想基于格子的密码学——和应用——想想完全同态加密。

留下你的评论188滚球网站

允许HTML:

Bruce Schneier的188滚球网站照片由Per Ervland提供。

188滚球网站Schneier on Security是一个个人网站。表达的意见不一定是……的意见IBM有弹性