更准确地说,这是陈述第二条原则
一定不是必须保密,并且必须能够在不造成麻烦的情况下落入敌人之手;
当然,我知道为什么我应该保留密钥的秘密,但是发布协议的内部信息似乎违反直觉。我为什么要这样做?那不会给攻击者带来好处吗?
#1 楼
实际上,您在问题中提到的Wikipedia文章已经回答了您的问题:对于公司,甚至对于标准机构,在DVD上CSS加密的情况下,这种情况相当普遍-保守系统的内部运作。有人认为这种“默默无闻的安全性”使产品更安全,更不容易受到攻击。一个相反的论点是,将内部秘密保密可能会在短期内提高安全性,但从长远来看,只有已发布和分析的系统才值得信任。
但是让我们深入研究反正更深...
Kerckhoffs的原则
出于参考目的,这是Kerckhoffs的原始文本(摘自Auguste Kerckhoffs,“ La cryptographie民兵”,《科学》杂志的军人第IX卷,第5–38页,“ II。DESIDERATA DE LA CRYPTOGRAPHIE MILITAIRE。”,1883年1月):
在纯文本中,内容为:
1°Lesystèmedoitêtrematériellement,正弦数学,难以分辨;
2°Il faut qu'il n'exige pas le secret, et qu'il puisse sansinconvénienttomber entre les mains de l'ennemi;
3°La clef doit pouvoir enêtrecommuniquéeet retenue sans le secours de note cricrites,étrechangéeoumodifiéeaugrédesantant /> 4°Il faut qu'il soit适用于la cor响应制图;
5°Il faut qu'il soit portatif,et que son maniement ou son fonctionnement n'exige pas le concours de plusieurs personnes;
6°Enfin,il esténécessaire,vu les应用程序很容易使用,系统使用要求很方便,紧张的需求很高,观察员的月球探望者寿命很长。
为方便起见,以下是我的英文翻译:
系统必须在物理上是可理解的,即使不是数学上也是如此。
它必须保密,当它落入敌人手中时也不会造成任何不便;
必须在没有书面说明的情况下传达和保留钥匙,并应由通讯员酌情决定对其进行更改或修改;
必须适用于电报通信;
它必须是便携式的,其使用和操作不需要几个人的帮助;
最后,考虑到控制应用程序的情况,有必要使该系统易于使用,不需要精神上的压力或需要遵守一系列长规则的知识。
敌人知道系统
Kerckhoffs的生存原则nr。 2(最初是针对军事密码的六种设计原则)没有什么比说要在“敌人知道算法”甚至“敌人携带消息”方面更要看加密货币的安全性了。著名的克劳德·香农(Claude Shannon)曾经将Kerckhoffs的原理简化为:“敌人知道系统”。实际上,这只是“攻击者发现时间只是一个时间问题”,因为将算法保密将依赖于“默默无闻的安全性”,众所周知,这是一个坏主意。 Kerckhoffs原理的基本原理是,如果必须对密码系统的任何部分(除了单个密钥)保密,那么密码系统就不安全。这是因为,如果公开系统某些细节的简单行为是使它突然变得不安全,那么您手上就会遇到问题。任何保密系统的黄金标准是,所有细节都应能够公开,而不会损害系统的安全性。安全性取决于系统本身,而不是系统的保密性。
Kerckhoffs的原理为什么有意义的一个很好的例子是第二次世界大战中使用的德国Enigma机器。通过窃取机器,盟军知道了所有有关Enigma机器工作原理的知识。他们只需要阅读手册,使用代码手册并查看机器的构造和工作方式即可。毕竟,他们掌握了一个可行的榜样。纵观整个历史,有无数秘密算法通过间谍,背叛和逆向工程等各种途径落入更广泛的知识的例子。有时,密码是通过纯演绎法重建的。例如,德国的洛伦兹密码和日本的紫色密码以及各种经典方案。
因此,Kerchkhoffs第二原理的核心思想一直沿用至今。 HTTPS,SSL和诸如AES或RSA之类的密码的安全性取决于算法的强度,而不是对其保密。算法均已发布,并且已经创建了详细的标准,每个人都可以查看。唯一的“秘密”是连接到安全网站(由浏览器和服务器自动随机完成)或使用类似GPG的程序加密文档时选择的密钥。
总结:为什么要发布加密算法?
不发布加密算法没有多大意义,因为攻击者发现您的密码工作原理只是时间问题。因此,安全性获取只能是暂时性的。
另一方面,加密算法的发布往往会建立信任关系,因为其内部的发布允许验证相关的安全性声明。
实际上,您甚至可以将“为什么要发布密码算法”的答案降低到一个简单得多的水平:您家门锁的安全性并不取决于锁的隐藏及其机密。它的安全性来自于您保管好密钥。这是Kerckhoffs的第二条原则最简单的例子之一。
许多例子之一Joan Daemen和Vincent Rijmen撰写的“ Rijndael的设计:AES-高级加密标准”一书被称为“über出版物”。
由分组密码的设计者从零开始介绍了Rijndael(通常称为AES)。详细介绍了作为基本设计思想的基础数学和宽径策略,并重新研究了差分和线性密码分析的基础。随后的章节回顾了针对Rijndael结构的所有已知攻击,并讨论了实现和优化问题。最后,还介绍了与Rijndael有关的其他密码。
您可能已经注意到:它以任何方式公开了Rijndael / AES的所有内部结构,并没有损害Rijndael / AES的安全性。恰恰相反,与之相关的出版物只能使人们对密码更加信任。
#2 楼
实际上,在很大程度上,这是一个术语问题,最终是您准备提出的安全声明,而不是一个实际问题。简而言之:您可以根据需要以任何方式在密钥空间和算法之间划界线,但是划界线的方式将影响您可以证明哪些安全性要求。因此,为了保持连贯性,您最好尽可能地将算法类别(而不是密钥类别)放在算法类别中,而不必降低您实际上可以证明的安全性要求。
没有什么可以阻止您以这样的方式定义术语的,即构成系统的指令被视为密钥的一部分,而不是算法的一部分,因此应保密。
因此,如果您拥有块大小为128位的块密码,不透露有关构成块密码的指令的信息,并声称没有对手能够确定有关这些指令的任何内容,您实质上是在声称块密码是理想的随机方法$ \ {0,1 \} ^ {128} $的排列,这意味着键空间最大为$ 2 ^ {128}!$(要清楚地是,它的指数增长超过$ 2 ^ {128} $)。
但是,没有人为的电路能够使用$ 2 ^ {128}!$密钥空间实现分组密码,因此有人可以分析您的黑匣子,以确定算法实际执行的指令数量和实际可用内存的上限。如果您实际上声称您的“算法”是完全秘密的,那么这足以证明您(隐式)的安全声明是错误的,因此您的算法已被破坏。
评论
$ \ begingroup $
对,您可以将“密钥”理解为“为了保护安全而必须保密的任何事物”。可以将“秘密算法”视为更多关键。而且由于很难将事物保密(至少比不关心它们是否为秘密要难得多),所以加密技术可能被视为试图在保持消息隐蔽的同时尽量减少通信机密。
$ \ endgroup $
– Brownbat
13年8月24日在1:28
#3 楼
发布算法时,其他人可以查看您的算法和设计。这样,他们可以发现设计中的缺陷,从而对其进行改进。
其背后的原理就是许多眼睛发现的错误要多于两只眼睛。这是通过让许多人关注它来提高安全性。大多数密码甚至都没有名字。
因此,好的加密算法从密钥而不是从模糊的算法获得安全性。
#4 楼
基本上,是的,您应该公开密码,因为(1)这是其他任何人都可以信任它的唯一方法,并且(2)这是找出您的密码是否值得信任的唯一方法。布鲁斯·施耐尔(Bruce Schneier)给业余密码设计者的备忘录对标准论点进行了合理的总结/解释。不要错过这一部分:“任何人[..]都可以创建自己无法破解的算法。很难做到的是创建一个其他人都无法破解的算法。 。[..]唯一证明这一点的方法就是让算法受到周围最好的密码学家的分析。”发布密码,以使世界上最好的密码学家有机会查看它(如果您不发布密码,那么他们极不可能会看它,因此没有人会相信您的密码) 。
#5 楼
即使敌人获得了除钥匙以外的所有东西,仍是安全的算法可被视为生成安全算法的一种手段。如果当前有一个用于与通讯员进行通信的安全通道,并且在将来没有安全通道可用时将来需要安全地进行通讯,则使用某些骰子生成随机密钥并将其传送给通讯员将有效地建立一种新的加密方法与该通讯员通信。与尝试从头开始制定新算法相比,这要容易得多。关于将算法保密的问题是什么,与此相反的基本论点是,处理需要保密的事物更加麻烦。而不是与可以被视为公开的东西一起工作。很好地保护算法以防止其被发现可能需要付出更多的努力,而不是值得的。要“几乎”足够地保护它,将需要付出同样的努力,几乎一文不值。完全不用担心对其进行保护,这将变得更加容易和实用。
评论
$ \ begingroup $
评论不用于扩展讨论;此对话已移至聊天。
$ \ endgroup $
– e-sushi
17年12月17日在13:22