首页 > 解决方案 > 加密过程中 PRNG 种子的随机变化

问题描述

我使用自制的 python 脚本使用 XOR one-time-pad 进行私有本地存储。密钥文件是使用python的“随机”内置模块提供的PRNG生成的。由于 PRNG 中种子的大小受到限制,因此可能的种子数量也受到限制,然后引入了针对计算工具日益强大的蛮力攻击的弱点。如果我每两个字节随机更改一次种子(例如),我会增加脚本的强度吗?脚本变慢了,但在我的情况下这不是问题。

使用的函数: SystemRandom().randint(0,255)

标签: random

解决方案


SystemRandom- 这是可选的,可能不存在 - 根据Python 3未更改的文档使用操作系统的随机数生成器。

由于 PRNG 中种子的大小受到限制,因此可能的种子数量也受到限制,然后引入了针对计算工具日益强大的蛮力攻击的弱点

这是不正确的,因为SystemRandom它还依赖于操作系统收集的熵。任何种子通常都混合到状态中,因此添加到随机数生成器收集的熵中。

但是,请注意文档中的以下内容:

因此,seed()jumpahead()方法无效并被忽略。

因此,即使运行时/库通常支持添加种子,向熵池添加种子似乎也是不可能的。

顺便说一句,从文档中完全不清楚SystemRandom([seed])调用中的初始种子会发生什么,但无论如何你似乎都没有使用它。


请注意,您说您可以每 2 个字节“随机更改种子”。如果该种子确实是真正随机的,那么您可能希望将其用作 OTP。如果随机流的质量取决于不同随机数流的随机性,就会发生一些奇怪的事情。

对您来说幸运的是,在大多数系统上,系统的随机数生成器都是安全的,无论您是否自己播种。

OTP 几乎从来都不是正确的答案。尝试改用 ChaCha20 等流密码。


推荐阅读