gpt4 book ai didi

python - 如何使用 AES 256 实现 Fernet 加密

转载 作者:行者123 更新时间:2023-12-04 12:48:45 25 4
gpt4 key购买 nike

我目前正在使用 Fernet使用 AES 128 key 的加密。但是我的客户需要使用 AES 256。我对密码学不是很熟悉,但这是我迄今为止所了解的。

Fernet 需要一个分成两半的 256 位 key 。前半部分是签名 key ,后半部分是加密 key 。因为它们是 128 位长,所以是 AES 128。

将输入 key 加倍并修改如下实现以获得 AES 256 是否足够?

class Fernet(object):
def __init__(self, key, backend=None):
if backend is None:
backend = default_backend()

key = base64.urlsafe_b64decode(key) # Here 512 bits long instead of 256

self._signing_key = key[:16] # double this
self._encryption_key = key[16:] # double this
self._backend = backend

最佳答案

是的,您可以将二进制输入加倍, key 之前的输入是 base 64 编码的。结果是否为 256 位安全取决于 key 的生成方式。所以是的,可以将 key 的大小检查加倍,但这并没有说明什么。如果输入 key Material 为 512 位,安全级别为 512 位,则是,那么拆分 key 就可以了。

我个人建议(我过去曾向 Fernet 推荐过)使用 HKDF 来派生两个 key ,而不是将 key 一分为二。我看不到 key 是如何生成的,但是如果它是由 PBKDF2 生成的——Fernet 确实使用它从密码创建 key ——那么 PBKDF2 可能需要两倍的工作量来生成 512 位,而攻击者只需要生成 256位来执行攻击(因此执行一半的工作)。

请注意,使用 base64 编码不适用于键,因为在大多数运行时字符串很难从内存中删除;如果 key 存储在 keystore 中会好得多。

关于python - 如何使用 AES 256 实现 Fernet 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50425623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com