如何破解一个弱但未知的加密协议?

信息安全 攻击 密码分析 朦胧
2021-08-12 04:02:31

我正在阅读这个有趣的问题:

我的开发人员的自制密码安全是对还是错,为什么?

它展示了“Dave”开发的弱自制算法,答案讨论了为什么这是一个坏主意。(实际上是散列算法而不是加密,但我的问题适用于两者。)

对我来说,自制算法是一个非常糟糕的主意是有道理的,但有一件事我不明白。

假设我是一个攻击者,我面临着一个由“Dave”开发的弱但未知的加密算法。我将如何破解它?我什至不知道从哪里开始。这将是一个看似毫无意义的字符串。

例如,假设自制算法是这样的:

  • 对原始数据使用弱知名加密算法,则:
  • 对文件中序列号的重复数字和为素数的任何字节执行按位负数。(或任何其他此类数学操作,这只是一个示例。)

在事先不知道的情况下,如何破解由这种算法生成的文件?

编辑:大家,请不要试图让我相信保守算法的秘密有多难。请在假设算法完全保密的情况下回答这个问题,尽管这在现实生活中实现起来有多么困难。

另外,假设我根本无法访问算法,只能访问结果数据。

4个回答

假设我是一个攻击者,我面临着一个由“Dave”开发的弱但未知的加密算法。我将如何破解它?我什至不知道从哪里开始。这将是一个看似毫无意义的字符串。

没错,你不会。这是一些加密数据(4587556841584465455874588)。知道这意味着什么吗?绝对不。

但是,您错过了将密码学结合在一起的宇宙的核心、最基本、最重要的中心支柱钥匙。这个想法很简单:

the key is everything

而已。这是你必须保护的部分。你必须用你的生命来保护这一点,并希望没有人会用锤子打你,直到你告诉他们它是什么。

在此基础上,您必须假设您的算法可以被攻击者读取。他们知道它是如何工作的。他们可以记录其过程。如果有任何弱点,他们会找到它们。他们会利用他们。就像 Taken 中那个愤怒的 CIA 爸爸一样。

事实证明,这不是一个假设,而是更多的实际使用案例。自制密码学家 Dave 想在他的程序中包含一个加密算法。多年来,他决定避开密码学家免费为他所做的所有测试和设计工作,他编写了一些涉及奇数异或的东西,编译了他的程序,并乐于助人地将其提供给朋友。

该算法现在掌握在他们手中。游戏结束。

现在,你可能会问“我不能只保守算法的秘密吗?那行得通,对吧?” 哦,戴夫,请停下。不不不。秘密算法的问题在于它们更容易被盗。毕竟,每个用户的密钥都是不同的(实际上,这不是必需的,但是,为了简单起见,我们只是假设它)但算法保持不变。因此,您只需要将您的一个实现暴露给攻击者,就可以重新开始游戏了。


编辑:好的,响应 OP 的更新问题。让我们暂时假设该算法是完全未知的。加密对话中的两个参与者中的每一个都对其算法实现具有完美的安全性。

在这种情况下,您需要分析数据。您可以执行以下任一操作:

  • 分析常见的字母这就是您破解典型凯撒移位密码的方式。
  • 尝试猜测密钥的长度。有了这些信息,您就可以开始寻找可能对应于相同明文的重复密文块。
  • 尝试巧合指数和其他用于破解维吉尼密码的此类措施,因为许多多字母密码(可能)只是此密码的变体。
  • 注意模式。任何模式都可能给你关键。
  • 寻找任何其他线索。长度是否对应于某个度量,例如它们是否是某个值的倍数,例如字节边界,因此(可能)被填充?
  • 尝试使用一种对称密码密码分析技术进行分析。在许多情况下,这些依赖于对算法的了解,因此可能不适用于这里。
  • 如果您认为有问题的数据代表密钥交换,您可以尝试破解公钥算法的众多技术之一

事实是,来自未知算法的一小段数据很可能无法解密。但是,这并不意味着您应该依赖这种情况。密码分析员可以恢复的数据越多,他们就越有可能破坏您的算法。如果没有认真的密码分析,您可能不知道该边界是什么 - 例如,可以合理地假设一个人可以对三个字母的单词进行 caeser-cipher 算法,因为几乎没有什么是有意义的。

您也面临重用问题。在二战中,Engima 通过对其秘密算法进行可编程设置来克服这个问题,但这也被打破了。

还需要考虑密码学的人为因素。我意识到罐头上的标签上写着“使用一次,不要消化”等,但人类是人类,可能会使用两次、三次等。任何此类行为都会落入密码分析者的手中。

一种未知的“加密”算法在历史上至少实现过一次。我说的是米诺斯线性 B 脚本,这是公元前 1300 年左右在克里特岛使用的一种书写方法。几个世纪后,随着所有修行者的死亡和所谓的希腊黑暗时代文明的全面崩溃,这种方法失传了。19 世纪末,当考古学家开始在克诺索斯和其他地方筛选地球时,他们得到的只是一堆带有未知符号的石板,对用于生产它们的书写系统一无所知。

这里有趣的故事是,Linear B 在 1950 年代被解开,使用的分析工具与当时用于加密系统的分析工具相同。实际上,这篇文章被认为是一种“未知的加密算法”。它屈服于统计分析、链式推论和对明文的一些假设(基本上,假设基础语言为希腊语的变体)。这是密码分析如何对抗“手动密码系统”的经典而精妙的说明。


当然,假设密码算法可以在使用中并且仍然保密,这是不可信的。基于同样的假设,不存在视频游戏或媒体内容的盗版。现实世界无情地提醒我们,这不是真的。一种算法可能保持秘密的唯一已知方法是杀死它的发明者和从业者,摧毁他们的设备,然后等待几个世纪。这有一些不方便的副作用。

即使在给定的特定情况下,算法的细节尚未泄露也无法量化该算法的秘密程度,即逆向工程、贿赂或有益的盗窃将花费多少时间来重建算法。就是密码学家在大约 40 年前决定将密钥和算法分开的主要原因,其中密钥是秘密的,算法是非秘密的:您可以量化密钥的保密性,而不是算法的保密性.

这让我们深入了解您的具体问题。您的“秘密算法”取决于“数学操作”的概念。他们有多少?你能估计或描述一组“数学操作”吗?您会发现加密算法本身就是一种“数学运算”,因此您的问题定义不明确。

要攻击加密协议,您有以下攻击方法

  • 已知明文:试图找到你拥有的明文和相应的密文之间的相关性。

  • 选择明文:加密特定的明文,研究明文变化时密文的变化。

  • 选择密文:对特定密文进行解密,研究明文的变化和密文的变化。

  • 已知密文:您所拥有的只是密文,下面是一个简单的示例。

很久以前,我上了一堂密码学课,其中一节课教我们替换密码的密码分析。这不是现在的事情,但这是密码学开始的地方,也是密码分析开始的地方。

假设您可以穿越此密文。

Mx qeoiw wirwi xs qi xlex e lsqi-fvia epksvmxlq mw e zivc feh mhie, fyx xlivi'w sri xlmrk M'q rsx yrhivwxerhmrk。

你不知道算法,你不知道密钥。你应该如何开始?

  • 分析字母频率:总长度为87个字母。我们看到它i被使用了 12 次 -> ~13%。根据维基百科关于字母频率的文章,这封信很可能是e我们的密文现在是:

Mx qeoew werwe xs qe xlex e lsqe-fvea epksvmxlq mw e zevc feh mhee, fyx xleve'w sre xlmrk M'q rsx yrhivwxerhmrk。

  • 现在第二个最常见的字母x被使用了 11 次 -> ~11%,所以很可能是t. 我们的密文现在是:

Mt qeoew werwe ts qe tlet e lsqe-fvea epksvmtlq mw e zevc feh mhee, fyt tleve'w sre tlmrk M'q rst yrhivwterhmrk。

  • 现在我们开始看到模式。替换i->ex->t建议密钥可能是4. 让我们尝试一下:

对我来说,自制算法是一个非常糟糕的主意是有道理的,但有一件事我不明白。

啊哈!我们得到了它!现在你已经完成了你的第一次密码分析。这是可以分析密文的一种方式。

我想没有人在这里大声说出来,所以我会的。

如果密码学家只得到一个密文而无法获得更多,密文很短并且没有给出明文的知识,那么解密文本几乎是不可能的。这仍然可能的唯一方法是密码是否在替换密码的难度级别附近。

给定相同的算法,如果有一种方法可以按需获取更多密文,如果密文足够长,或者如果有一些已知的明文部分可以提供帮助,那么只要付出足够的努力,该算法就有可能被破解。

但即便如此,与从头开始创建一个简单的密码算法相比,密码分析需要付出很多努力,因此除非有充分的理由,否则任何人都不太可能花费精力。