这有多安全?为了明确起见,我的意思是用普通的旧XOR替换维基百科图表中解释CBC的block cipher encryption步骤?
编辑:
将图的block cipher encryption部分替换为异或(\oplus)
或:(C_0 = IV)
发布于 2020-01-03 00:11:52
因此,第一个块P_i的XOR-CBC加密和密钥K将由以下公式提供:
同样,对前一个块的加密是由以下方法提供的:
现在真正糟糕的是,我们可以将第二个方程的右边替换为第一个C_{i-1}的出现,并得到C_i和P_i的方程,其中K项抵消了:
另一种说法是,我们可以重写整个加密方案,这样只有第一个块的值(不包括IV)取决于秘密密钥,而其余的密文块只依赖于先前的密文块(攻击者都知道)和明文:
这意味着,如果我们对第一个文本块之外的纯文本块的值进行猜测,我们甚至可以在不考虑密钥的情况下对它们进行微不足道的测试。例如,假设P_2和P_3的前两位相等,那么C_1和C_3的前两位也必须相等,因为:
此外,如果您可以了解任何一个明文块的值,则可以计算出以下所有内容。(试着找出原因。)
不用说,这太糟糕了。
发布于 2020-01-02 10:44:16
完全没有安全感。
如果您只是用密钥替换XOR加密,那么第一个密文块就是c_1=m_1 \oplus k。第二个块是c_2=m_2 \oplus c_1 \oplus k = m_2 \oplus m_1。
第二个块实际上根本没有加密。接着,第一、第三、第五等块只是一个带有键的异或,第二、第四、第六等等根本不依赖于键。
发布于 2020-01-02 10:55:19
XOR-CBC提供的保护很少或没有,特别是针对已知的明文。
让我们来定义这个问题:
对于i=0:
对于i \ge 1:
然后,对给定的XOR-CBC加密的i进行迭代,用于i \ge 1:
块大小必须与此方案中的密钥大小相同。
然后,如果知道一个特定的K的P_i,那么我们就会立即显示出i的值:
只需用K和C_{i}两面异或,就可以得到这个方程,以防你的数学生疏。
众所周知,关于第一个明文块等式的信息泄露了有关密钥的信息。
更糟糕的是,您可以在任何迭代中对任何已知位b执行该攻击,并且可以组合这些已知的密钥位以找到一个完整的密钥,或者对该密钥的其余部分施加暴力。
现在假设P_{i,b}是已知的(已知明文),而C_{i-1,b}是已知的,那么K_b立即称为:
由于该键是重复的,上述公式适用于键中的任意位:位于同一位置的已知明文(模数为块/键大小)将立即将密钥位暴露在块内的同一位置。
这是我所展示的最初的更强的攻击,它稍微复杂一些,令人困惑。我展示它是为了表明,已知的甚至一点已知的明文都已经破坏了密码。密文中的每一位只依赖于一位密钥,而不是所有位--就像密码一样!
CBC中的安全性很大程度上取决于分组密码提供的密钥值的保护。如果该保护被删除,那么CBC模式--如果不是所有其他分组密码模式--将失败。
此外,将XOR-CBC与一次性便携板进行比较,如果知道明文,就会知道密钥位。对于OTP来说,密钥流不应该重复,因此密钥位的知识不会公开任何其他信息。XOR-CBC意味着密钥中的位的重用。
因此,您甚至不需要像泰洛的回答那样的“高级”分析。通常,密码被要求在已知下是安全的,即使是选择的明文和CBC显然在假设条件下,如果使用XOR而不是块密码,CBC也不会被保存。
https://crypto.stackexchange.com/questions/76770
复制相似问题