python - AES key 的内容重要吗?

标签 python encryption random aes entropy

我一直在寻找 AES key 生成算法,有点担心我的 key 是什么,更关心的是,是否有“强”和“弱” key ?

找到一篇Python文章,专门在生成 key 时不使用与此类似的算法:

import random

key = []
for x in range(16):
    key.append(chr(random.randrange(0,255)))
return key

我认为 key 不应该是可预测的,并且我知道基于时间的正常“随机”字节生成并不完全是随机的。

然而,我的问题是,即使您确实使用简单的算法(甚至是 16 字节的密码)作为 key 并且正确实现了 AES,该 key 是否比其他 key 更弱?

最佳答案

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

当然,猜测时间是一个真正的选择,随机数生成器可以用该时间作为种子,并且可以通过这种方式重新生成 key 。所以这肯定不强。如果随机数生成任何其他数据,那么攻击者还可能能够计算出先前的状态,包括生成 key 的状态。这不是一个好主意。

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

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

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

key 的内容确实当然很重要。

关于python - AES key 的内容重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60714409/

相关文章:

python - 检索唯一的 child 从 firebase 添加到我在 firebase 中的监听器

c - 8 个皇后拼图 : using random numbers causes infinite loop

ios - 从共享 key 生成派生 key (ECDH-ES) - ConcatKDF

python - 随机列表选择 : How do I make sure the same item isn't ever repeated twice in a row, 一个接一个?

c - 对于相同的种子,由 C 中的 rand 生成的随机数序列是否保证始终相同?

python - 将 zip fileobj 上传到 S3 - KeyError : There is no item named 8388608 in the archive

python - 如何更改 PySimpleGUI 中复选框的大小?

python - 控制 pcolormesh 中的亮度

php - 通过 cookie 在 php 和 node.js 之间安全地共享数据

java - 如何将字符串转换为 SecretKey