我认为,“证明”系统安全的公认策略是允许密码社区对其进行审查,如果在很长一段时间(5年或6年)内没有发现漏洞,那么一个新的系统就可以被接受为安全的,除非证明不是这样。如果我错了,请纠正我。
除此之外,在公开发布之前,开发人员是否可以主动测试他们的密码系统呢?
我正在研究一个大密钥(4096位),对称加密系统,我正在尽我最大的努力去厌倦“任何人都可以做一个他们自己无法破解的加密”的诡计--相信我的密码是不可破解的。
我可以在进程或输出上运行什么样的测试?有测量熵的好方法吗?在加密一段数据之后,我应该期望得到什么统计数据?我知道不会有什么神奇的函数来证明我是安全的,但我当然不希望在公开发布之后马上被一些数据分析会发现的简单问题打断。
发布于 2011-07-18 21:20:13
发布于 2011-07-18 21:43:28
一种非常常见的方法是在已知组件的基础上构建一个系统,然后根据组件的安全性证明组合系统的安全性。
通常,这篇论文有一个定理
如果函数
F具有属性Y,则此新函数G具有属性X。
证明表明,如果有人可以攻击G的性质X,这就给出了对F的性质Y的攻击。
然后,我们将F作为一个已知的密码学原语,社区已经对它进行了研究,它似乎具有必要的属性。
通常这种证明甚至对整个算法族都有效。通过这种方式,我们可以从一个分组密码家族(通过一种操作模式)获得一个流密码家族,从一个哈希函数(HMAC)获得一个键控MAC,当使用的基本组件被破坏时,您可以简单地切换到另一个。
在某些情况下,您甚至可以在多个组件上构建复合系统,因此只破坏其中一个组件将无助于破坏组合系统(也就是说,破坏复合系统意味着破坏所有组件)。
当然,这将很可能无助于一个全新的系统,而不是基于任何东西。
发布于 2011-08-04 06:18:57
最重要的是,如果你问这个问题,你几乎肯定没有资格设计一个安全的密码原语。听起来很刺耳,但我是认真的。
你不会相信没有上过医学院的人会给你做手术。同样,我们也不会相信那些还不知道密码分析研究文献的人会设计出一种新的密码。更重要的是,历史表明,那些试图设计一种新密码的业余爱好者,如果不花几年的时间研究研究文献,几乎不可避免地会发明一些无用的东西--要么是不安全的密码,要么是与技术水平毫无竞争的密码。
正如布鲁斯·施耐尔( Bruce )曾经写道的那样,“任何人都可以发明自己无法破解的密码”。最难的是设计一个没有人能破解的密码。密码设计者通常对自己设计中的弱点有盲点;从定义上说,他们设计密码是为了抵御他们能想到的所有攻击--但是密码设计者没有想到的其他攻击很容易发生,在这种情况下,密码设计者不太可能意识到他们自己的创造是有缺陷的。
最重要的是,世界并不需要新的密码。我们现在的还不错。我的意思是,我不是说它们是完美的,我不是说它们是不可能改进的,但我是说它们在大多数情况下对所有工程都是足够好的--现代密码原语几乎从来就不是系统安全中最薄弱的环节。因此,在某种意义上,解决这个问题可能是在错误的问题上工作。
所以我能给你的最好的建议是:放弃它。不要指望你的密码是好的。(如果你真的非常想学习如何设计一种新的密码,你可以从研究密码设计和密码分析的研究文献开始-但要做好准备,这需要多年的专门研究。)
至于如何审查一个新密码,下面是它的工作原理。对密码原语安全性的信心通常来自于这样一个事实:许多非常聪明、知识渊博的人非常努力地尝试打破这些算法,却没有造成很大的影响。当然,这并不能保证不存在聪明的攻击--总有可能会有一些不可思议的、狡猾的数学捷径攻击,没有人能找到,但是越多的人试图找到,失败的人,看起来就越不可能。出于实际的目的,似乎不太可能有一个园艺的攻击者会发现一个攻击,几十个真正聪明的人试图找到,但失败了。
重要的是要理解,这个过程不能提供密码原语安全性的“证据”。我们没有证据证明SHA256,或者AES,或者RSA是安全的--人们普遍认为它们是安全的,但是我不能给你们一个关于这个事实的数学证明,谁知道,普遍的信念总是错误的。有对于大多数密码原语来说,很难给出可靠的安全证明的根本原因。。
同样重要的是要明白,审查一个新的原始人是非常昂贵的:它需要人--几十年的努力,从极具天赋的专家。这就是为什么对新密码的需求很少或根本没有的原因之一,尤其是那些对该领域还不太了解的业余爱好者。审查一个新的密码原语的成本极高,这是聪明的密码学用户通常试图使用现有的、经过审查的原语而不是自己发明的原因之一。如果你发明了你自己的计划,你就不太可能像标准计划那样对你自己的计划进行分析和审查--所以不要这么做。不要“自己滚”。相反,我建议人们使用现有的、标准的、可接受的原语,如AES、SHA256、RSA等。
https://crypto.stackexchange.com/questions/183
复制相似问题