测量并操作化硬件熵,用于研究和安全。
从设备硬件源收集熵,通过统计测试分析源质量,并通过 CLI、Rust、Python 和 HTTP 接口提供原始或条件化的输出。
一套用于熵研究、验证和加密部署的工作流。
由 Amenti Labs 开发
# 安装
cargo install openentropy-cli
# 发现机器上的熵源
openentropy scan
# 对所有快速源进行基准测试
openentropy bench
# 输出 64 个随机十六进制字节
openentropy stream --format hex --bytes 64
# 实时 TUI 仪表板
openentropy monitor
默认仅使用快速源(<2s)。传递
--all以包含较慢的源(DNS、TCP、GPU、BLE)。位置别名all也可用于兼容性。
大多数 OpenEntropy 源来自主机本身。OpenEntropy 还支持外部硬件设备(当它们连接且可发现时):
qcicada 源暴露。OpenEntropy 可以读取设备的量子输出,并对其进行基准测试、分析、记录或与主机源进行比较。设备自身的输出模式映射为 raw、sha256 和 samples,现在 OpenEntropy 使用来自 qcicada 0.2.2 的 QCicada 全新启动连续模式辅助函数,因此在进入连续模式后会丢弃一次已缓冲的设备输入,而不是从陈旧队列字节中提供第一次读取。参见 QCicada 手册。pip install openentropy
from openentropy import EntropyPool, detect_available_sources
sources = detect_available_sources()
print(f"{len(sources)} 个熵源可用")
pool = EntropyPool.auto()
source = sources[0]["name"]
data = pool.get_source_bytes(source, 256, conditioning="sha256")
从源码构建(原生扩展):
git clone https://github.com/amenti-labs/openentropy.git && cd openentropy
pip install maturin
maturin develop
安全工程师使用 OpenEntropy 验证熵质量并播种 CSPRNG:
openentropy analyze --profile security --output audit.md
研究人员使用 OpenEntropy 研究原始噪声特性:
openentropy analyze --profile deep --output analysis.json
安全工程师播种 CSPRNG、生成密钥,并用独立的硬件熵补充 /dev/urandom。SHA-256 条件化输出(--conditioning sha256,默认)产生密码学质量的随机字节。security 配置文件一次性启用 NIST 测试套件、最小熵分析和 SHA-256 条件化。
研究人员研究硬件子系统的原始噪声特性。传递 --conditioning raw 以获得未白化、无条件化的字节,从而保留每个源的实际噪声信号。deep 配置文件启用 100K 样本、互相关和 PEAR 风格的试验分析。
原始模式可实现:
大多数随机数生成器是伪随机的——一次性播种的确定性算法。OpenEntropy 持续从你的硬件中收集真实的物理噪声:
熵池通过 XOR 组合独立流。没有任何单一源故障能危及池。
条件是可选的且可配置的。在 CLI 上使用 --conditioning,在 HTTP API 上使用 ?conditioning=:
原始模式使得 OpenEntropy 对研究有用。大多数 HWRNG API 运行 DRBG 后处理,使每个源看起来像均匀随机字节,破坏了研究人员需要的信息。原始输出保留每个源的噪声结构:偏差、自相关、频谱特征和跨源相关性。详见 条件化。
扩展的统计分析路线图和方法清单受到了以下项目的启发:
我们感谢开源工作对塑造这一比较性 QRNG/PRNG 分析面的帮助。
当前源注册表涵盖 13 个基于机制的类别;实际可用性因平台而异:
有关每个源的完整描述、平台可用性和物理说明,请参见 源目录。
当前支持的外部硬件:
qcicada — Crypta Labs QCicada USB QRNG(手册)有关完整的命令参考和示例,请参见 CLI 参考。
最常用的工作流:
openentropy scan
openentropy bench
openentropy stream --format hex --bytes 64
openentropy analyze --profile security # NIST 套件 + 熵 + sha256
openentropy analyze --profile deep # 100K + 取证 + 互相关 + 试验
openentropy record clock_jitter --duration 30s
openentropy sessions sessions/<id> --profile deep
openentropy compare sessions/<id-a> sessions/<id-b> --profile deep
在 sessions 上,预设仅在提供特定会话路径时应用。openentropy sessions 不带路径始终保持在列表模式。
PEAR 风格的试验方法参考文献(200 位试验、终端 Z、加权 Stouffer 组合、校准门控)记录在 试验分析方法 中。
[dependencies]
openentropy-core = "0.12"
use openentropy_core::{ConditioningMode, EntropyPool, detect_available_sources};
let sources = detect_available_sources();
println!("{} sources available", sources.len());
let pool = EntropyPool::auto();
let source = pool.source_names()[0].clone();
let bytes = pool
.get_source_bytes(&source, 256, ConditioningMode::Sha256)
.unwrap();
let health = pool.health_report();
以编程方式分析和比较熵数据:
use openentropy_core::{full_analysis, compare, trial_analysis};
let data = pool.get_source_raw_bytes(&source, 5000).unwrap();
// 每个源的统计分析
let analysis = full_analysis(&source, &data);
println!("香农熵: {:.4} bits/byte", analysis.shannon_entropy);
// 两个流的差异比较
let other = pool.get_source_raw_bytes(&source, 5000).unwrap();
let diff = compare("stream_a", &data, "stream_b", &other);
// PEAR 风格试验分析
let trials = trial_analysis(&data, &Default::default());
println!("终端 Z: {:.4}, p = {:.4}", trials.terminal_z, trials.terminal_p_value);
混沌理论分析(区分真正随机性与确定性混沌):
use openentropy_core::chaos::chaos_analysis;
let result = chaos_analysis(&data);
println!("Hurst H={:.4}, Lyapunov λ={:.4}, D₂={:.4}",
result.hurst.hurst_exponent,
result.lyapunov.lyapunov_exponent,
result.correlation_dimension.dimension);
Cargo 工作区包含 6 个 crate:
flowchart TD
Sources[Sources 63] --> Raw[raw samples]
Raw --> Pool[Entropy Pool XOR combine]
Pool --> Modes{Conditioning mode}
Modes -->|default| Sha[sha256]
Modes --> Vn[vonneumann]
Modes -->|passthrough| RawMode[raw]
Sha --> Output[Output surfaces]
Vn --> Output
RawMode --> Output
Output --> Rust[Rust API]
Output --> CLI[CLI and TUI]
Output --> Http[HTTP Server]
Output --> Pipe[Named Pipe]
Output --> Py[Python SDK]库在运行时检测可用硬件,仅激活工作源。
需要 Rust 1.85+ 以及 macOS 或 Linux。
git clone https://github.com/amenti-labs/openentropy.git
cd openentropy
cargo build --release --workspace --exclude openentropy-python
cargo test --workspace --exclude openentropy-python
cargo install --path crates/openentropy-cli
pip install maturin
maturin develop --release
python3 -c "from openentropy import EntropyPool; print(EntropyPool.auto().get_random_bytes(16).hex())"
参见 CONTRIBUTING.md。想法:
MIT — 版权所有 © 2026 Amenti Labs
| 模式 | 标志 | 描述 |
|---|
| SHA-256(默认) | --conditioning sha256 | SHA-256 条件化。加密级输出。 |
| Von Neumann | --conditioning vonneumann | 仅去偏——去除偏差,同时保留更多原始信号结构。 |
| 原始 | --conditioning raw | 无处理。零白化的源字节——为研究保留实际硬件噪声信号。 |
| 文档 | 描述 |
|---|
| 源目录 | 包含物理解释和平台说明的源目录 |
| CLI 参考 | 完整命令参考和示例 |
| 条件化 | 原始 vs VonNeumann vs SHA-256 条件化模式 |
| 试验分析方法 | PEAR 风格 200 位试验、校准门限和参考文献 |
| 遥测模型 | 实验性 telemetry_v1 上下文模型和集成点 |
| Rust API 参考 | 核心 Rust API 接口 |
| 架构 | Crate 结构和设计决策 |
| Python SDK | PyO3 绑定和 Python API 参考 |
| 示例 | Rust 和 Python 代码示例 |
| 故障排除 | 常见问题和修复 |
| 安全 | 威胁模型和负责披露 |
| 类别 | 数量 |
|---|
| 热 | 4 |
| 定时 | 7 |
| 调度 | 6 |
| IO | 6 |
| IPC | 4 |
| 微架构 | 16 |
| GPU | 3 |
| 网络 | 3 |
| 系统 | 6 |
| 信号 | 3 |
| 传感器 | 4 |
| 量子 | 1 |
| Crate | 描述 |
|---|
openentropy-core | 核心库 — 源、池、条件化 |
openentropy-cli | CLI 二进制及其 TUI 仪表板 |
openentropy-server | Axum HTTP 熵服务器 |
openentropy-tests | NIST SP 800-22 启发的测试套件 |
openentropy-python | 通过 PyO3/maturin 的 Python 绑定 |
openentropy-wasm | WebAssembly/浏览器熵 crate |
| 平台 | 源数量 | 备注 |
|---|
| MacBook(M系列) | 63/63 | 完整套件——WiFi、BLE、摄像头、麦克风 |
| Mac Mini / Studio / Pro | 50–55 | 无内置摄像头,部分型号无麦克风 |
| Intel Mac | ~20 | 部分硅/微架构源是 ARM 专用 |
| Linux | 12–15 | 定时、网络、磁盘、进程源 + NVMe 透传 |