AES 密钥的内容重要吗?
Does the content of an AES Key matter?
我一直在寻找 AES 密钥生成算法,有点担心 'what' 我的密钥是什么,更担心的是,是否有 'strong' 和 'weak' 密钥?
找到了一篇 python 文章,其中明确指出在生成密钥时不使用与此类似的算法:
import random
key = []
for x in range(16):
key.append(chr(random.randrange(0,255)))
return key
我认为密钥不应该是可预测的,而且我知道基于时间的正常 'random' 字节生成并不是完全随机的。
但是,我的问题是,即使您确实对密钥使用了简单的算法(甚至是 16 字节的密码)并且正确实施了 AES,该密钥是否比其他任何密钥都弱?
AES 本身没有任何弱密钥。弱密钥是将带来分组密码的特殊属性的密钥。例如,弱密钥可能是使用该密钥进行双重加密将再次生成明文的密钥。然而,弱键的定义不是您使用的那个。
当然,猜测时间是一个真正的选择,随机数生成器可以用那个时间作为种子,这样就可以重新生成密钥。所以这肯定不强。如果随机数生成任何其他数据,则攻击者还可以计算先前的状态,包括生成密钥的状态。不是个好主意。
任何对称密码都要求密钥完全不可预测。这不仅意味着它们难以猜测;还意味着它们很难猜到。他们应该是不可能猜到的。否则不满足密钥的安全强度。例如,如果您使用 16 个完全随机的十六进制字符 而不是字节 作为密钥,您会将密钥大小减半,只留下 64 位而不是 128.
密码也有同样的问题。不幸的是,人类提出的密码非常弱。这就是为什么我们在基于密码的密钥派生函数或 PBKDF 中使用密钥拉伸等技巧来加强基于密码的加密或 PBE。
所以是的,密钥 比由完全随机字节组成的密钥弱,因为攻击者更容易猜到它。这基本上与使用的(分组)密码无关。
密钥的内容确实当然重要。
我一直在寻找 AES 密钥生成算法,有点担心 'what' 我的密钥是什么,更担心的是,是否有 'strong' 和 'weak' 密钥?
找到了一篇 python 文章,其中明确指出在生成密钥时不使用与此类似的算法:
import random
key = []
for x in range(16):
key.append(chr(random.randrange(0,255)))
return key
我认为密钥不应该是可预测的,而且我知道基于时间的正常 'random' 字节生成并不是完全随机的。
但是,我的问题是,即使您确实对密钥使用了简单的算法(甚至是 16 字节的密码)并且正确实施了 AES,该密钥是否比其他任何密钥都弱?
AES 本身没有任何弱密钥。弱密钥是将带来分组密码的特殊属性的密钥。例如,弱密钥可能是使用该密钥进行双重加密将再次生成明文的密钥。然而,弱键的定义不是您使用的那个。
当然,猜测时间是一个真正的选择,随机数生成器可以用那个时间作为种子,这样就可以重新生成密钥。所以这肯定不强。如果随机数生成任何其他数据,则攻击者还可以计算先前的状态,包括生成密钥的状态。不是个好主意。
任何对称密码都要求密钥完全不可预测。这不仅意味着它们难以猜测;还意味着它们很难猜到。他们应该是不可能猜到的。否则不满足密钥的安全强度。例如,如果您使用 16 个完全随机的十六进制字符 而不是字节 作为密钥,您会将密钥大小减半,只留下 64 位而不是 128.
密码也有同样的问题。不幸的是,人类提出的密码非常弱。这就是为什么我们在基于密码的密钥派生函数或 PBKDF 中使用密钥拉伸等技巧来加强基于密码的加密或 PBE。
所以是的,密钥 比由完全随机字节组成的密钥弱,因为攻击者更容易猜到它。这基本上与使用的(分组)密码无关。
密钥的内容确实当然重要。