
비전통적인 하드웨어 소스로부터의 오픈소스 엔트로피 수집. Rust + Python SDK.
하드웨어 엔트로피를 연구와 보안을 위해 측정하고 운영화합니다.
온보드 하드웨어 소스에서 엔트로피를 수집하고, 통계적 테스트로 소스 품질을 분석하며, CLI, Rust, Python 및 HTTP 인터페이스를 통해 원시 또는 컨디셔닝된 출력을 제공합니다.
엔트로피 연구, 검증 및 암호화 배포를 위한 하나의 워크플로우.
Amenti Labs 제공
# Install
cargo install openentropy-cli
# Discover entropy sources on your machine
openentropy scan
# Benchmark all fast sources
openentropy bench
# Output 64 random hex bytes
openentropy stream --format hex --bytes 64
# Live TUI dashboard
openentropy monitor
기본적으로 빠른 소스(<2초)만 사용됩니다. 느린 소스(DNS, TCP, GPU, BLE)를 포함하려면
--all을 전달하세요. 위치 인수all도 호환성을 위해 허용됩니다.
대부분의 OpenEntropy 소스는 호스트 시스템 자체에서 제공됩니다. OpenEntropy는 연결되어 있고 검색 가능한 경우 외부 하드웨어 장치도 지원합니다:
qcicada 소스로 제공됩니다. OpenEntropy는 장치의 양자 출력을 읽고, 온호스트 소스와 함께 벤치마킹, 분석, 기록 또는 비교할 수 있습니다. 장치의 자체 출력 모드는 raw, sha256, samples로 매핑되며, OpenEntropy는 이제 qcicada 0.2.2의 fresh-start 연속 모드 도우미를 사용하므로 연속 모드 진입 후 한 번 이미 버퍼링된 장치 입력을 폐기하여 첫 번째 읽기가 오래된 대기열 바이트에서 제공되지 않도록 합니다. QCicada 매뉴얼을 참조하세요.pip install openentropy
from openentropy import EntropyPool, detect_available_sources
sources = detect_available_sources()
print(f"{len(sources)} entropy sources available")
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 스타일 시행 분석을 활성화합니다.
원시 모드는 다음을 가능하게 합니다:
대부분의 난수 생성기는 **의사 난수(pseudorandom)**입니다 — 한 번 시드된 결정론적 알고리즘입니다. 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
session에서 프로필 프리셋은 특정 세션 경로가 제공된 경우에만 적용됩니다.
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!("Shannon entropy: {:.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!("Terminal 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);
6개의 크레이트로 구성된 Cargo 워크스페이스:
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 — Copyright © 2026 Amenti Labs
| 모드 | 플래그 | 설명 |
|---|
| SHA-256 (기본값) | --conditioning sha256 | SHA-256 컨디셔닝. 암호학적 품질 출력. |
| Von Neumann | --conditioning vonneumann | 디바이어싱만 수행 — 편향은 제거하지만 원시 신호 구조는 더 많이 보존합니다. |
| Raw | --conditioning raw | 처리 없음. 표백이 전혀 없는 소스 바이트 — 연구를 위해 실제 하드웨어 노이즈 신호를 보존합니다. |
| 문서 | 설명 |
|---|
| 소스 카탈로그 | 물리적 설명과 플랫폼별 참고사항이 포함된 소스 카탈로그 |
| CLI 참조 | 전체 명령 참조 및 예제 |
| 컨디셔닝 | Raw vs VonNeumann vs SHA-256 컨디셔닝 모드 |
| 시행 분석 방법론 | PEAR 스타일 200비트 시행, 보정 게이트 및 참고 자료 |
| 텔레메트리 모델 | 실험적 telemetry_v1 컨텍스트 모델 및 통합 지점 |
| Rust API 참조 | 핵심 Rust API 표면 |
| 아키텍처 | 크레이트 구조 및 설계 결정 사항 |
| Python SDK | PyO3 바인딩 및 Python API 참조 |
| 예제 | Rust 및 Python 코드 예제 |
| 문제 해결 | 일반적인 문제 및 해결 방법 |
| 보안 | 위협 모델 및 책임 있는 공개 |
| 범주 | 개수 |
|---|
| 열 (Thermal) | 4 |
| 타이밍 (Timing) | 7 |
| 스케줄링 (Scheduling) | 6 |
| I/O | 6 |
| IPC | 4 |
| 마이크로아키텍처 (Microarchitecture) | 16 |
| GPU | 3 |
| 네트워크 (Network) | 3 |
| 시스템 (System) | 6 |
| 신호 (Signal) | 3 |
| 센서 (Sensor) | 4 |
| 양자 (Quantum) | 1 |
| 크레이트 | 설명 |
|---|
openentropy-core | 핵심 라이브러리 — 소스, 풀, 컨디셔닝 |
openentropy-cli | TUI 대시보드가 포함된 CLI 바이너리 |
openentropy-server | Axum HTTP 엔트로피 서버 |
openentropy-tests | NIST SP 800-22에서 영감을 받은 테스트 배터리 |
openentropy-python | PyO3/maturin을 통한 Python 바인딩 |
openentropy-wasm | WebAssembly/브라우저 엔트로피 크레이트 |
| 플랫폼 | 소스 | 참고 사항 |
|---|
| MacBook (M 시리즈) | 63/63 | 전체 세트 — WiFi, BLE, 카메라, 마이크 |
| Mac Mini / Studio / Pro | 50–55 | 일부 모델에 내장 카메라, 마이크 없음 |
| Intel Mac | ~20 | 일부 실리콘/마이크로아키텍처 소스는 ARM 전용 |
| Linux | 12–15 | 타이밍, 네트워크, 디스크, 프로세스 소스 + NVMe 패스스루 |