加密方法未知时解密数据的最有效方法是什么?

Unk*_*ech 3 language-agnostic encryption

我有大量数据在备份之前由第三方工具加密,现在我们无法再访问该工具了,我需要数据,这是尝试确定数据加密方式的最有效方法?

Luk*_*keH 9

需要掌握最初用于加密数据的第三方工具.

如果您无法获得该工具,那么您需要有关所使用的算法,密钥等的信息,最好是来自供应商.


bri*_*gge 9

希望不会丢失.有一个很好的变化,你可以弄清楚使用了什么加密,并可能解密它.首先,在Cygwin或unix中,键入文件命令:

$ file mydata
mydata: SQLite 3.x database
Run Code Online (Sandbox Code Playgroud)

文件将查看前几个字节并尝试确定其内容.数据如何加密有几种可能性:

  • 100%加密的数据和结构
  • 数据加密,但不是结构
  • 既不加密,也会在程序中添加密码检查.

如果幸运的话,file命令将知道文件的文件,并且不会加密数据的结构.这很常见,因为当程序更新数据时,它通常不想重写整个文件.此外,如果数据不是实际数据库,而是导出,则可以对其进行压缩.文件将告诉您它是否使用通用压缩格式.

接下来,使用'strings'命令.

$ strings mydata
Run Code Online (Sandbox Code Playgroud)

这将输出任何明文数据.如果您看到数据的证据,则可能无需解密.有些程序只是执行密码检查而根本不进行任何加密.即使供应商表示他们正在"加密"您的数据,情况也是如此.

如果你仍然处理一堆随机的字节,而字符串和文件只是告诉你它的二进制数据,那么你需要开始探索数据.

接下来的两件重要事情是查看文件的总长度.文件大小的模数可以告诉您有关加密算法的信息.第二件事是查看数据的直方图.

$ ruby -e 'ARGF.each_byte {|b| puts b >> 4; }' <  mydata | sort -n | uniq -c
Run Code Online (Sandbox Code Playgroud)

如果字节均匀分布在0-255范围内,那么您处理的是正确的加密算法.如果您的数据不平衡,则可能很容易检测到并破坏加密.例如,看看这个输出:

     15 0
     54 2
     93 3
    248 4
    165 5
    177 6
    135 7
Run Code Online (Sandbox Code Playgroud)

频率计数在第一个桶中,数据在第二个桶中.在这里,您可以看到数据中不包含127以上的字符.这意味着数据接近ASCII文本.再次运行直方图,并将数据放在一个字节桶中.只需离开右移操作员即可.

$ ruby -e 'ARGF.each_byte {|b| puts b; }' <  mydata | sort -n | uniq -c
Run Code Online (Sandbox Code Playgroud)

现在,您可能会看到ASCII分布,或者数据可能是base64编码或base96编码.您可以通过解码器运行流,并再次尝试上述所有步骤.

如果您发现处理工业强度算法,那么您需要弄清楚哪一个.如果您有任何程序副本,代码本身通常会很容易地放弃使用的算法.如果没有,你必须看看像长度这样的东西.如果数据长度始终是模数8,则可能使用像河豚这样的对称块密码进行加密.

如果您可以确定使用的密码,那么您必须弄清楚密钥.如果程序需要密码,则密钥可能基于密码,或者密码本身.如果幸运的话,程序不会要求输入密钥,只有程序本身才能知道密钥.在这种情况下,如果您可以开始使用该程序,那么您可以从程序中提取密钥,因为它必须包含密钥才能加密和解密.

我的经验是大多数供应商软件都没有使用真正的加密技术,程序员在编写数据之前会尝试对数据进行异或操作.如果它使用真正的加密,软件通常会附带有关出口限制的披露.


pax*_*blo 8

你需要两个:

  • 找出加密方法; 和
  • 找出用于加密的密钥.

最简单的方法是(如果可能的话)去做那件事的人或公司并问他们.

我并不羡慕你这个任务,因为除非加密像XOR一样无用,否则你的工作就会很严重.

首先,您可能想告诉我们该工具的名称.从问题中扣留信息只会让你更难,而且你不需要:-)

  • 然后我会建议你运气不好.密码分析不适合胆小的人. (2认同)

Jon*_*upp 7

我认为已经涵盖了所有正常的想法,但这里有几个长镜头.

尝试查看原始数据,尤其是前四个字节.运行搜索前四个十六进制字节,看看你是否幸运并得到一个命中(即看看供应商是否在标题中使用了一个魔术字节).

您可以尝试的另一件事是通过像'strings'这样的实用程序运行原始文件(或者只是浏览文件,如果它相对较小).看看该工具是否在生成的文件中嵌入了版权声明等 - 至少值得一试.

当然,您也可以尝试将文件发布到互联网上并查看其他人可以提出的内容,但我猜这会破坏您的目的(即它是机密数据 - 为什么它会在第一名).