【问题标题】:determine if the bits are encrypted?确定这些位是否被加密?
【发布时间】:2014-03-13 07:02:37
【问题描述】:

假设我正在收听网络,并且我获得了一些位,但我想知道是否有办法确定位已加密?存在什么方法或算法?我的意思是如果这些位没有意义,这意味着加密,但是有更多的技术方法或算法可以从位确定 假设我有 0101010100001011001001100001001,如果这是加密的,你怎么知道?

【问题讨论】:

    标签: security encryption network-programming public-key-encryption password-encryption


    【解决方案1】:

    一般来说,你不能。几乎在所有情况下,加密数据都无法与随机或高度压缩的数据区分开来。

    在某些情况下,可能有间接证据表明您看到的数据是加密的。例如,它可能包含 TLS 或 SSH 的标头特征,或者它可能在通常用于加密数据的端口上传输(例如,443 用于 HTTPS)。然而,这完全是猜测的问题——如果你无法识别数据,它可能是任何东西。

    【讨论】:

    • 有什么写代码的方法吗?至少尝试从位或类似的东西中恢复 ascii 或字母?但这将取决于机器架构大端还是小端?
    • 没有。加密数据的重点是让观察者无法从中恢复任何东西。
    【解决方案2】:

    你不能。

    考虑这个简单的例子(python):

    def xor(s1, s2): return ''.join(chr(ord(a) ^ ord(b)) for a,b in zip(s1, s2))
    
    key = '\x07\x07\x04\x16\x00\x1b\x12N\x17\x1a\x0eHO\x14T\x03\x10\x17R\n\x16V\x04\n\x06\x00\r\x1e'
    message = 'this is such a secret message'
    
    ciphertext = xor(message, key)
    

    这是一个简单的异或密码,可用于例如在一次性垫。显然没有错,但如果你打印ciphertext,你会得到:'some random output obviously'。 秘密消息已正确加密,但输出看起来根本没有加密。

    我通过 xoring 消息和示例输出选择了密钥 ;-) 但这样的密钥基本上是随机的,可以是任何随机数生成器的结果。

    您永远无法仅通过查看位来判断数据是否已加密、编码、压缩、屏蔽或其他,因为即使这些位看起来像未加密的内容。这也是不能对 OTP 进行暴力破解的原因,因为您永远无法判断暴力破解的明文是否是正确的明文:http://en.wikipedia.org/wiki/One-time_pad#Attempt_at_cryptanalysis

    自己试试吧:

    Python 2.7.5 (default, Aug 25 2013, 00:04:04)
    [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def xor(s1, s2): return ''.join(chr(ord(a) ^ ord(b)) for a,b in zip(s1, s2))
    ...
    >>> key = '\x07\x07\x04\x16\x00\x1b\x12N\x17\x1a\x0eHO\x14T\x03\x10\x17R\n\x16V\x04\n\x06\x00\r\x1e'
    >>> message = 'this is such a secret message'
    >>> ciphertext = xor(message, key)
    >>> print ciphertext
    some random output obviously
    

    【讨论】:

      【解决方案3】:

      无法证明数据是否加密,但您可以分析数据值的频率以过滤出可能加密的数据包。

      正确加密的数据与随机噪声几乎无法区分。因此,如果您正在寻找加密数据,您应该会看到相当均匀的字符表示。有一个很棒的工具叫做pcaphistogram.pl,可以通过这种方式分析数据包。你可以在这里得到它:http://www.willhackforsushi.com/code/pcaphistogram.pl.txt

      以下是正确加密数据的示例直方图:

      下面是纯文本数据的示例直方图。注意这些值是如何在可打印区域中聚集的。如果将其与 ASCII 表进行比较,您会看到很多小写字母 (61-7a)、一些大写字母 (41-5a)、空格 (20) 和回车 (0a):

      下面是使用 XOR 加密的文本数据的示例直方图。异或移位了所有字符,但基本形状与未加密集相同。

      请注意,您需要相当大的数据样本才能使用此技术。

      图片由http://www.packetstan.com/2010/11/packet-payloads-encryption-and-bacon.html提供

      【讨论】:

      • 看看我之前的回答。理论上,每次加密都可以产生任何密文,甚至一些看起来像未加密的明文。也将其编码为可打印字符(base64)可以更改直方图并因此“屏蔽”它。您永远无法判断某些内容是否已加密。
      • thebod - 你是对的,没有数学方法可以证明数据包是否被加密。但是从实际的角度来看,我描述的方法对于分析网络流量很有用。例如,如果您发现离开网络的大量数据显示特征被加密,那么系统管理员可能值得查看数据的来源。网络防御工具通常基于模式匹配和启发式。它更像是艺术而不是科学,它充满了假阳性和假阴性。
      猜你喜欢
      • 2011-07-02
      • 2013-03-07
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      相关资源
      最近更新 更多