我如何对加密算法进行逆向工程?

Ale*_*ian 16 encryption encoding reverse-engineering

我写了一个以这种方式加密文本的应用程序:

  1. 获取输入文本

  2. 翻译文字

  3. 转换为十六进制

  4. 与钥匙的XOR

  5. Base64编码

现在,我自己没有进行大量的加密/编码,所以我的问题可能听起来很愚蠢,但是,我说我得到的文件中包含上述算法的内容而且我不知道这个算法.如何开始"打破"文本,是否有任何指导方针,原则,规则可以遵循?

我的问题与这5个步骤无关,这是一个纯粹的例子.

作为另一个例子,取文字:A751CD9E1F99.我该如何开始调查这可能意味着什么?

eri*_*son 17

为了打破密码,密码分析者使用他们可以收集的所有信息.根据已知情况,攻击分为多个类别.从最难到最简单的一些主要攻击是

  • 仅限密文:这是最难的攻击.分析师试图收集尽可能多的加密消息,并分析它们以寻找符号频率的模式或偏差.然而,有了好的现代密码,没有模式.这是不可行的良好的密码,正确使用.
  • known-plaintext:明文对应一些密文是从新密文中恢复未知明文的重要一步.这就是"逆向工程"真正开始的地方,因为他可以根据已知的输入和输出来测试他关于算法的假设.在第二次世界大战中,密码分析师努力建立广泛的"婴儿床"列表 - 这些词可能出现在敌人的消息中 - 利用已知的明文攻击.例如,特定日期的天气状况或战斗地点等可能以加密消息报告给总部.
  • selected-plaintext:更好的是当密码分析师可以诱骗他的敌人加密由密码分析者创建的消息时.在战争时期,有时会将伪造的信息泄露给敌人,希望它会被加密并帮助密码分析者打破代码.
  • 自适应选择明文:这是一种已知明文的迭代方法.密码分析者可以重复地通过系统加密他选择的明文,并查看结果以调整他的下一次尝试.

如今,打破代码的可能方法是通过系统中的缺陷.例如,可能会使用糟糕的密钥管理,从而导致密钥被盗或被猜到.在其他情况下,可能会使用"旁道"攻击.例如,通过仔细测量某些加密操作所花费的时间,攻击可能能够猜测密钥的某些位或字节为零,从而导致通过某种算法的快速路径.

靠近"锡箔帽"末端的方法是拦截来自计算设备的无线电发射的方法.这允许远程代理"看到"监视器上显示的内容.甚至还有特别设计的字体来试图破坏这种窃听.


Wim*_*ink 7

基本上,这种加密对于decypher来说是合理的.base64编码很容易识别.(您将只使用64个字符,这对于Base64来说是典型的.)接下来将是查找原始XOR键的步骤.这有点难,但有几种算法可以检测到这些密钥,如果有足够的加密数据可用.你的简单文本是不够的,但如果他们知道它应该变成十六进制字符串,那么事情会变得容易多了.然后他们会改变你的其他步骤.所有这些都太容易了.

如果可能的话,如果黑客在加密之前知道原始值,它应该能够入侵.在这种情况下,尽管您用于对字符串进行异或的密钥可能不完全已知,但是与提供的字符串一样短的字符串足以至少发现您的完整加密例程.

好的,让我们尝试解密A751CD9E1F99 ... 12个字符.您似乎只使用了几个字符,因此它看起来只是一些十六进制字符串.原件必须是6个字符.值将在0x51到0xCD的范围内,这对于base64编码来说太大了.此外,由于大多数值都高于0x7F,这表明你已经完成了一些编码.字典攻击已经可以在所使用的XOR键中提供一些洞察力,在这里您可以将6个十六进制值与6个字符的大量单词进行异或,以查看哪个字符串返回另一个单词.似乎返回有效单词的那些可能是您用来对原始文本进行异或的密钥.使用第二个加密字符串,可以再次使用这些发现的密钥,将可能的密钥集过滤到更小的集合.在现代系统中,这样的字典攻击可以在一天内返回结果.

大约50年前,这种加密方案将非常强大.如今,任何有兴趣尝试破译它的人都希望它能在一天之内被破解.

我不是破解加密的专家,但我知道哪些加密方法太弱而无法使用.大约10年前,我参与了一个项目,该项目使用像您这样的复杂XOR机制将密码存储在加密文件中.然后客户决定检查安全性并让专家调查密码文件.他只知道一个用户名和密码,该用户帐户没有管理权限.但是有足够的信息让他在一小时内破解安全性,阅读有关管理员帐户的信息,然后使用该信息来做他喜欢的任何事情.我的公司然后给他免费啤酒一个星期...... :-)因此,10年前,一位专家需要一个小时.如今,他们正在相对轻松地破解更复杂的算法,仅仅因为计算机更强大.如果您必须使用这种加密,那么您也可以不使用加密.这对黑客来说并不重要.


Sam*_*ijo 5

如果您知道如何解密它,您将能够尝试猜测算法.我可以创建许多算法,为某些输入产生"A751CD9E1F99".

现在,如果您有许多可用的输入/输出,您可以尝试仅更改一点输入,以查看输出会发生什么.良好的加密算法通常会导致较小输入变化的主要输出变化.


kem*_*002 5

我想你应该从阅读The Code Book开始.您要问的是如何破解加密方法,这将使您了解它们的工作方式.