
Coleta de entropia de código aberto a partir de fontes de hardware não convencionais. SDK em Rust + Python.
Um único fluxo de trabalho para pesquisa, validação e implantação criptográfica de entropia.
Por Amenti Labs
# Instalar
cargo install openentropy-cli
# Descobrir fontes de entropia na sua máquina
openentropy scan
# Benchmark de todas as fontes rápidas
openentropy bench
# Saída de 64 bytes hexadecimais aleatórios
openentropy stream --format hex --bytes 64
# Painel TUI ao vivo
openentropy monitor
Por padrão, apenas fontes rápidas (<2s) são usadas. Passe
--allpara incluir fontes mais lentas (DNS, TCP, GPU, BLE). O alias posicionalalltambém é aceito para compatibilidade.
A maioria das fontes do OpenEntropy vem da própria máquina hospedeira. O OpenEntropy também suporta dispositivos de hardware externos quando estão conectados e detectáveis:
qcicada. O OpenEntropy pode ler a saída quântica do dispositivo e fazer benchmark, analisar, gravar ou compará-la juntamente com as fontes do hospedeiro. Os modos de saída do próprio dispositivo mapeiam para raw, sha256 e samples, e o OpenEntropy agora usa o helper de modo contínuo de início fresco do qcicada 0.2.2, que descarta a entrada já armazenada em buffer do dispositivo uma vez após entrar no modo contínuo, em vez de servir a primeira leitura a partir de bytes enfileirados obsoletos. Consulte o manual do QCicada.pip install openentropy
from openentropy import EntropyPool, detect_available_sources
sources = detect_available_sources()
print(f"{len(sources)} fontes de entropia disponíveis")
pool = EntropyPool.auto()
source = sources[0]["name"]
data = pool.get_source_bytes(source, 256, conditioning="sha256")
Compilar a partir do código fonte (extensão nativa):
git clone https://github.com/amenti-labs/openentropy.git && cd openentropy
pip install maturin
maturin develop
Engenheiros de segurança usam o OpenEntropy para validar a qualidade da entropia e semear CSPRNGs:
openentropy analyze --profile security --output audit.md
Pesquisadores usam o OpenEntropy para estudar características de ruído bruto:
openentropy analyze --profile deep --output analysis.json
Engenheiros de segurança semeiam CSPRNGs, geram chaves e complementam /dev/urandom com entropia de hardware independente. A saída condicionada por SHA-256 (--conditioning sha256, o padrão) produz bytes aleatórios de qualidade criptográfica. O perfil security ativa a bateria de testes NIST, a análise de min-entropia e o condicionamento SHA-256 em um único parâmetro.
Pesquisadores estudam as características de ruído bruto de subsistemas de hardware. Passe --conditioning raw para obter bytes não branqueados e não condicionados que preservam o sinal de ruído real de cada fonte. O perfil deep ativa 100K amostras, correlação cruzada e análise de tentativas estilo PEAR.
O modo bruto permite:
A maioria dos geradores de números aleatórios são pseudorrandômicos — algoritmos determinísticos semeados uma vez. O OpenEntropy coleta continuamente ruído físico real do seu hardware:
O pool combina fluxos independentes via XOR. Nenhuma falha de fonte única pode comprometer o pool.
O condicionamento é opcional e configurável. Use --conditioning na CLI ou ?conditioning= na API HTTP:
| Modo | Bandeira | Descrição |
|---|---|---|
| SHA-256 (padrão) | --conditioning sha256 | Condicionamento SHA-256. Saída de qualidade criptográfica. |
| Von Neumann | --conditioning vonneumann | Apenas desbiasedor — remove viés enquanto preserva mais da estrutura do sinal bruto. |
| Bruto | --conditioning raw | Nenhum processamento. Bytes da fonte sem branqueamento — preserva o sinal de ruído real do hardware para pesquisa. |
O modo bruto é o que torna o OpenEntropy útil para pesquisa. A maioria das APIs HWRNG executa pós-processamento DRBG que faz toda fonte parecer bytes aleatórios uniformes, destruindo as informações que os pesquisadores precisam. A saída bruta preserva a estrutura de ruído por fonte: viés, autocorrelação, características espectrais e correlações entre fontes. Consulte Condicionamento para detalhes.
| Documento | Descrição |
|---|---|
| Catálogo de Fontes | Catálogo de fontes com explicações físicas e notas de plataforma |
| Referência da CLI | Referência completa de comandos e exemplos |
| Condicionamento | Modos de condicionamento Bruto vs VonNeumann vs SHA-256 |
| Metodologia de Análise de Tentativas | Tentativas de 200 bits estilo PEAR, portão de calibração e referências |
| Modelo de Telemetria | Modelo de contexto experimental telemetry_v1 e pontos de integração |
| Referência da API Rust | Superfície da API Rust principal |
| Arquitetura | Estrutura de crates e decisões de design |
| SDK Python | Ligações PyO3 e referência da API Python |
| Exemplos | Exemplos de código Rust e Python |
| Solução de Problemas | Problemas comuns e correções |
| Segurança | Modelo de ameaça e divulgação responsável |
O roteiro expandido de análise estatística e o inventário de métodos foram informados por:
Agradecemos o trabalho de código aberto que ajudou a moldar esta superfície comparativa de análise QRNG/PRNG.
O registro atual de fontes abrange 13 categorias baseadas em mecanismos; a disponibilidade real varia por plataforma:
| Categoria | Quantidade |
|---|---|
| Térmica | 4 |
| Temporização | 7 |
| Escalonamento | 6 |
| E/S | 6 |
| IPC | 4 |
| Microarquitetura | 16 |
| GPU | 3 |
| Rede | 3 |
| Sistema | 6 |
| Sinal | 3 |
| Sensor | 4 |
| Quântico | 1 |
Para descrições completas por fonte, disponibilidade por plataforma e notas físicas, consulte Catálogo de Fontes.
Hardware externo atualmente suportado:
qcicada — Crypta Labs QCicada USB QRNG (manual)Para a referência completa de comandos e exemplos, consulte Referência da CLI.
Fluxos de trabalho mais usados:
openentropy scan
openentropy bench
openentropy stream --format hex --bytes 64
openentropy analyze --profile security # Bateria NIST + entropia + sha256
openentropy analyze --profile deep # 100K + forense + cross-corr + tentativas
openentropy record clock_jitter --duration 30s
openentropy sessions sessions/<id> --profile deep
openentropy compare sessions/<id-a> sessions/<id-b> --profile deep
Em sessions, predefinições de perfil se aplicam apenas quando um caminho de sessão específico é fornecido. openentropy sessions sem caminho sempre permanece no modo de listagem.
As referências de metodologia de tentativas estilo PEAR (tentativas de 200 bits, Z terminal, composição de Stouffer ponderada, portão de calibração) estão documentadas em Metodologia de Análise de Tentativas.
[dependencies]
openentropy-core = "0.12"
use openentropy_core::{ConditioningMode, EntropyPool, detect_available_sources};
let sources = detect_available_sources();
println!("{} fontes disponíveis", 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();
Analise e compare dados de entropia programaticamente:
use openentropy_core::{full_analysis, compare, trial_analysis};
let data = pool.get_source_raw_bytes(&source, 5000).unwrap();
// Análise estatística por fonte
let analysis = full_analysis(&source, &data);
println!("Entropia de Shannon: {:.4} bits/byte", analysis.shannon_entropy);
// Comparação diferencial de dois fluxos
let other = pool.get_source_raw_bytes(&source, 5000).unwrap();
let diff = compare("stream_a", &data, "stream_b", &other);
// Análise de tentativas estilo PEAR
let trials = trial_analysis(&data, &Default::default());
println!("Z terminal: {:.4}, p = {:.4}", trials.terminal_z, trials.terminal_p_value);
Análise de teoria do caos (distinguir aleatoriedade real de caos determinístico):
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 com 6 crates:
| Crate | Descrição |
|---|---|
openentropy-core | Biblioteca principal — fontes, pool, condicionamento |
openentropy-cli | Binário CLI com painel TUI |
openentropy-server | Servidor HTTP de entropia Axum |
openentropy-tests | Bateria de testes inspirada no NIST SP 800-22 |
openentropy-python | Ligações Python via PyO3/maturin |
openentropy-wasm | Crate de entropia para WebAssembly/navegador |
flowchart TD
Sources[Fontes 63] --> Raw[amostras brutas]
Raw --> Pool[Pool de Entropia XOR combinar]
Pool --> Modes{Modo de condicionamento}
Modes -->|padrão| Sha[sha256]
Modes --> Vn[vonneumann]
Modes -->|passagem| RawMode[bruto]
Sha --> Output[Superfícies de saída]
Vn --> Output
RawMode --> Output
Output --> Rust[API Rust]
Output --> CLI[CLI e TUI]
Output --> Http[Servidor HTTP]
Output --> Pipe[Pipe nomeado]
Output --> Py[SDK Python]| Plataforma | Fontes | Notas |
|---|---|---|
| MacBook (M-series) | 63/63 | Conjunto completo — WiFi, BLE, câmera, microfone |
| Mac Mini / Studio / Pro | 50–55 | Sem câmera embutida, microfone em alguns modelos |
| Intel Mac | ~20 | Algumas fontes de silício/microarquitetura são específicas do ARM |
| Linux | 12–15 | Fontes de temporização, rede, disco, processos + pass-through NVMe |
A biblioteca detecta o hardware disponível em tempo de execução e ativa apenas as fontes funcionais.
Requer Rust 1.85+ e macOS ou 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())"
Consulte CONTRIBUTING.md. Ideias:
MIT — Copyright © 2026 Amenti Labs