首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hash函数的ROT加密

hash函数的ROT加密
EN

Cryptography用户
提问于 2018-07-16 04:03:43
回答 2查看 442关注 0票数 2

我不是在尝试创建自己的加密(我只是对这种“加密”形式的数学和可能性感兴趣)。如果这篇文章不适合我,这是我第一次发帖子。

凯撒密码可能是最基本的加密形式,但如果我们要加强它呢?

  1. 我们使用密码密钥
  2. 我们使用SHA256算法对其进行散列并保存结果。
  3. 我们对结果进行多次散列,每次保存结果。
  4. 我们获取所有的结果并将它们堆叠(例如使用简单的数字) 123 < Hash 321 < Hash 2 221 < Hash 3
  5. 我们把每一列的值相加,1 2 3< Hash 1 3 2 1< Hash 2 2 2 1< Hash 3 (6)(6)(5) <最终结果
  6. 我们将得到的数字应用到文本中,以便通过凯撒密码加密。
  7. 当我们到达腐烂的最后一个数字时,我们继续步骤3-6,直到完成为止。

解密很简单,只要输入一个密码就可以一遍又一遍地散列,并撤销凯撒密码。

这种做法的实用性是什么?它是否存在/可能存在哪些缺陷?

下面是python中这种加密的一个例子.运行程序,你就会看到我想解释什么。

EN

回答 2

Cryptography用户

回答已采纳

发布于 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那样的正确的键化哈希函数。

票数 5
EN

Cryptography用户

发布于 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)$,等等,解密消息中的其他所有内容。

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

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

复制
相关文章

相似问题

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