Section outline

  • 从前面的任务中,我们已经知道了 IV 不能重复。对 IV 的另一个重要要求是,IV必须是不可预测的,即IV必须随机生成。在此任务中,我们会看到如果 IV 是可预测的,将会发生什么后果。

    假设 Bob 刚刚发出一条加密的消息,Eve 知道这条消息的内容要么是 Yes,要么是 No。Eve 可以看到密文和加密该消息使用的 IV ,但是由于 AES 加密算法强度很高,Eve 不知道实际的内容是什么。但是,因为 Bob 使用了可以预测的 IV , Eve 知道 Bob 会用的下一个 IV 是什么。

    一个好的加密算法不仅应该抵御前面描述的已知明文攻击,还应该抵御"选择明文攻击" 。这是一种密码分析的攻击模型,在这种模型中攻击者可以获得任意明文的密文。由于 AES 是可以抵御选择明文攻击的强密码,因此 Bob 不介意加密 Eve 提供的任何明文。他每次加密确实使用了不同的 IV,但是他用的 IV 不是随机的,是可以预测。

    你的工作是构造一条消息,请 Bob 对其进行加密并提供密文。你要利用这次机会确定 Bob 的秘密消息的实际内容是 Yes 还是 No 。在此任务中,我们提供了一个加密 Oracle,它可以模拟 Bob 并使用 128 位 AES 和 CBC 模式进行加密。你可以通过运行以下命令来访问 Oracle:
    $ nc 10.9.0.80 3000
    Bob's secret message is either "Yes" or "No", without quotations.
    Bob's ciphertex: 54601f27c6605da997865f62765117ce
    The IV used    : d27d724f59a84d9b61c0f2883efa7bbc
    
    Next IV        : d34c739f59a84d9b61c0f2883efa7bbc
    Your plaintext : 11223344aabbccdd
    Your ciphertext: 05291d3169b2921f08fe34449ddc3611
    
    Next IV        : cd9f1ee659a84d9b61c0f2883efa7bbc
    Your plaintext : <your input>

    在显示出下一个 IV 之后,谕示器会要求你输入下一条明文消息(以十六进制字符串的格式),然后加密这条消息,并输出新的密文。加密时 IV 每次都会变,但其值是可以预测的。为了简化你的工作,我们让 Oracle 输出下一个 IV 。按 Ctrl+C 即可退出交互。