random - 加密过程中 PRNG 种子的随机变化
问题描述
我使用自制的 python 脚本使用 XOR one-time-pad 进行私有本地存储。密钥文件是使用python的“随机”内置模块提供的PRNG生成的。由于 PRNG 中种子的大小受到限制,因此可能的种子数量也受到限制,然后引入了针对计算工具日益强大的蛮力攻击的弱点。如果我每两个字节随机更改一次种子(例如),我会增加脚本的强度吗?脚本变慢了,但在我的情况下这不是问题。
使用的函数: SystemRandom().randint(0,255)
解决方案
SystemRandom
- 这是可选的,可能不存在 - 根据Python 3未更改的文档使用操作系统的随机数生成器。
由于 PRNG 中种子的大小受到限制,因此可能的种子数量也受到限制,然后引入了针对计算工具日益强大的蛮力攻击的弱点
这是不正确的,因为SystemRandom
它还依赖于操作系统收集的熵。任何种子通常都混合到状态中,因此添加到随机数生成器收集的熵中。
但是,请注意文档中的以下内容:
因此,
seed()
和jumpahead()
方法无效并被忽略。
因此,即使运行时/库通常支持添加种子,向熵池添加种子似乎也是不可能的。
顺便说一句,从文档中完全不清楚SystemRandom([seed])
调用中的初始种子会发生什么,但无论如何你似乎都没有使用它。
请注意,您说您可以每 2 个字节“随机更改种子”。如果该种子确实是真正随机的,那么您可能希望将其用作 OTP。如果随机流的质量取决于不同随机数流的随机性,就会发生一些奇怪的事情。
对您来说幸运的是,在大多数系统上,系统的随机数生成器都是安全的,无论您是否自己播种。
OTP 几乎从来都不是正确的答案。尝试改用 ChaCha20 等流密码。
推荐阅读
- python - 如何调整文件夹中的多个图像的大小,将它们转换为灰度并将它们保存到另一个文件夹中?
- javascript - 为什么找不到按钮js
- automation - 如何使用邮递员自动化验证 POST 请求中的所有必填字段
- amazon-web-services - 将 FIFO SQS 队列配置为 Cloudwatch 规则目标
- aggregate - 对博客文章的评论应该是聚合根吗?
- python - 如何在 ImageDataGenerator 中对顺序数据进行一次热编码?
- internet-explorer - Explorer 和 Firefox 中的渲染不一致
- javascript - 错误:错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头
- postgresql - 在 PostgreSQL 中拆分合格的类
- css - React-Awesome-Slider 和 Gatsby 不支持的样式属性