
Raccolta di entropia open-source da sorgenti hardware non convenzionali. SDK Rust + Python.
Un unico flusso di lavoro per la ricerca, validazione e distribuzione crittografica dell'entropia.
Di Amenti Labs
# Installa
cargo install openentropy-cli
# Scopri le fonti di entropia sulla tua macchina
openentropy scan
# Benchmark di tutte le fonti veloci
openentropy bench
# Output 64 byte esadecimali casuali
openentropy stream --format hex --bytes 64
# Dashboard TUI live
openentropy monitor
Per impostazione predefinita, vengono utilizzate solo fonti veloci (<2s). Passa
--allper includere fonti più lente (DNS, TCP, GPU, BLE). L'alias posizionaleallè accettato anche per compatibilità.
La maggior parte delle fonti OpenEntropy proviene dalla macchina host stessa. OpenEntropy supporta anche dispositivi hardware esterni quando sono collegati e rilevabili:
qcicada. OpenEntropy può leggere l'output quantistico del dispositivo e fare benchmark, analizzare, registrare o confrontarlo insieme alle fonti dell'host. Le modalità di output del dispositivo sono mappate a raw, sha256 e samples, e OpenEntropy ora utilizza l'helper di modalità continua a nuovo avvio di QCicada da qcicada 0.2.2, quindi scarta l'input già bufferizzato del dispositivo una volta dopo essere entrato in modalità continua invece di servire la prima lettura da byte in coda obsoleti. Vedi il manuale QCicada.pip install openentropy
from openentropy import EntropyPool, detect_available_sources
sources = detect_available_sources()
print(f"{len(sources)} fonti di entropia disponibili")
pool = EntropyPool.auto()
source = sources[0]["name"]
data = pool.get_source_bytes(source, 256, conditioning="sha256")
Compila dal sorgente (estensione nativa):
git clone https://github.com/amenti-labs/openentropy.git && cd openentropy
pip install maturin
maturin develop
Ingegneri della sicurezza utilizzano OpenEntropy per validare la qualità dell'entropia e seminare CSPRNG:
openentropy analyze --profile security --output audit.md
Ricercatori utilizzano OpenEntropy per studiare le caratteristiche del rumore grezzo:
openentropy analyze --profile deep --output analysis.json
Gli ingegneri della sicurezza seminano CSPRNG, generano chiavi e integrano /dev/urandom con entropia hardware indipendente. L'output condizionato con SHA-256 (--conditioning sha256, il default) produce byte casuali di qualità crittografica. Il profilo security abilita la batteria di test NIST, la scomposizione della min-entropia e il condizionamento SHA-256 in un unico flag.
I ricercatori studiano le caratteristiche del rumore grezzo dei sottosistemi hardware. Passa --conditioning raw per ottenere byte non sbiancati e non condizionati che preservano il segnale di rumore effettivo di ciascuna fonte. Il profilo deep abilita 100K campioni, cross-correlazione e analisi di prove stile PEAR.
La modalità raw consente:
La maggior parte dei generatori di numeri casuali sono pseudocasuali — algoritmi deterministici seminati una volta. OpenEntropy raccoglie continuamente rumore fisico reale dal tuo hardware:
Il pool combina flussi indipendenti con XOR. Nessun singolo guasto di una fonte può compromettere il pool.
Il condizionamento è opzionale e configurabile. Usa --conditioning sulla CLI o ?conditioning= sull'API HTTP:
| Modalità | Flag | Descrizione |
|---|---|---|
| SHA-256 (default) | --conditioning sha256 | Condizionamento SHA-256. Output di qualità crittografica. |
| Von Neumann | --conditioning vonneumann | Solo debiasing — rimuove il bias preservando più struttura del segnale grezzo. |
| Raw | --conditioning raw | Nessuna elaborazione. Byte della fonte senza sbiancamento — preserva il segnale di rumore hardware effettivo per la ricerca. |
La modalità raw è ciò che rende OpenEntropy utile per la ricerca. La maggior parte delle API HWRNG esegue post-elaborazione DRBG che rende ogni fonte simile a byte casuali uniformi, distruggendo le informazioni di cui i ricercatori hanno bisogno. L'output raw preserva la struttura del rumore per fonte: bias, autocorrelazione, caratteristiche spettrali e correlazioni cross-fonte. Vedi Condizionamento per dettagli.
| Doc | Descrizione |
|---|---|
| Catalogo Fonti | Catalogo fonti con spiegazioni fisiche e note sulla piattaforma |
| Riferimento CLI | Riferimento completo ai comandi ed esempi |
| Condizionamento | Modalità di condizionamento Raw vs VonNeumann vs SHA-256 |
| Metodologia Analisi Prove | Prove stile PEAR a 200 bit, gate di calibrazione e riferimenti |
| Modello Telemetria | Modello contestuale sperimentale telemetry_v1 e punti di integrazione |
| API Rust | Superficie API Rust principale |
| Architettura | Struttura crate e decisioni di progettazione |
| SDK Python | Binding PyO3 e riferimento API Python |
| Esempi | Esempi di codice Rust e Python |
| Risoluzione Problemi | Problemi comuni e soluzioni |
| Sicurezza | Modello di minaccia e divulgazione responsabile |
La roadmap ampliata di analisi statistica e l'inventario dei metodi sono stati informati da:
Apprezziamo il lavoro open-source che ha contribuito a dare forma a questa superficie comparativa di analisi QRNG/PRNG.
Il registro delle fonti attuale copre 13 categorie basate sul meccanismo; la disponibilità effettiva varia per piattaforma:
| Categoria | Conteggio |
|---|---|
| Termiche | 4 |
| Temporizzazioni | 7 |
| Scheduling | 6 |
| IO | 6 |
| IPC | 4 |
| Microarchitettura | 16 |
| GPU | 3 |
| Rete | 3 |
| Sistema | 6 |
| Segnale | 3 |
| Sensore | 4 |
| Quantistica | 1 |
Per descrizioni complete per fonte, disponibilità su piattaforma e note fisiche, vedi Catalogo Fonti.
Hardware esterno attualmente supportato:
qcicada — Crypta Labs QCicada USB QRNG (manuale)Per il riferimento completo ai comandi e agli esempi, vedi Riferimento CLI.
Flussi di lavoro più usati:
openentropy scan
openentropy bench
openentropy stream --format hex --bytes 64
openentropy analyze --profile security # Batteria NIST + entropia + sha256
openentropy analyze --profile deep # 100K + forense + cross-corr + prove
openentropy record clock_jitter --duration 30s
openentropy sessions sessions/<id> --profile deep
openentropy compare sessions/<id-a> sessions/<id-b> --profile deep
Su sessions, i preset del profilo si applicano solo quando viene fornito un percorso di sessione specifico. openentropy sessions senza percorso rimane sempre in modalità elenco.
La metodologia di prova stile PEAR (prove a 200 bit, Z terminale, composizione Stouffer pesata, gate di calibrazione) è documentata in Metodologia Analisi Prove.
[dependencies]
openentropy-core = "0.12"
use openentropy_core::{ConditioningMode, EntropyPool, detect_available_sources};
let sources = detect_available_sources();
println!("{} fonti disponibili", 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();
Analizza e confronta i dati di entropia in modo programmatico:
use openentropy_core::{full_analysis, compare, trial_analysis};
let data = pool.get_source_raw_bytes(&source, 5000).unwrap();
// Analisi statistica per fonte
let analysis = full_analysis(&source, &data);
println!("Entropia di Shannon: {:.4} bit/byte", analysis.shannon_entropy);
// Confronto differenziale di due flussi
let other = pool.get_source_raw_bytes(&source, 5000).unwrap();
let diff = compare("stream_a", &data, "stream_b", &other);
// Analisi di prova stile PEAR
let trials = trial_analysis(&data, &Default::default());
println!("Z terminale: {:.4}, p = {:.4}", trials.terminal_z, trials.terminal_p_value);
Analisi della teoria del caos (distinguere casualità reale da caos deterministico):
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);
Workspace Cargo con 6 crate:
| Crate | Descrizione |
|---|---|
openentropy-core | Libreria principale — fonti, pool, condizionamento |
openentropy-cli | Binario CLI con dashboard TUI |
openentropy-server | Server HTTP Axum per entropia |
openentropy-tests | Batteria di test ispirata a NIST SP 800-22 |
openentropy-python | Binding Python tramite PyO3/maturin |
openentropy-wasm | Crate entropia WebAssembly/browser |
flowchart TD
Sources[Fonti 63] --> Raw[campioni raw]
Raw --> Pool[Pool Entropia combinazione XOR]
Pool --> Modes{Modalità condizionamento}
Modes -->|default| Sha[sha256]
Modes --> Vn[vonneumann]
Modes -->|passthrough| RawMode[raw]
Sha --> Output[Superfici di output]
Vn --> Output
RawMode --> Output
Output --> Rust[API Rust]
Output --> CLI[CLI e TUI]
Output --> Http[Server HTTP]
Output --> Pipe[Named Pipe]
Output --> Py[SDK Python]| Piattaforma | Fonti | Note |
|---|---|---|
| MacBook (serie M) | 63/63 | Suite completa — WiFi, BLE, fotocamera, microfono |
| Mac Mini / Studio / Pro | 50–55 | Nessuna fotocamera integrata, microfono su alcuni modelli |
| Mac Intel | ~20 | Alcune fonti silicio/microarch sono specifiche ARM |
| Linux | 12–15 | Fonti temporizzazione, rete, disco, processo + passthrough NVMe |
La libreria rileva l'hardware disponibile a runtime e attiva solo le fonti funzionanti.
Richiede Rust 1.85+ e macOS o 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())"
Vedi CONTRIBUTING.md. Idee:
MIT — Copyright © 2026 Amenti Labs