Python 3 中的可恢复 AES GCM?

Resumable AES GCM in Python 3?

提问人:Craig Iannello 提问时间:11/7/2023 更新时间:11/7/2023 访问量:37

问:

是否有适用于 Python 3 的 AES GCM 实现,它不仅接受分段消息,还允许序列化、存储和稍后恢复密码的工作状态?

(我有一个 AES256-GCM 流、一个密钥和一个随机数。流以一系列消息的形式进入我的 Flask 应用程序,我认为我的应用程序无法一直连续运行。每当应用程序终止时,我都会失去正在进行的加密操作的工作状态。

我尝试在 GCM 模式下使用 Cryptodome.Cipher.AES,它确实允许通过 update() / update_and_digest() 机制进行分段操作,但我没有看到保存内部状态并在以后恢复它的方法。

我尝试酸洗 AES 对象,但 pickle 抱怨它无法序列化它,因为它是一个模块。

我能够存储密钥和随机数,也许可以定期消化消息并存储它,但我不清楚这是否有助于重新实例化 AES 对象并恢复操作。

python pickle aes-gcm pycryptodome 重入

评论

1赞 Nick ODell 11/7/2023
尝试逐个腌制密码的每个属性,似乎导致问题的事情是 。该属性似乎也有问题,因为这会产生错误。cipher._factorycipher._ciphercannot pickle '_cffi_backend._CDataBase' object
1赞 Frank Yellin 11/7/2023
我不确定我是否看到了这个。在收到所有消息之前,您能否避免解密?或者,保存您到目前为止收到的消息,以便您可以轻松地将解密器恢复到相同的状态?我以前真的从未听说过有人想要序列化解密器,尽管您提出了一个很好的用例。
1赞 relent95 11/9/2023
为什么不存储加密流并解密完成的数据?要加密的数据的典型大小是多少?GCM 模式并非旨在加密大量数据并解密其中的任何随机部分。在这种情况下,请考虑使用磁盘加密算法,例如 ESSIV。
0赞 Craig Iannello 11/10/2023
尽管加密流的长度可达 4 GB(基于密钥大小的准则限制)并且跨越几秒钟或几分钟,但明文将包含各种离散事件,我希望及时呈现给最终用户。
1赞 Frank Yellin 11/10/2023
我理解你的痛苦。我以前从未见过它。如果您对协议有任何控制权,那么最好在每条消息和新的 IV 中重新启动加密。您当前的协议也有点不安全;在收到最终身份验证标记之前,无法验证消息的完整性,但已根据尚未经过身份验证的消息向用户显示部分结果。很差。

答: 暂无答案