Algorithm 验证钥匙的有效性而不削弱其强度

Algorithm 验证钥匙的有效性而不削弱其强度,algorithm,encryption,cryptography,verification,verify,Algorithm,Encryption,Cryptography,Verification,Verify,我有一个非常大的代码块(加密只需几秒钟) 我用KeyA加密它 在这个过程的后面,我会收到一个密钥(不一定是KeyA)… 但是我还不需要打开这个区块, 我真正需要的是验证这是否真的是正确打开代码的关键 我想我可以保留一个已知的块并加密它, 为了验证密钥,只需打开它,但这感觉就像削弱了密码学的威力(暴力更容易,人们可以了解一些关于密钥属性的信息) 我的假设真的削弱了她吗?为什么是/为什么不是 是否有其他方法确保钥匙匹配而不打开整个区块 我假设您使用的是对称密钥加密(用于解密文件的密钥与用于加密文件的

我有一个非常大的代码块(加密只需几秒钟)

我用KeyA加密它

在这个过程的后面,我会收到一个密钥(不一定是KeyA)…
但是我还不需要打开这个区块,
我真正需要的是验证这是否真的是正确打开代码的关键

我想我可以保留一个已知的块并加密它, 为了验证密钥,只需打开它,但这感觉就像削弱了密码学的威力(暴力更容易,人们可以了解一些关于密钥属性的信息)

  • 我的假设真的削弱了她吗?为什么是/为什么不是
  • 是否有其他方法确保钥匙匹配而不打开整个区块

  • 我假设您使用的是对称密钥加密(用于解密文件的密钥与用于加密文件的密钥相同)

    如果密码易受攻击,则已知的明文块可能会泄露有关密钥的信息。用于ZIP文件的流密码遇到了这种情况。因为拉链是压缩的,所以很难猜出足够的纯文本,但用于验证密码的校验和(以及其他因素)帮助提供了足够的纯文本以供实际应用

    原则上,您可以公开KeyA的散列(假设散列算法足够强大,无法反转,并且散列算法也没有被密码内部使用)。这将允许您在不更改消息加密方式的情况下快速拒绝无效密钥

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

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


    (免责声明:这是基于我对加密的不完全理解。如果您使用未知(随机)密码,您可能会从和/或上的专家那里得到更好的回答)

    虚拟块而不是已知块不会取消暴力强制弱化的选项吗?但必须存在随机块以验证打开的块…是的,但存在并不意味着在程序外可见。通过这种方式,代码可以在原始随机块上运行加密,并将输出与使用
    keyA
    计算的输出进行比较。现在,我的意思是攻击者也拥有它。我投票关闭这个问题,因为这与编程没有直接关系。像这样的问题更适合or。