algorithm - 结合 PRNG 和“真正的”随机、快速和(也许)愚蠢的方式
问题描述
采用像 xoroshiro 或 xorshift 这样的快速 PRNG 和像 /dev/random 这样的基于“真实”熵的生成器。
使用“真”随机播种 PRNG,但也从“真”随机中获取单个数字,并使用它对来自 PRNG 的所有结果进行异或运算以产生最终输出。
然后,每隔一段时间替换一次这个数字(例如,在生成 10000 个随机数之后)。
也许这很幼稚,但我希望这可以改善 PRNG 的某些方面,例如周期大小,而对速度的影响可以忽略不计。我怎么了?
我在这里关心的是生成 UUID(快速),它们基本上是 128 位数字,应该是“真正唯一的”。我担心的是,使用像 xorshift 系列这样的现代 PRGN,其周期接近“仅”2 ^ 128,熵种子 PRNG 生成器的碰撞机会并不像真正随机数那样可以忽略不计。
解决方案
与普通的 PRNG 相比,这些改进只是很小的。例如,用于屏蔽结果的单个真随机数可以通过对连续结果进行异或来消除。这将与连续的普通 PRNG 数字的 XOR 相同。因此,如果您可以预测 PRNG,那么对改进后的序列做同样的事情并不太难。
推荐阅读
- function - 根据周开始和周结束日期生成周历
- python - 在函数/循环问题中更新访问令牌(全局变量)
- rest - 联系特定的云控制器 API
- python - 为什么我的程序没有采用列表中的第一项?
- java - 如何使用 Spring Boot 过滤器注册 Bean 将依赖项注入 Servlet 过滤器?
- c++ - 为什么我可以在同一个赋值表达式中使用同一个对象?
- asp.net-mvc - Syncfusion EJ2(EJS) 时间表。无法从 JSON 填充
- docker - SSL Nginx 与 HTTP Docker 容器将数据从 HTTP 传递到 HTTP
- javascript - How do I find a JSON value with a specific ID?
- react-native - React Native:为什么不设置 flexGrow
在一个里面 工作?