Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AES密钥的内容是否重要?_Python_Encryption_Random_Aes_Entropy - Fatal编程技术网

Python AES密钥的内容是否重要?

Python AES密钥的内容是否重要?,python,encryption,random,aes,entropy,Python,Encryption,Random,Aes,Entropy,我一直在寻找和AES密钥生成算法,稍微关心我的密钥是什么,更关心的是,是否有“强”和“弱”密钥 发现了一篇python文章,明确指出在生成密钥时不使用类似的算法: import random key = [] for x in range(16): key.append(chr(random.randrange(0,255))) return key 我认为密钥不应该是可预测的,并且我知道基于时间的正常“随机”字节生成并不完全是随机的 然而,我的问题是,即使您对密钥使用了一个简单的算

我一直在寻找和AES密钥生成算法,稍微关心我的密钥是什么,更关心的是,是否有“强”和“弱”密钥

发现了一篇python文章,明确指出在生成密钥时不使用类似的算法:

import random

key = []
for x in range(16):
    key.append(chr(random.randrange(0,255)))
return key
我认为密钥不应该是可预测的,并且我知道基于时间的正常“随机”字节生成并不完全是随机的


然而,我的问题是,即使您对密钥使用了一个简单的算法(或16字节的密码短语),并且AES得到了正确的实现,密钥是否比其他任何密钥都弱?

AES本身没有任何弱密钥。弱密钥是将带来分组密码特殊性质的密钥。例如,弱密钥可能是密钥,使用该密钥进行双重加密将再次生成明文。但是,弱密钥的定义不是您正在使用的定义

当然,猜测时间是一个现实的选择,随机数生成器可以在该时间内播种,这样就可以重新生成密钥。所以这肯定不强。如果随机数生成任何其他数据,则攻击者还可以计算以前的状态,包括生成密钥的状态。这不是个好主意

任何对称密码都要求密钥完全不可预测。这不仅仅意味着它们很难猜测;他们应该是不可能猜到的。否则,密钥的安全强度将无法满足。例如,如果使用16个完全随机的十六进制字符而不是字节作为密钥,则密钥大小将减少一半,只剩下64位而不是128位

密码也有同样的问题。不幸的是,人类提供的密码非常脆弱。这就是为什么我们在基于密码的密钥派生函数或PBKDF中使用密钥拉伸等技巧来加强基于密码的加密或PBE

因此,是的,密钥比由完全随机字节组成的密钥要弱,因为攻击者更容易猜到它。这基本上与所使用的(分组)密码无关

的内容肯定很重要