我不是在尝试创建自己的加密(我只是对这种“加密”形式的数学和可能性感兴趣)。如果这篇文章不适合我,这是我第一次发帖子。
凯撒密码可能是最基本的加密形式,但如果我们要加强它呢?
解密很简单,只要输入一个密码就可以一遍又一遍地散列,并撤销凯撒密码。
这种做法的实用性是什么?它是否存在/可能存在哪些缺陷?
发布于 2018-07-16 04:26:12
您所描述的是OFB模式的一个奇怪版本,它使用哈希函数代替块密码和模块加法,而不是XOR将数据与密钥流组合起来。您描述的算法似乎容易受到已知的明文攻击。一个简单的调整,使其更接近真正的OFB模式,将提高安全性。OFB模式是一种流密码模式:
开始{ O_i *} E_K(O_{i-1}) \quad\text{其中}\quad O_0 = IV \end{联立*}
密钥流是$O$,所以加密和解密就像在任何流密码中一样实现:
开始{ C_i *} &= P_i \oplus O_i\ P_i &= C_i \oplus O_i \end{align*}
这种技术可以可视化:

块密码,$E$,可以替换为任何键哈希函数。必须对哈希函数进行键控,初始输入必须是IV,而不是键,否则就容易受到已知的明文攻击,攻击者可以使用它来计算密钥流的其余部分。当前的构造是$O_i = H(O_{i-1})$ where $O_0 = H(K)$,多个密钥流$O$块用于加密单个明文块。如果我正确地理解了这一点,这并不能抵抗已知的明文攻击。相反,您需要使用键控哈希,第一个输入应该是IV。最常见的键哈希结构之一是HMAC:
开始{align*} \operatorname{HMAC}_K(m) = H((K \oplus \mathrm{opad}) \mathbin H(K \oplus \mathrm{ipad}) \mathbin\m)\mathbin\m)\\结束{align*}
$\oplus$表示异或操作。任何可以用相同输入反转的操作都可以用于此目的,而不仅仅是XOR。在您的场景中,凯撒密码的功能是模块加法,所以如果我正确理解您所描述的内容,它应该具有类似于OFB模式的安全性,包括它的缺陷(例如,短排列周期),只要您将哈希函数替换为一个像HMAC那样的正确的键化哈希函数。
发布于 2018-07-16 04:59:05
如果我正确理解了您的描述,您的方案是生成一个$H(k) \mathbin H(H(k)) \mathbin H(K))\mathbin H(K)\mathbin \cdots$来与明文和xor (与Caear密码的加法-Moo-26的二进制等价物)组合,其中$k$是您的秘密。
不幸的是,这是完全不安全的:能够猜出单个明文块的对手可以解密消息的其余部分。
具体来说,将明文$P$分解为块$P_1,P_2,\ldots$;那么相应的密文块是$C_1 = P_1 \oplus H(k),C_2 = P_2 \oplus H(H(k)),\ldots$,或者一般情况下,$C_i = P_i \oplus H^i(k)$,其中$H^i(k)$是$H$的$I$折叠迭代:$H^1(k) = H(k)$,$H^{i+1}(k) = H(H^i(k))$。
在任何攻击模型中,对手都知道$C_i$,而不知道$k$。如果对手知道或能够猜到$ P_i $ --例如,如果他们正确地猜到消息以文本‘Dear Bucephalus’开头,那么他们可以从上述有关$P_i$和$C_i$的方程中恢复$H^i(k) =P_i \oplus C_i$,然后从这里计算$H^{i+1}(k) = H(H^i(k))$,然后恢复$P_{i+1} = C_{i+1} oplus H^{i+1}(k)$,等等,解密消息中的其他所有内容。
https://crypto.stackexchange.com/questions/60831
复制相似问题