我应该使用该消息对自身进行加密吗?

时间:2019-07-19 19:35:52

标签: aes

我想加密密码之类的信息。 AES要求使用密码来加密和解密。如果密码与要加密的邮件完全相同,这会影响加密的强度吗?

1 个答案:

答案 0 :(得分:0)

  

如果密码与要加密的邮件完全相同,这会影响加密的强度吗?

绝对。它创建了明文与密文的1:1映射,即使没有“用自身加密”,这也是可怕的。但是,与存储密码的理想状态相比,这实际上是无穷无尽的。

首先,您需要记住AES密钥必须恰好是16个字节长。仅此而已。因此,为了使您的计划有意义,我们只能将其应用于恰好16个字节长的“密码短语”(我以最弱的含义使用这些单词)。这不是一个特别有用的构造。但让我们考虑一下这种有限的情况。

您将要存储E(x,x)) such that D(E(x,x)) == x。与所有可能的x(其中x恰好是16个字节长)相比,这是一个很小的空间,但是为什么我说“无限差?”因为我们正在将其与存储零字节进行比较,所以这是替代方法。由于此处的“ x”必须由调用方提供,因此绝对没有理由存储E(x,x)。 “ E”在这里没有任何作用。我可以将函数D重新编写为:

D: (d, p) -> p

(其中“ d”是密文,“ p”是密码)

我实际上可以忽略密文。它可以是零字节长。可以是任何东西。我真的不在乎这将比任何其他可能的加密方案都要好,后者必然会泄漏有关p的某些信息。

当我们考虑“不长16个字节”的情况时,这里没有任何事情会变得更好。在那种情况下,我需要某种KDF(密钥派生函数)。但是我什至需要的唯一原因是因为您注入了“ AES”,而在这里却没有任何作用。希望在纸张上稍加摆弄就能使您相信D(E(KDF(x), x)) == x并不比我们刚开始做的更好。

这是什么都不做的加密系统。它只说“如果我知道X,该函数将返回我X”。如果我已经知道X,为什么还要调用该函数?

任何有用的方法,任何SHA-2散列都将更好地解决。