在不削弱密码强度的情况下验证密钥的有效性

Verify validity of a key without weakening of the chipher strength

我有一个非常大的代码块(几秒钟就可以加密)。

我用KeyA加密了

稍后在这个过程中,我收到一个密钥(不一定是 KeyA)...
但我还不需要打开区块,
我真正需要的是验证这确实是正确打开代码的密钥。

我假设我可以保留一个已知块并对其进行加密, 为了验证密钥,只打开它,但感觉削弱了密码学的力量(暴力更容易,人们可以了解一些关于密钥属性的东西)。

  1. 我的假设真的削弱了chipher吗?为什么 yes/why 没有?
  2. 有没有不同的方法来确保密钥匹配而不打开整个块。

我假设您使用的是对称密钥密码术(用于解密文件的密钥与用于加密文件的密钥相同的那种)。

如果密码容易受到 Known-Plaintext Attack, then the known block of plaintext may reveal information about the key. The stream cipher used for ZIP files suffered from this problem. Because ZIPs are compressed, it was difficult to guess enough plain-text, but the checksum used to verify passwords (among other factors) helped provide sufficient plain-text for a practical attack.

原则上你可以公开KeyA的散列(假设散列算法足够强大,无法逆转,并且密码内部也没有使用散列算法)。这将使您能够快速拒绝无效密钥,而无需更改邮件的加密方式。

更进一步,您可以使用 Message authentication code such as HMAC。消息身份验证代码将验证消息(在本例中是您的非常大的代码块,或者可能只是它的文件路径)未被篡改,以及验证密钥是否正确。

如果您担心这会使暴力破解变得更容易或暴露密钥的属性,您可以将密钥分成两部分。密钥的第一部分可以纯粹用于验证,第二部分纯粹用于解密。例如MyKey = AuthenticationPart,DecryptionPart

(免责声明:这是基于我对加密的非常不完整的理解。您可能会从 security.stackexchange.com and/or crypto.stackexchange.com 上的专家那里得到更好的回复)