为什么我不应该使用自定义加密算法?

时间:2016-04-15 19:17:46

标签: algorithm encryption cryptography

我目前正在处理一个应用程序,我正处于加密数据的阶段。我想通过实施我的加密算法来通过Obscurity使用Security。但是,我读过的许多文章都表明,使用自定义加密算法通常很弱,可以轻松破解。

我的问题是:即使他/她对算法一无所知,攻击者如何破坏自定义加密算法?

3 个答案:

答案 0 :(得分:2)

在过去,比如100年,许多聪明的人花了很多时间开发加密算法。如果密钥足够长,其中一些已被证明是相对安全的。经验也表明,很难开发出这样的算法。

算法是安全的证据要求它对公众开放(除非开发人员能够自己证明这一点,这至少与开发算法本身一样具有挑战性。)

考虑到这一点,你自己的算法不太可能在这些方面表现得那么好。

攻击者会做什么:他会在编码数据中查找模式。在最简单的情况下,这些模式将是比其他模式更频繁出现的某些字节,但是有更复杂的统计方法。这些模式将提供破坏代码的提示。 (我知道这有点简化了,所以有关更多信息,只需在密码学上进行网络搜索,或者获取有关此主题的众多书籍之一。)

答案 1 :(得分:2)

  

我的问题是:即使他/她对算法一无所知,攻击者如何破坏自定义加密算法?

他有算法的代码。还有什么可以知道的?

如果您认为即使是拥有该代码的人也可以保密算法,请不要将此浪费在加密上,而无需保密算法。相反,发布反盗版软件需要保持算法的秘密。你将在你坚不可摧的反盗版计划上赚到一大笔钱。

除了几乎所有曾经存在的反盗版计划依赖于那些无法理解他们拥有的代码的人已被打破。人们已经找到了算法。隐藏代码的功能非常非常难以正确使用。

说你的算法存在缺陷。没有人能够分析算法并找到缺陷,除非他们是一个恶意行动者,他首先要全力以赴地对算法进行逆向工程。所以你要让好人和坏人更加努力。但坏人有更强的激励,所以你有利于坏人而不是好人找到算法缺陷。

答案 2 :(得分:1)

您的自定义加密是什么?我的意思是,在10,000英尺的概述。

  • 替换密码
  • 转置密码
  • 压缩算法
  • 分组密码
  • 流密码
  • 与明文异步的迭代哈希函数(a.k.a. stream cipher)
  • 上述所有内容的组合。

前三个被现代计算机轻易打破。接下来的三个通过添加到其实现中的辅助渠道被轻易打破。 (最后一个需要更多信息。)

如果您的密码系统非常具有创新性,我无法想出攻击它的方法,那么您应该能够在不降低安全性的情况下发布算法。否则,你就会对人们充满信心。无法进行黑盒测试。

通过默默无闻的安全性很糟糕正是因为它可以让防御者忽视安全失败(但通常不会被攻击者忽视)。您可能会想,"但我使用的是one-time-pad!"我说,"你如何处理选择密文攻击?​​"

这是一个有用的启发式方法:Read this blog post about a stealth backdoor。你学到了什么新东西吗?如果是这样,您的密码系统可能已损坏。