验证密钥的有效性,而不会削弱芯片强度

时间:2015-12-03 05:45:32

标签: algorithm encryption cryptography verification verify

我有一个非常大的代码块(隐藏几秒钟)。

我使用KeyA加密它。

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

我假设我可以保留一个已知块并加密它, 并且为了验证密钥,只打开它,但感觉就像削弱了密码学的力量(蛮力更容易,人们可以学习关键属性的一些事情)。

  1. 我的假设是否真的削弱了筹码?为什么是/为什么没有?
  2. 在没有打开整个区块的情况下,是否有不同的方法来确保密钥的匹配。

1 个答案:

答案 0 :(得分:2)

我假设您正在使用Symmetric-Key Cryptography(用于解密文件的密钥与用于加密密钥的密钥相同)。

如果密码容易受到Known-Plaintext Attack的攻击,那么已知的明文块可能会显示有关密钥的信息。用于ZIP文件的流密码受此problem影响。由于ZIP是压缩的,因此很难猜出足够的纯文本,但用于验证密码的校验和(以及其他因素)有助于为实际的attack提供足够的纯文本。

原则上,您可以公开KeyA的哈希值(假设哈希算法足够强大,无法逆转,并且哈希算法也不会被密码内部使用)。这样您就可以快速拒绝无效密钥,而无需更改邮件的加密方式。

进一步考虑这个想法,你可以使用Message authentication code,例如HMAC。消息验证代码将验证消息(在这种情况下是您的非常大的代码块,或者可能只是其文件路径)未被篡改,以及验证密钥是否正确。

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

(免责声明:这是基于我对加密的非常不完全的理解。您可能会在security.stackexchange.com和/或crypto.stackexchange.com上获得更好的回复。