
rscrypto v0.9.0
Rust криптография с нулевыми зависимостями по умолчанию: BLAKE3, Ed25519/X25519, хэши, MAC, KDF, AEAD и контрольные суммы с полным ускорением SIMD/ASM
rscrypto
rscrypto объединяет криптографические примитивы, криптографические и быстрые хеши, хеширование паролей и контрольные суммы за одной моделью возможностей (feature model). Целевые SIMD и ассемблерные оптимизации ускоряют переносимые Rust-бэкенды без зависимости от продакшн-кода на C/FFI, OpenSSL или системных библиотек.
rscrypto — это крейт примитивов, а не TLS-стек, PKI-инструментарий, хранилище ключей или реализация протоколов.
Измеренная производительность
Снимок от 2026-08-18 сравнивает коммит 7eb44e9 с самой быстрой сопоставимой внешней реализацией для каждой платформы, примитива, операции и формы входных данных на восьми Linux CI-раннерах. Внешний базовый уровень выбирается для каждого случая отдельно, а не усредняется по конкурентам. Коэффициенты вычисляются как external / rscrypto; чем выше, тем лучше.
По итогам 6 144 сравнений точных случаев rscrypto оказался более чем на 5% быстрее в 3 780 случаях, в пределах 5% — в 1 695 и медленнее — в 669. Среднее геометрическое ускорение составило 1.62x в целом, включая 6.18x для контрольных сумм, 1.65x для RSA, 1.61x для AEAD и 1.55x для ML-KEM.
Результат Apple Silicon на диаграмме — это отдельный локальный снимок от 2026-07-04; он не включён в агрегированные данные по Linux.
Это общее лидерство по набору тестов, а не утверждение, что каждая операция выигрывает. Тот же снимок публикует регрессию ECDSA на s390x и более медленный путь rapidhash-stream/one-write вместе со всеми сырыми строками. Прочитайте обзор бенчмарков для полной таблицы результатов и руководство по бенчмаркингу, прежде чем применять результат к рабочей нагрузке развёртывания.
Гарантии
Заявления о безопасности закрываются по принципу fail-closed: отсутствие или устаревшие доказательства снимает заявление, а не ослабляет порог.
- Доказательства корректности сочетают векторы NIST, RFC, вышестоящих проектов и Wycheproof с отдельными реализациями, свойствами, негативными тестами и Miri.
- Фаззинг-цели проверяют продакшн-реализации на границах примитивов, парсеров, конечных автоматов и трейтов. Минимизированные сиды воспроизводятся как тесты, с отдельной полосой санитайзеров.
- Дифференциальные тесты «переносимая версия против ускоренной» покрывают длины, выравнивания, хвосты, переходы состояний, диспетчеризацию и поведение отката на нативных целевых платформах.
- Харнесс константного времени инвентаризирует точные операции в
ct.tomlи сочетает оптимизированную проверку связанных бинарников, доказательства BINSEC для объявленных ядер фиксированной формы и тайминговые тесты DudeCT для объявленных сквозных случаев. - Владельцы секретов фиксированного размера маскируют
Debug, не реализуют обычное сравнение на равенство и перезаписывают принадлежащие байты при удалении. Сбои верификации непрозрачны; неудачные открытия AEAD очищают выходные буферы вызывающего кода.
Заявление о константном времени существует только тогда, когда соответствующий подписанный релиз включает заверенный пакет доказательств, чьи обязательные пороги по целевой платформе, возможностям, компилятору, профилю и операциям пройдены. Исходный код, который выглядит безусловным, не считается доказательством. Артефакты релизов ограничены подписанными тегами, публикуются через crates.io Trusted Publishing и покрыты аттестациями происхождения сборки GitHub.
Изучите доказательства тестов, модель константного времени, жизненный цикл секретов, модель угроз и контракт релизов.
Оставшийся пробел независимого ревью — это сторонний аудит безопасности. Проект в настоящее время не может его финансировать. Автоматизированные доказательства не заменяют такой аудит, поэтому rscrypto не заявляет, что он прошедший аудит, валидированный по FIPS 140-3, формально верифицированный или константный по времени как крейт в целом.
Сообщайте о предполагаемых уязвимостях через
GitHub Private Vulnerability Reporting
в соответствии с процессом SECURITY.md, а не через публичный issue.
Устанавливайте только то, что используете
Минимальная сборка SHA-2 без std:
[dependencies]
rscrypto = { version = "0.9", default-features = false, features = ["sha2"] }
Полный стек примитивов с включённой системной случайностью:
[dependencies]
rscrypto = { version = "0.9", features = ["full", "getrandom"] }
Возможность по умолчанию — std; default-features = false её отключает. Включайте getrandom только для API, которые получают соли, ключи, nonce или энтропию для генерации RSA-ключей из операционной системы. Руководство по возможностям описывает точные зависимости и средства контроля развёртывания.
Быстрый старт
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");
assert_eq!(hasher.finalize(), one_shot);
Хеш-API поддерживают одноразовое и потоковое использование. Рабочие примеры для AEAD, подписей, RSA, X25519, ML-KEM, хеширования паролей и интроспекции бэкендов находятся в examples/README.md.
Карта примитивов и возможностей
| Семейство | Включено | Включение |
|---|---|---|
| Контрольные суммы | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums или отдельные возможности |
| Криптографические хеши | SHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | crypto-hashes или отдельные возможности |
| Быстрые хеши | XXH3-64/128, RapidHash V3-64 | fast-hashes или отдельные возможности |
| MAC и KDF | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | macs, kdfs или отдельные возможности |
| Хеширование паролей | Argon2d/i/id, scrypt, ограниченные PHC-записи паролей | password-hashing или отдельные возможности |
| Подписи и RSA | ECDSA P-256/P-384, Ed25519, подпись RSA, верификация, шифрование и генерация ключей | signatures или отдельные возможности |
| Обмен ключами и KEM | X25519, ML-KEM-512/768/1024 | key-exchange или отдельные возможности |
| AEAD | AES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead или отдельные возможности |
Используйте docs.rs для точных типов и методов. Используйте руководство по миграции при замене другой библиотеки.
Платформы и диспетчеризация
Переносимая реализация на Rust является авторитетом байт-в-байт. Поддержка целевых платформ на этапе компиляции и, с std, обнаруженные возможности CPU во время выполнения выбирают подходящие SIMD или ассемблерные ядра. Неподдерживаемое ускорение откатывается к переносимому Rust.
Руководство по платформам описывает матрицу целевых платформ, модель диспетчеризации, покрытие no_std и ограничения portable-only.
Проект
Прочитайте CONTRIBUTING.md перед изменением кода. Опубликованные изменения находятся в CHANGELOG.md.
Лицензия
Двойное лицензирование по Apache-2.0 или MIT, на ваш выбор.