
Récolte open-source d'entropie à partir de sources matérielles non conventionnelles. SDK Rust + Python.
Mesurer et opérationnaliser l'entropie matérielle pour la recherche et la sécurité.
Collectez l'entropie des sources matérielles de l'appareil, analysez la qualité des sources avec des tests statistiques, et fournissez une sortie brute ou conditionnée via les interfaces CLI, Rust, Python et HTTP.
Un workflow unique pour la recherche sur l'entropie, la validation et le déploiement cryptographique.
Par Amenti Labs
# Installation
cargo install openentropy-cli
# Découvrir les sources d'entropie sur votre machine
openentropy scan
# Tester toutes les sources rapides
openentropy bench
# Générer 64 octets hexadécimaux aléatoires
openentropy stream --format hex --bytes 64
# Tableau de bord TUI en direct
openentropy monitor
Par défaut, seules les sources rapides (<2s) sont utilisées. Passez
--allpour inclure les sources plus lentes (DNS, TCP, GPU, BLE). L'alias positionnelallest également accepté pour la compatibilité.
La plupart des sources OpenEntropy proviennent de la machine hôte elle-même. OpenEntropy prend également en charge les périphériques matériels externes lorsqu'ils sont connectés et détectables :
qcicada. OpenEntropy peut lire la sortie quantique du périphérique et effectuer des tests, des analyses, des enregistrements ou des comparaisons aux côtés des sources de l'hôte. Les modes de sortie du périphérique correspondent à raw, sha256 et samples, et OpenEntropy utilise désormais l'assistant de démarrage à nouveau en mode continu de qcicada 0.2.2, ce qui lui permet de jeter une fois les données déjà mises en mémoire tampon après être entré en mode continu, au lieu de servir la première lecture à partir d'octets obsolètes mis en file d'attente. Consultez le manuel QCicada.pip install openentropy
from openentropy import EntropyPool, detect_available_sources
sources = detect_available_sources()
print(f"{len(sources)} sources d'entropie disponibles")
pool = EntropyPool.auto()
source = sources[0]["name"]
data = pool.get_source_bytes(source, 256, conditioning="sha256")
Construire à partir des sources (extension native) :
git clone https://github.com/amenti-labs/openentropy.git && cd openentropy
pip install maturin
maturin develop
Les ingénieurs en sécurité utilisent OpenEntropy pour valider la qualité de l'entropie et ensemencer les CSPRNG :
openentropy analyze --profile security --output audit.md
Les chercheurs utilisent OpenEntropy pour étudier les caractéristiques du bruit brut :
openentropy analyze --profile deep --output analysis.json
Les ingénieurs en sécurité ensemencent les CSPRNG, génèrent des clés et complètent /dev/urandom avec une entropie matérielle indépendante. La sortie conditionnée par SHA-256 (--conditioning sha256, par défaut) produit des octets aléatoires de qualité cryptographique. Le profil security active la batterie de tests NIST, la décomposition de l'entropie minimale et le conditionnement SHA-256 en un seul indicateur.
Les chercheurs étudient les caractéristiques du bruit brut des sous-systèmes matériels. Passez --conditioning raw pour obtenir des octets non blanchis et non conditionnés qui préservent le signal de bruit réel de chaque source. Le profil deep active 100 000 échantillons, la corrélation croisée et l'analyse par essais de type PEAR.
Le mode brut permet :
La plupart des générateurs de nombres aléatoires sont pseudo-aléatoires — des algorithmes déterministes ensemencés une seule fois. OpenEntropy collecte en continu du bruit physique réel à partir de votre matériel :
Le pool combine par XOR des flux indépendants. Aucune défaillance d'une seule source ne peut compromettre le pool.
Le conditionnement est optionnel et configurable. Utilisez --conditioning sur la CLI ou ?conditioning= sur l'API HTTP :
Le mode brut est ce qui rend OpenEntropy utile pour la recherche. La plupart des API HWRNG appliquent un post-traitement DRBG qui donne l'impression que chaque source produit des octets aléatoires uniformes, détruisant ainsi les informations dont les chercheurs ont besoin. La sortie brute préserve la structure de bruit par source : biais, autocorrélation, caractéristiques spectrales et corrélations entre sources. Voir Conditionnement pour plus de détails.
La feuille de route élargie de l'analyse statistique et l'inventaire des méthodes ont été influencés par :
Nous apprécions le travail open source qui a contribué à façonner cette surface d'analyse comparative QRNG/PRNG.
Le registre actuel des sources couvre 13 catégories basées sur les mécanismes ; la disponibilité réelle varie selon la plateforme :
Pour des descriptions complètes par source, la disponibilité sur les plateformes et des notes physiques, consultez le Catalogue des sources.
Matériel externe actuellement pris en charge :
qcicada — Crypta Labs QCicada USB QRNG (manuel)Pour la référence complète des commandes et des exemples, consultez la Référence CLI.
Workflows les plus courants :
openentropy scan
openentropy bench
openentropy stream --format hex --bytes 64
openentropy analyze --profile security # Batterie NIST + entropie + sha256
openentropy analyze --profile deep # 100K + forensique + corrélation croisée + essais
openentropy record clock_jitter --duration 30s
openentropy sessions sessions/<id> --profile deep
openentropy compare sessions/<id-a> sessions/<id-b> --profile deep
Sur sessions, les préréglages de profil ne s'appliquent que lorsqu'un chemin de session spécifique est fourni. openentropy sessions sans chemin reste toujours en mode liste.
Les références à la méthodologie d'essais de type PEAR (essais à 200 bits, Z terminal, composition de Stouffer pondérée, porte d'étalonnage) sont documentées dans Méthodologie d'analyse par essais.
[dependencies]
openentropy-core = "0.12"
use openentropy_core::{ConditioningMode, EntropyPool, detect_available_sources};
let sources = detect_available_sources();
println!("{} sources 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();
Analyser et comparer des données d'entropie par programmation :
use openentropy_core::{full_analysis, compare, trial_analysis};
let data = pool.get_source_raw_bytes(&source, 5000).unwrap();
// Analyse statistique par source
let analysis = full_analysis(&source, &data);
println!("Entropie de Shannon : {:.4} bits/octet", analysis.shannon_entropy);
// Comparaison différentielle de deux flux
let other = pool.get_source_raw_bytes(&source, 5000).unwrap();
let diff = compare("flux_a", &data, "flux_b", &other);
// Analyse par essais de type PEAR
let trials = trial_analysis(&data, &Default::default());
println!("Z terminal : {:.4}, p = {:.4}", trials.terminal_z, trials.terminal_p_value);
Analyse de la théorie du chaos (distinguer le véritable hasard du chaos déterministe) :
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);
Espace de travail Cargo avec 6 crates :
flowchart TD
Sources[Sources 63] --> Raw[échantillons bruts]
Raw --> Pool[Pool d'entropie XOR combine]
Pool --> Modes{Mode de conditionnement}
Modes -->|par défaut| Sha[sha256]
Modes --> Vn[vonneumann]
Modes -->|passage direct| RawMode[brut]
Sha --> Output[Surfaces de sortie]
Vn --> Output
RawMode --> Output
Output --> Rust[API Rust]
Output --> CLI[CLI et TUI]
Output --> Http[Serveur HTTP]
Output --> Pipe[Tuyau nommé]
Output --> Py[SDK Python]
La bibliothèque détecte le matériel disponible à l'exécution et n'active que les sources fonctionnelles.
Nécessite Rust 1.85+ et 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())"
Consultez CONTRIBUTING.md. Idées :
MIT — Copyright © 2026 Amenti Labs
| Mode | Drapeau | Description |
|---|
| SHA-256 (par défaut) | --conditioning sha256 | Conditionnement SHA-256. Sortie de qualité cryptographique. |
| Von Neumann | --conditioning vonneumann | Débiaisage uniquement — supprime le biais tout en préservant davantage la structure du signal brut. |
| Brut | --conditioning raw | Aucun traitement. Octets source sans aucun blanchiment — préserve le signal de bruit matériel réel pour la recherche. |
| Doc | Description |
|---|
| Catalogue des sources | Catalogue des sources avec explications physiques et notes de plateforme |
| Référence CLI | Référence complète des commandes et exemples |
| Conditionnement | Modes de conditionnement Brut, VonNeumann et SHA-256 |
| Méthodologie d'analyse par essais | Essais à 200 bits de type PEAR, porte d'étalonnage et références |
| Modèle de télémétrie | Modèle de contexte expérimental telemetry_v1 et points d'intégration |
| Référence API Rust | Surface de l'API Rust principale |
| Architecture | Structure des crates et décisions de conception |
| SDK Python | Liaisons PyO3 et référence API Python |
| Exemples | Exemples de code Rust et Python |
| Dépannage | Problèmes courants et correctifs |
| Sécurité | Modèle de menace et divulgation responsable |
| Catégorie | Nombre |
|---|
| Thermique | 4 |
| Temporel | 7 |
| Ordonnancement | 6 |
| E/S | 6 |
| IPC | 4 |
| Microarchitecture | 16 |
| GPU | 3 |
| Réseau | 3 |
| Système | 6 |
| Signal | 3 |
| Capteur | 4 |
| Quantique | 1 |
| Crate | Description |
|---|
openentropy-core | Bibliothèque principale — sources, pool, conditionnement |
openentropy-cli | Binaire CLI avec tableau de bord TUI |
openentropy-server | Serveur HTTP d'entropie Axum |
openentropy-tests | Batterie de tests inspirée de NIST SP 800-22 |
openentropy-python | Liaisons Python via PyO3/maturin |
openentropy-wasm | Crate d'entropie WebAssembly/navigateur |
| Plateforme | Sources | Notes |
|---|
| MacBook (série M) | 63/63 | Suite complète — WiFi, BLE, caméra, micro |
| Mac Mini / Studio / Pro | 50–55 | Pas de caméra intégrée, micro sur certains modèles |
| Mac Intel | ~20 | Certaines sources silicium/microarch sont spécifiques à ARM |
| Linux | 12–15 | Sources de temporisation, réseau, disque, processus + passage NVMe |