mehul-engineer/Bit-Based-Randomized-Entropy-System-Scheduler-Based-RNG
GitHub: mehul-engineer/Bit-Based-Randomized-Entropy-System-Scheduler-Based-RNG
一个实验性的 Java 随机数生成器,通过制造多线程并发竞争并利用 OS 线程调度器的不可预测时序作为熵源来生成非确定性随机数。
Stars: 1 | Forks: 0
# BBRES-RNG
**基于比特的随机熵系统 — 基于调度器的 RNG**
*一款实验性的 Java 随机数生成器,从 OS 线程调度的混沌中提取实时熵。*
[](#requirements)
[](#requirements)
[](https://qquantt.com/article.html?id=sys-eng%2F001)
## 概述
BBRES-RNG 是一个多线程随机数生成器,它刻意制造受控的并发,并将 OS 线程调度器不可预测的时序行为作为其熵源。它生成的每一个数字都受到宿主机实时的、非确定性状态的塑造,使得每次输出在实践中都是不可重复的。
这在几个方面打破了传统的 PRNG 设计:BBRES-RNG 不再依赖确定性公式、固定的数学种子和单线程执行,而是基于熵、本质上是非确定性的,并且建立在多线程并发架构之上。
本项目旨在用于研究、实验和教育学习。统计测试结果可以帮助评估给定样本的观测输出质量;但测试结果本身并不能证明其加密安全性、熵强度,或证明其适用于安全敏感型场景。
## 架构
生成 pipeline 经历三个阶段:
1. **阶段 1 - 线程生成与受控竞争条件:** 同时启动多个工作线程(`randomBitGenRNG`)。OS 调度器决定它们的执行顺序,该顺序会根据 CPU 状态、系统负载和内核级调度产生微秒级的不可预测变化。
2. **阶段 2 - 基于时序的熵收集:** 每个工作线程竞相将其 ID 记录到一个共享的标志数组中。到达顺序成为原始的熵信号,而单独的 `AtomicIntegerArray` 在无需全局锁的情况下协调跨线程组的就绪状态。
3. **阶段 3 - 按位混合与聚合:** 来自最先和最后约 20% 完成者的到达顺序值通过 XOR 操作进行组合。这些值通过一个小型的 xorshift 风格混合步骤进行处理,每个周期产生一个随机比特。然后这些比特由 `RNG.java` 组装成任意范围的整数。
编排层(`randomBitGeneratorModifiedRoot.java`)将请求的并发划分为最多包含 32 个线程的块,上限最高为 64 个段。它公开了两种生成技术:
* **G1(默认):** 按照线程的自然 ID 顺序进行分段。
* **G2:** 在分段之前,执行 Fisher-Yates 风格的线程 ID 洗牌(由嵌套的 BBRES-RNG v1 调用驱动),从而为调度竞争增加额外的不可预测性。
## 项目结构
```
src/
├── Main.java (entry point and usage examples)
└── bbresRNG/
├── RNG.java (public API)
├── randomBitGeneratorModifiedRoot.java (core bit generator and thread orchestration, G1/G2)
├── modRandomBitGenRNG.java (worker-thread variant collecting timing data in parallel)
└── randomBitGenRNG.java (base worker thread launched for entropy harvesting)
docs/ (contains architecture documentation and full validation reports)
LICENSE
README.md
```
标签:JS文件枚举, 域名枚举, 多线程并发, 密码学研究, 熵收集, 系统调度, 随机数生成