我已经从Coursera上的Dan Boneh的“密码学入门”课程中为家庭作业练习提供了正确的解决方案:

“让我们看看流密码多次使用时出了什么问题。下面是十一个十六进制编码的密文,这些密文是使用流密码加密十一个纯文本的结果,所有密文都具有相同的流密码。您的目标是解密最后一个密文,并在其中提交秘密消息作为解决方案。
提示:对密文进行异或运算,并考虑将空格与[a-zA-Z]中的字符进行异或运算时会发生什么。“ ,然后在每个可能的位置对结果与字符串" the "进行异或。结合大量的猜测,这给了我第一个明文。
我的问题是:如果我想遵循提示,该怎么办?我知道,如果我对字母与空格进行异或运算,则会更改字母的大小写,但是那又怎么办呢?
我不明白如何识别空格!假设我在$ c_1 \ oplus c_2 $中看到一个字母;如何确定其中一个纯文本中是否有空格?

评论

@poncho我不明白如何识别空格!假设在$ c_1 \ oplus c_2 $中,我看到一个字母,该怎么说一个明文中是否有空格?我之所以在这里问,是因为这个问题没有我的疑问的解释!

考虑$ c_1 \ oplus c_2 $的第6位。如果$ c_1 $和$ c_2 $都更好,则第6位将被清除(因为$ c_1 $和$ c_2 $的第6位均已设置)。如果一个是字母,一个是空格,则$ c_1 \ oplus c_2 $的第6位将被设置。因此,我们有一个很好的猜测,即两个纯文本之一中有一个空格。现在,考虑有11个密文的情况。如果3个明文在位置7处有空格,则该事实应该是显而易见的(因为这些密文的第6位将不同,并且所有那些密文在此处将具有相同的值)。

@poncho谢谢。假设我设法知道第一个密文的第一个单词是5个字母。我应该怎么继续?如何找到这个词?

鉴于我们似乎经常会收到有关此Coursera作业的问题,我建议重新打开该问题,并将其视为关于该课程和其他类似练习的规范问题。诚然,作为被接受答案的作者,我在这里可能会有偏见,但是我仍然觉得这个问题与目前已经关闭的问题有很大的不同,因为它是重复的重复。
我再次投票决定重新提出这个问题,因为最近在这里又提出了另一个可能重复的问题。我不认为该问题应该作为crypto.stackexchange.com/q/2249的副本来结束,因为该问题丝毫没有提及该问题所要求的具体提示(到目前为止,也没有任何答案) )。我还考虑过将下面的答案复制到该问题上(并在此处删除),但这并不自然地适合该问题。

#1 楼


“提示:对密文进行异或运算,并考虑将空格与[a-zA-Z]中的字符进行异或运算时会发生什么。”


假定纯文本仅包含空格和ASCII字母。给出提示后,这似乎是一个合理的假设,即使最终可能只是正确的。当然,XOR操作会取消密钥流,因此您将得到与所选密文相对应的明文与其他明文进行XOR运算。

现在依次查看每个字符位置。通过假设,所选明文中该位置的字符可以是字母或空格。


如果是空格,则成对的XORed明文中该位置的字符将是是字母(如果另一个明文中该位置的字符是字母)或null(如果两个字符都为空格)。
如果是字母,则成对XORed明文中该位置的字符将是随机控制字符(如果另一个明文中该位置的字符是大小写相同的字母),数字或标点(如果另一个字符是大小写不同的字母)或翻转了大小写的特定字母(如果另一个字符是空格)。

这两种情况应该很容易区分。此外,在第一种情况下,只需翻转通过对密文进行异或运算而获得的所有字母的大小写,就可以轻松地获得所有明文中该位置的实际字符。通过这种方式,您可以在与所选密文相对应的明文具有空格的位置处解码所有字符。完成此操作后,请选择另一个密文并重复该过程。希望当您依次处理所有密文时,您已经解决了大多数字符位置,并可以轻松地填充其余字符。


Ps。要了解其工作原理,可以将7位ASCII字符集划分为四个32个字符的块,这很有帮助,例如:

Bit 4:     0000000000000000 1111111111111111 |
Bits 0-3:  0123456789ABCDEF 0123456789ABCDEF | Block:
---------+-----------------------------------+---------------------------
Bits  00 | ................ ................ | Control characters
5-6:  01 |  !"#$%&'()*+,-./ 0123456789:;<=>? | Numbers and punctuation
      10 | @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ | Uppercase letters (mostly)
      11 | `abcdefghijklmno pqrstuvwxyz{|}~. | Lowercase letters (mostly)


,这种结构的结果是,如果您对同一行中的两个ASCII字符(例如,两个大写字母或两个小写字母)进行XOR运算,结果将是控制字符。类似地,对大写字母和小写字母进行异或运算将在第二行中产生一个字符,即数字或标点字符。同样,如提示中所指出的,空格字符在第二行开头的位置意味着将其与任何其他字符进行XOR运算只是将字符代码的第五位进行翻转,从而将字符向上或向下移动了一行。

评论


$ \ begingroup $
也许我现在有点忙,但是您能解释一下这张桌子的符号吗? “位4”,“位0-3”,“位5-6”是什么意思?很难看到它与该表中的二进制代码表示相对应:ascii-code.com
$ \ endgroup $
–AutonomousApps
2015年11月2日,6:10

$ \ begingroup $
@AutonomousApps:在您链接的表中查看“ bin”列。注意,通常按从右到左的顺序对位进行编号,其中位0为最右边(即,数字上最低有效位)。
$ \ endgroup $
–伊尔马里·卡洛宁(Ilmari Karonen)
2015年11月2日,10:56