Cryptography 泄露AES加密密钥的一部分有多不安全?

Cryptography 泄露AES加密密钥的一部分有多不安全?,cryptography,aes,Cryptography,Aes,AES将整个密钥保密是至关重要的还是可能的,尽管不希望公开16个字符长密钥的前4个字符?我想使用密钥的一部分作为随机数的生成器,并想知道如果攻击者恢复密钥的这一部分会发生什么。我应该拆分原始密钥并分别使用这两个密钥,还是可以使用原始密钥及其部分?换言之: function foo(data,key) { smallKey = key.substr(0,Math.floor(key.length/4)) return { out1: MD5(smallKey), /

AES将整个密钥保密是至关重要的还是可能的,尽管不希望公开16个字符长密钥的前4个字符?我想使用密钥的一部分作为随机数的生成器,并想知道如果攻击者恢复密钥的这一部分会发生什么。我应该拆分原始密钥并分别使用这两个密钥,还是可以使用原始密钥及其部分?换言之:

function foo(data,key)
{
    smallKey = key.substr(0,Math.floor(key.length/4))
    return {
        out1: MD5(smallKey), // Could be cracked using rainbow tables
        out2: AES256CBC(data,key), // Uses the key containing the smallKey
    }
}

function boo(data,key)
{
    smallKey = key.substr(0,Math.floor(key.length/4))
    longKey = key.substr(smallKey.length - 1)
    return {
        out1: MD5(smallKey), // Could be cracked using rainbow tables
        out2: AES256CBC(data,longKey), // Uses the key not containing the smallKey
    }
}

我更喜欢使用可能使用最长密钥的foo,还是更喜欢使用完全不同密钥的boo?

如果16字节密钥中有4个字节泄漏,您可以有效地将AES的强度降低到最多96位。可能会有一些部分密钥攻击进一步降低它,但96位将是强度的上限

你绝对应该使用单独的钥匙。如果您有一些约束,无法生成两个加密强且唯一的密钥,则可以使用来拉伸AES密钥


在这种情况下,您将从主密钥派生2个密钥。如果其中一个密钥泄漏,则不可能向后导出主密钥

这不是一个真正的编程问题。代码可能有助于理解这个想法,但这不是必需的。你肯定会在网上得到比在网上更好的答案。我发现了这些问题,它们应该包含你的答案:和