假设我是一个攻击者,我面临着一个由“Dave”开发的弱但未知的加密算法。我将如何破解它?我什至不知道从哪里开始。这将是一个看似毫无意义的字符串。
没错,你不会。这是一些加密数据(4587556841584465455874588)。知道这意味着什么吗?绝对不。
但是,您错过了将密码学结合在一起的宇宙的核心、最基本、最重要的中心支柱钥匙。这个想法很简单:
the key is everything
而已。这是你必须保护的部分。你必须用你的生命来保护这一点,并希望没有人会用锤子打你,直到你告诉他们它是什么。
在此基础上,您必须假设您的算法可以被攻击者读取。他们知道它是如何工作的。他们可以记录其过程。如果有任何弱点,他们会找到它们。他们会利用他们。就像 Taken 中那个愤怒的 CIA 爸爸一样。
事实证明,这不是一个假设,而是更多的实际使用案例。自制密码学家 Dave 想在他的程序中包含一个加密算法。多年来,他决定避开密码学家免费为他所做的所有测试和设计工作,他编写了一些涉及奇数异或的东西,编译了他的程序,并乐于助人地将其提供给朋友。
该算法现在掌握在他们手中。游戏结束。
现在,你可能会问“我不能只保守算法的秘密吗?那行得通,对吧?” 哦,戴夫,请停下。不不不。秘密算法的问题在于它们更容易被盗。毕竟,每个用户的密钥都是不同的(实际上,这不是必需的,但是,为了简单起见,我们只是假设它)但算法保持不变。因此,您只需要将您的一个实现暴露给攻击者,就可以重新开始游戏了。
编辑:好的,响应 OP 的更新问题。让我们暂时假设该算法是完全未知的。加密对话中的两个参与者中的每一个都对其算法实现具有完美的安全性。
在这种情况下,您需要分析数据。您可以执行以下任一操作:
- 分析常见的字母。这就是您破解典型凯撒移位密码的方式。
- 尝试猜测密钥的长度。有了这些信息,您就可以开始寻找可能对应于相同明文的重复密文块。
- 尝试巧合指数和其他用于破解维吉尼密码的此类措施,因为许多多字母密码(可能)只是此密码的变体。
- 注意模式。任何模式都可能给你关键。
- 寻找任何其他线索。长度是否对应于某个度量,例如它们是否是某个值的倍数,例如字节边界,因此(可能)被填充?
- 尝试使用一种对称密码密码分析技术进行分析。在许多情况下,这些依赖于对算法的了解,因此可能不适用于这里。
- 如果您认为有问题的数据代表密钥交换,您可以尝试破解公钥算法的众多技术之一。
事实是,来自未知算法的一小段数据很可能无法解密。但是,这并不意味着您应该依赖这种情况。密码分析员可以恢复的数据越多,他们就越有可能破坏您的算法。如果没有认真的密码分析,您可能不知道该边界是什么 - 例如,可以合理地假设一个人可以对三个字母的单词进行 caeser-cipher 算法,因为几乎没有什么是有意义的。
您也面临重用问题。在二战中,Engima 通过对其秘密算法进行可编程设置来克服这个问题,但这也被打破了。
还需要考虑密码学的人为因素。我意识到罐头上的标签上写着“使用一次,不要消化”等,但人类是人类,可能会使用两次、三次等。任何此类行为都会落入密码分析者的手中。