
Recolección de entropía de código abierto desde fuentes de hardware no convencionales. SDK de Rust + Python.
Un flujo de trabajo para investigación, validación y despliegue criptográfico de entropía.
Por Amenti Labs
# Instalar
cargo install openentropy-cli
# Descubrir fuentes de entropía en tu máquina
openentropy scan
# Medir el rendimiento de todas las fuentes rápidas
openentropy bench
# Generar 64 bytes hexadecimales aleatorios
openentropy stream --format hex --bytes 64
# Panel TUI en vivo
openentropy monitor
Por defecto, solo se usan fuentes rápidas (<2s). Pasa
--allpara incluir fuentes más lentas (DNS, TCP, GPU, BLE). El alias posicionalalltambién se acepta para compatibilidad.
La mayoría de las fuentes de OpenEntropy provienen del propio equipo anfitrión. OpenEntropy también admite dispositivos de hardware externos cuando están conectados y son detectables:
qcicada. OpenEntropy puede leer la salida cuántica del dispositivo y medir, analizar, registrar o comparar su rendimiento junto con las fuentes locales. Los modos de salida del dispositivo se corresponden con raw, sha256 y samples, y OpenEntropy ahora utiliza el asistente de modo continuo de inicio nuevo de QCicada desde qcicada 0.2.2, por lo que descarta cualquier entrada ya almacenada en el búfer del dispositivo una vez al entrar en modo continuo en lugar de servir la primera lectura a partir de bytes obsoletos en cola. Consulta el manual de QCicada.pip install openentropy
from openentropy import EntropyPool, detect_available_sources
sources = detect_available_sources()
print(f"{len(sources)} fuentes de entropía disponibles")
pool = EntropyPool.auto()
source = sources[0]["name"]
data = pool.get_source_bytes(source, 256, conditioning="sha256")
Compilar desde el código fuente (extensión nativa):
git clone https://github.com/amenti-labs/openentropy.git && cd openentropy
pip install maturin
maturin develop
Los ingenieros de seguridad usan OpenEntropy para validar la calidad de la entropía y sembrar CSPRNGs:
openentropy analyze --profile security --output audit.md
Los investigadores usan OpenEntropy para estudiar las características del ruido crudo:
openentropy analyze --profile deep --output analysis.json
Los ingenieros de seguridad siembran CSPRNGs, generan claves y complementan /dev/urandom con entropía de hardware independiente. La salida acondicionada con SHA-256 (--conditioning sha256, el valor predeterminado) produce bytes aleatorios de calidad criptográfica. El perfil security habilita la batería de pruebas NIST, el desglose de entropía mínima y el acondicionamiento SHA-256 en un solo indicador.
Los investigadores estudian las características del ruido crudo de los subsistemas de hardware. Pasa --conditioning raw para obtener bytes sin blanquear ni acondicionar que preserven la señal de ruido real de cada fuente. El perfil deep habilita 100K muestras, correlación cruzada y análisis de ensayos estilo PEAR.
El modo crudo permite:
La mayoría de los generadores de números aleatorios son pseudoaleatorios — algoritmos deterministas sembrados una vez. OpenEntropy cosecha continuamente ruido físico real de tu hardware:
El pool combina flujos independientes mediante XOR. Ningún fallo de una sola fuente puede comprometer el pool.
El acondicionamiento es opcional y configurable. Usa --conditioning en la CLI o ?conditioning= en la API HTTP:
| Modo | Bandera | Descripción |
|---|---|---|
| SHA-256 (predeterminado) | --conditioning sha256 | Acondicionamiento SHA-256. Salida de calidad criptográfica. |
| Von Neumann | --conditioning vonneumann | Solo desviación — elimina el sesgo mientras preserva más de la estructura de la señal cruda. |
| Crudo | --conditioning raw | Sin procesamiento. Bytes de fuente sin blanqueo — preserva la señal de ruido real del hardware para investigación. |
El modo crudo es lo que hace que OpenEntropy sea útil para la investigación. La mayoría de las API de HWRNG ejecutan postprocesamiento DRBG que hace que toda fuente parezca bytes aleatorios uniformes, destruyendo la información que los investigadores necesitan. La salida cruda preserva la estructura de ruido por fuente: sesgo, autocorrelación, características espectrales y correlaciones entre fuentes. Consulta Acondicionamiento para más detalles.
| Documento | Descripción |
|---|---|
| Catálogo de fuentes | Catálogo de fuentes con explicaciones físicas y notas de plataforma |
| Referencia de CLI | Referencia completa de comandos y ejemplos |
| Acondicionamiento | Modos de acondicionamiento: Crudo vs VonNeumann vs SHA-256 |
| Metodología de análisis de ensayos | Ensayos de 200 bits estilo PEAR, puerta de calibración y referencias |
| Modelo de telemetría | Modelo de contexto experimental telemetry_v1 y puntos de integración |
| Referencia de API Rust | Superficie de API central de Rust |
| Arquitectura | Estructura de crates y decisiones de diseño |
| SDK de Python | Enlaces PyO3 y referencia de API de Python |
| Ejemplos | Ejemplos de código en Rust y Python |
| Solución de problemas | Problemas comunes y correcciones |
| Seguridad | Modelo de amenazas y divulgación responsable |
El mapa de ruta ampliado de análisis estadístico y el inventario de métodos fueron informados por:
Agradecemos el trabajo de código abierto que ayudó a dar forma a esta superficie de análisis comparativo QRNG/PRNG.
El registro actual de fuentes abarca 13 categorías basadas en mecanismos; la disponibilidad real varía según la plataforma:
| Categoría | Cantidad |
|---|---|
| Térmica | 4 |
| Temporización | 7 |
| Planificación | 6 |
| E/S | 6 |
| IPC | 4 |
| Microarquitectura | 16 |
| GPU | 3 |
| Red | 3 |
| Sistema | 6 |
| Señal | 3 |
| Sensor | 4 |
| Cuántica | 1 |
Para descripciones completas por fuente, disponibilidad en plataformas y notas físicas, consulta Catálogo de fuentes.
Hardware externo actualmente compatible:
qcicada — Crypta Labs QCicada USB QRNG (manual)Para la referencia completa de comandos y ejemplos, consulta Referencia de CLI.
Flujos de trabajo más usados:
openentropy scan
openentropy bench
openentropy stream --format hex --bytes 64
openentropy analyze --profile security # Batería NIST + entropía + sha256
openentropy analyze --profile deep # 100K + forense + correlación cruzada + ensayos
openentropy record clock_jitter --duration 30s
openentropy sessions sessions/<id> --profile deep
openentropy compare sessions/<id-a> sessions/<id-b> --profile deep
En sessions, los ajustes predefinidos de perfil solo se aplican cuando se proporciona una ruta de sesión específica. openentropy sessions sin ruta siempre permanece en modo lista.
Las referencias de la metodología de ensayos estilo PEAR (ensayos de 200 bits, Z terminal, composición Stouffer ponderada, puerta de calibración) están documentadas en Metodología de análisis de ensayos.
[dependencies]
openentropy-core = "0.12"
use openentropy_core::{ConditioningMode, EntropyPool, detect_available_sources};
let sources = detect_available_sources();
println!("{} fuentes disponibles", 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();
Analiza y compara datos de entropía mediante programación:
use openentropy_core::{full_analysis, compare, trial_analysis};
let data = pool.get_source_raw_bytes(&source, 5000).unwrap();
// Análisis estadístico por fuente
let analysis = full_analysis(&source, &data);
println!("Entropía de Shannon: {:.4} bits/byte", analysis.shannon_entropy);
// Comparación diferencial de dos flujos
let other = pool.get_source_raw_bytes(&source, 5000).unwrap();
let diff = compare("stream_a", &data, "stream_b", &other);
// Análisis de ensayos estilo PEAR
let trials = trial_analysis(&data, &Default::default());
println!("Z terminal: {:.4}, p = {:.4}", trials.terminal_z, trials.terminal_p_value);
Análisis de teoría del caos (distinguir aleatoriedad real de caos determinista):
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 de Cargo con 6 crates:
| Crate | Descripción |
|---|---|
openentropy-core | Biblioteca principal — fuentes, pool, acondicionamiento |
openentropy-cli | Binario CLI con panel TUI |
openentropy-server | Servidor HTTP de entropía con Axum |
openentropy-tests | Batería de pruebas inspirada en NIST SP 800-22 |
openentropy-python | Enlaces para Python mediante PyO3/maturin |
openentropy-wasm | Crate de entropía para WebAssembly/navegador |
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]| Plataforma | Fuentes | Notas |
|---|---|---|
| MacBook (M-series) | 63/63 | Suite completa — WiFi, BLE, cámara, micrófono |
| Mac Mini / Studio / Pro | 50–55 | Sin cámara integrada, micrófono en algunos modelos |
| Intel Mac | ~20 | Algunas fuentes de silicio/microarquitectura son específicas de ARM |
| Linux | 12–15 | Fuentes de temporización, red, disco, procesos + paso a través de NVMe |
La biblioteca detecta el hardware disponible en tiempo de ejecución y solo activa las fuentes que funcionan.
Requiere Rust 1.85+ y 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())"
Consulta CONTRIBUTING.md. Ideas:
MIT — Derechos de autor © 2026 Amenti Labs