首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XOR-CBC有多安全?

XOR-CBC有多安全?
EN

Cryptography用户
提问于 2020-01-02 09:46:33
回答 3查看 515关注 0票数 0

这有多安全?为了明确起见,我的意思是用普通的旧XOR替换维基百科图表中解释CBC的block cipher encryption步骤?

编辑:

将图的block cipher encryption部分替换为异或(\oplus)

CBC图

或:(C_0 = IV)

C_i \equiv \left(\bigoplus_{C_{i-1}}^{P_i}\right) \oplus {K}
EN

回答 3

Cryptography用户

回答已采纳

发布于 2020-01-03 00:11:52

因此,第一个块P_i的XOR-CBC加密和密钥K将由以下公式提供:

C_i = C_{i-1} \oplus P_i \oplus K

同样,对前一个块的加密是由以下方法提供的:

C_{i-1} = C_{i-2} \oplus P_{i-1} \oplus K

现在真正糟糕的是,我们可以将第二个方程的右边替换为第一个C_{i-1}的出现,并得到C_iP_i的方程,其中K项抵消了:

\begin{align} C_i & = C_{i-2} \oplus P_{i-1} \oplus K \oplus P_i \oplus K \\ C_i & = C_{i-2} \oplus P_{i-1} \oplus P_i \\ P_i & = C_{i-2} \oplus P_{i-1} \oplus C_i \\ \end{align}

另一种说法是,我们可以重写整个加密方案,这样只有第一个块的值(不包括IV)取决于秘密密钥,而其余的密文块只依赖于先前的密文块(攻击者都知道)和明文:

\begin{align} C_1 & = IV \oplus K \oplus P_1 \\ C_2 & = C_1 \oplus K \oplus P_2 & = IV \oplus P_1 \oplus P_2 \\ C_3 & = C_2 \oplus K \oplus P_3 & = C_1 \oplus P_2 \oplus P_3 \\ C_4 & = C_3 \oplus K \oplus P_4 & = C_2 \oplus P_3 \oplus P_4 \\ \vdots \end{align}

这意味着,如果我们对第一个文本块之外的纯文本块的值进行猜测,我们甚至可以在不考虑密钥的情况下对它们进行微不足道的测试。例如,假设P_2P_3的前两位相等,那么C_1C_3的前两位也必须相等,因为:

P_2 \oplus P_3 = C_1 \oplus C_3

此外,如果您可以了解任何一个明文块的值,则可以计算出以下所有内容。(试着找出原因。)

不用说,这太糟糕了。

票数 2
EN

Cryptography用户

发布于 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

第二个块实际上根本没有加密。接着,第一、第三、第五等块只是一个带有键的异或,第二、第四、第六等等根本不依赖于键。

票数 9
EN

Cryptography用户

发布于 2020-01-02 10:55:19

XOR-CBC提供的保护很少或没有,特别是针对已知的明文。

让我们来定义这个问题:

对于i=0

C_{i=0} \equiv \left(\bigoplus_{IV}^{P_{i=0}}\right) \oplus {K}

对于i \ge 1

C_i \equiv \left(\bigoplus_{C_{i-1}}^{P_i}\right) \oplus {K}

然后,对给定的XOR-CBC加密的i进行迭代,用于i \ge 1

C_i = \operatorname{E}(K, C_{i-1} \oplus P_i) \to
C_i = K \oplus (C_{i-1} \oplus P_i)

块大小必须与此方案中的密钥大小相同。

然后,如果知道一个特定的KP_i,那么我们就会立即显示出i的值:

K = (C_{i-1} \oplus P_{i}) \oplus C_{i}

只需用KC_{i}两面异或,就可以得到这个方程,以防你的数学生疏。

众所周知,关于第一个明文块等式的信息泄露了有关密钥的信息。

更糟糕的是,您可以在任何迭代中对任何已知位b执行该攻击,并且可以组合这些已知的密钥位以找到一个完整的密钥,或者对该密钥的其余部分施加暴力。

C_{i,b} = K_b \oplus (C_{i-1,b} \oplus P_{i,b})

现在假设P_{i,b}是已知的(已知明文),而C_{i-1,b}是已知的,那么K_b立即称为:

K_b = (C_{i-1,b} \oplus P_{i,b}) \oplus C_{i,b}

由于该键是重复的,上述公式适用于键中的任意位:位于同一位置的已知明文(模数为块/键大小)将立即将密钥位暴露在块内的同一位置。

这是我所展示的最初的更强的攻击,它稍微复杂一些,令人困惑。我展示它是为了表明,已知的甚至一点已知的明文都已经破坏了密码。密文中的每一位只依赖于一位密钥,而不是所有位--就像密码一样!

CBC中的安全性很大程度上取决于分组密码提供的密钥值的保护。如果该保护被删除,那么CBC模式--如果不是所有其他分组密码模式--将失败。

此外,将XOR-CBC与一次性便携板进行比较,如果知道明文,就会知道密钥位。对于OTP来说,密钥流不应该重复,因此密钥位的知识不会公开任何其他信息。XOR-CBC意味着密钥中的位的重用。

因此,您甚至不需要像泰洛的回答那样的“高级”分析。通常,密码被要求在已知下是安全的,即使是选择的明文和CBC显然在假设条件下,如果使用XOR而不是块密码,CBC也不会被保存。

票数 6
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/76770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档