
Сбор энтропии из нетрадиционных аппаратных источников с открытым исходным кодом. Rust + Python SDK.
Единый рабочий процесс для исследования энтропии, валидации и криптографического развертывания.
От Amenti Labs
# Установка
cargo install openentropy-cli
# Обнаружение источников энтропии на вашем устройстве
openentropy scan
# Бенчмаркинг всех быстрых источников
openentropy bench
# Вывод 64 случайных байт в шестнадцатеричном формате
openentropy stream --format hex --bytes 64
# Интерактивная TUI-панель
openentropy monitor
По умолчанию используются только быстрые источники (<2 с). Укажите
--all, чтобы включить более медленные источники (DNS, TCP, GPU, BLE). Для совместимости также принимается позиционный псевдонимall.
Большинство источников OpenEntropy поступают с самого хоста. OpenEntropy также поддерживает внешние аппаратные устройства, когда они подключены и обнаружимы:
qcicada. OpenEntropy может читать квантовый вывод устройства, проводить бенчмаркинг, анализ, запись или сравнение наряду с собственными источниками. Режимы вывода самого устройства сопоставляются с raw, sha256 и samples; теперь OpenEntropy использует вспомогательную функцию свежего старта в непрерывном режиме из qcicada 0.2.2, поэтому она отбрасывает уже буферизированные байты устройства один раз после входа в непрерывный режим вместо того, чтобы обслуживать первое чтение из устаревшей очереди байтов. См. руководство 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, анализ min-энтропии и SHA-256-обработку одним флагом.
Исследователи изучают характеристики сырого шума аппаратных подсистем. Укажите --conditioning raw, чтобы получить неотбеленные, необработанные байты, сохраняющие реальный шумовой сигнал от каждого источника. Профиль deep включает 100K выборок, кросс-корреляцию и анализ испытаний в стиле PEAR.
Сырой режим позволяет:
Большинство генераторов случайных чисел являются псевдослучайными — детерминированными алгоритмами, инициализированными один раз. OpenEntropy непрерывно собирает реальный физический шум с вашего оборудования:
Пул XOR-комбинирует независимые потоки. Отказ одного источника не может скомпрометировать пул.
Обработка опциональна и настраиваема. Используйте --conditioning в CLI или ?conditioning= в HTTP API:
| Режим | Флаг | Описание |
|---|---|---|
| SHA-256 (по умолчанию) | --conditioning sha256 | SHA-256 обработка. Криптографически качественный вывод. |
| Von Neumann | --conditioning vonneumann | Только устранение смещения — убирает смещение, сохраняя больше структуры исходного сигнала. |
| Сырой | --conditioning raw | Без обработки. Исходные байты с нулевым отбеливанием — сохраняет реальный аппаратный шумовой сигнал для исследований. |
Сырой режим делает OpenEntropy полезным для исследований. Большинство HWRNG API выполняют пост-обработку DRBG, которая делает все источники похожими на равномерные случайные байты, уничтожая информацию, необходимую исследователям. Сырой вывод сохраняет структуру шума для каждого источника: смещение, автокорреляцию, спектральные особенности и кросс-источниковые корреляции. Подробнее см. Обработка.
| Документ | Описание |
|---|---|
| Source Catalog | Каталог источников с физическими объяснениями и платформенными заметками |
| CLI Reference | Полная справка по командам и примеры |
| Conditioning | Режимы обработки: сырой, VonNeumann, SHA-256 |
| Trial Analysis Methodology | Испытания в стиле PEAR по 200 бит, калибровочный гейт и ссылки |
| Telemetry Model | Экспериментальная контекстная модель telemetry_v1 и точки интеграции |
| Rust API Reference | Основной API-интерфейс Rust |
| Architecture | Структура крейтов и дизайнерские решения |
| Python SDK | Привязки PyO3 и справочник Python API |
| Examples | Примеры кода на Rust и Python |
| Troubleshooting | Частые проблемы и их решения |
| Security | Модель угроз и ответственное раскрытие |
Расширенная дорожная карта статистического анализа и инвентарь методов были сформированы под влиянием:
Мы ценим открытый исходный код, который помог сформировать эту поверхность сравнительного анализа QRNG/PRNG.
Текущий реестр источников охватывает 13 категорий на основе механизмов; фактическая доступность зависит от платформы:
| Категория | Количество |
|---|---|
| Thermal | 4 |
| Timing | 7 |
| Scheduling | 6 |
| IO | 6 |
| IPC | 4 |
| Microarchitecture | 16 |
| GPU | 3 |
| Network | 3 |
| System | 6 |
| Signal | 3 |
| Sensor | 4 |
| Quantum | 1 |
Полные описания каждого источника, доступность на платформах и физические заметки см. в Каталог источников.
Поддерживаемое внешнее оборудование:
qcicada — Crypta Labs QCicada USB QRNG (руководство)Полную справку по командам и примеры см. в CLI Reference.
Наиболее часто используемые рабочие процессы:
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
В команде sessions предустановки профиля применяются только при указании конкретного пути сессии. openentropy sessions без пути всегда остаётся в режиме списка.
Методология испытаний в стиле PEAR (200-битные испытания, терминальный Z, взвешенная композиция Стоуффера, калибровочный гейт) описана в Методология анализа испытаний.
[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);
Cargo workspace с 6 крейтами:
| Крейт | Описание |
|---|---|
openentropy-core | Базовая библиотека — источники, пул, обработка |
openentropy-cli | CLI-бинарник с TUI-панелью |
openentropy-server | HTTP-сервер энтропии на Axum |
openentropy-tests | Тестовая батарея, вдохновлённая NIST SP 800-22 |
openentropy-python | Привязки Python через PyO3/maturin |
openentropy-wasm | Крейт энтропии для WebAssembly/браузера |
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]| Платформа | Источники | Примечания |
|---|---|---|
| MacBook (M-series) | 63/63 | Полный набор — WiFi, BLE, камера, микрофон |
| Mac Mini / Studio / Pro | 50–55 | Нет встроенной камеры, микрофона на некоторых моделях |
| Intel Mac | ~20 | Некоторые источники из кремния/микроархитектуры специфичны для ARM |
| Linux | 12–15 | Источники тайминга, сети, диска, процессов + NVMe passthrough |
Библиотека обнаруживает доступное оборудование во время выполнения и активирует только рабочие источники.
Требуется 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