代码之家  ›  专栏  ›  技术社区  ›  UnkwnTech

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

  •  3
  • UnkwnTech  · 技术社区  · 16 年前

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

    12 回复  |  直到 16 年前
        1
  •  9
  •   brianegge    16 年前

    希望不会消失。有一个很好的改变,你可以弄清楚使用了什么加密,并可能对它进行解密。首先,在cygwin或unix中,键入file命令:

    $ file mydata
    mydata: SQLite 3.x database
    

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

    • 100%加密数据和结构
    • 数据加密,但不是结构
    • 两者都不加密,但会向程序添加密码检查。

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

    接下来,使用“strings”命令。

    $ strings mydata
    

    这将输出任何明文数据。如果您看到数据的证据,那么就不需要解密。有些程序只是简单地执行密码检查,根本不进行任何加密。即使供应商声明他们正在“加密”您的数据,也可能是这样。

    如果您仍然处理一组随机的字节,字符串和文件只是告诉您它是二进制数据,那么您需要开始搜索数据。

    接下来两件重要的事情是查看文件的总长度。文件大小的模数可以告诉您一些关于加密算法的信息。第二件事是看数据的柱状图。

    $ ruby -e 'ARGF.each_byte {|b| puts b >> 4; }' <  mydata | sort -n | uniq -c
    

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

         15 0
         54 2
         93 3
        248 4
        165 5
        177 6
        135 7
    

    频率计数在第一个存储桶中,数据在第二个存储桶中。在这里,您可以看到数据不包含超过127的字符。这意味着数据接近于ASCII文本。再次运行柱状图,并将数据放入一个字节的存储桶中。只需离开右移位操作员。

    $ ruby -e 'ARGF.each_byte {|b| puts b; }' <  mydata | sort -n | uniq -c
    

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

    如果你发现你正在处理一个工业强度算法,那么你需要找出哪一个。如果您有程序的任何副本,代码本身通常会很容易地放弃使用的算法。如果没有,你就得看长度之类的东西。如果数据长度总是模数8,那么它可能是用一个对称的块加密程序加密的,就像河豚一样。

    如果您可以确定使用的密码,那么您必须找出密钥。如果程序需要密码,那么密钥可能基于密码,或者密码本身。如果幸运的话,程序不会请求密钥,只有程序本身知道密钥。在这种情况下,如果您能够掌握该程序,那么您可以从该程序中提取密钥,因为它必须包含密钥才能加密和解密。

    我的经验是,大多数供应商的软件不使用真正的加密,程序员试图在编写数据之前对其执行XOR'ing之类的操作。如果它使用真正的加密,软件通常会附带一个关于出口限制的披露。

        2
  •  9
  •   LukeH    16 年前

    需要 获取最初用于加密数据的第三方工具。

    如果你拿不到工具,那么你 需要 有关所用算法、密钥等的信息,最好是来自供应商。

        3
  •  8
  •   paxdiablo    16 年前

    您需要同时:

    • 找出加密方法;以及
    • 找出用于加密的密钥。

    最简单的方法是(如果可能的话)去问做这件事的人或公司。

    我不羡慕你这项任务,因为,除非加密是像xor这样没用的东西,否则你手头上有一份严肃的工作。

    首先,您可能想告诉我们工具的名称。从问题中隐瞒信息只会让你更难接受,你不需要这样做:—)

        4
  •  7
  •   Jonathan Rupp    16 年前

    我想所有的正常想法都已经被涵盖了,但这里有一些长篇大论。

    尝试查看原始数据,尤其是前四个字节。搜索前四个十六进制字节,看看你是否走运,有没有命中(比如,看看供应商是否在头中使用了一个魔法字节)。

    您可以尝试的另一件事是通过类似“字符串”的实用程序运行原始文件(或者只是浏览相对较小的文件)。看看这个工具是否在结果文件中嵌入了版权声明之类的内容——至少值得一试。

    当然,你也可以试着把文件发布到互联网上,看看其他人能想出什么办法,但我猜这会破坏你的目的(即,它是机密数据——否则为什么它会首先被加密)。

        5
  •  4
  •   toholio    16 年前

    如果第三方工具很好,那么您可能需要与数据吻别。这些数据值多少钱?恢复需要多少钱?再次获得工具的成本是否会低于数据的价值?如果是的话,就再买一次!

    您应该寻找对第三方工具的有效性和安全性的任何专业审计。他们可能会对所用的方法有所了解。

    老实说,如果你不能再次使用这个工具,最好的办法就是联系一家专业的数据恢复公司。如果你使用的产品是相当常见的,你可能以前遇到过。当然,如果有什么好处的话,除非你还有可用的钥匙,否则他们可能帮不上忙。

        6
  •  3
  •   kmarsh    16 年前

    除非你有加密密钥,否则这不是一个毫无意义的练习吗?

        7
  •  3
  •   Scott Langham    16 年前

    追踪制造工具的人,或者在你有权使用工具时使用工具的人。催眠他们,让他们回归到更早的时间,这样他们就能回忆起那是什么。

        8
  •  2
  •   z -    16 年前

    除非您可以联系第三方供应商或在线搜索以查看使用的加密类型,否则您将走运。

    即使你真的发现了,除非你用的钥匙非常短或者很容易猜到,否则暴力强迫可能会花你很长时间。

        9
  •  1
  •   David Thornley    16 年前

    听起来你在自己的组织中也面临着冷漠,如果他们甚至不合作命名这个工具的话。

    我会告诉管理层知道它是什么工具是至关重要的。要么有人知道,要么有一些文件可以帮助。四处打听,强调重要性,记录下你问的人。在这种情况下,采取通常的Cya措施。

    在那之后,我就不再担心了。你可能想对它进行几次攻击,只是为了看起来不错,而且你可能会走运。然而,如果公司里没有其他人关心公司的重要事情,我发现自己太过关注它,压力太大。

        10
  •  1
  •   JP Alioto    16 年前

    既然你认识有你需要的信息的人,你最好的选择是 rubber hose cryptanalysis .

        11
  •  0
  •   S.P    16 年前

    如果有人知道完美的答案,世界将是一个疯狂的地方。

        12
  •  0
  •   bignose    6 年前

    如果数据是加密的,大概是 保护自己不受你现在想做的事情的影响 :在没有适当凭据的情况下访问纯文本。

    要么这个 不能 是可行的,在这种情况下,加密工具已经做好了它的工作;或者 可以 做得可行,你需要开始对谁非常担心(与你对数据保密的重视程度成比例)。 其他的 在你不知情的情况下也能做到。