Назад к обновлениям
New releaseSep 3, 2026

rscrypto v0.9.0

Криптография на Rust без обязательных зависимостей: хеши, контрольные суммы, MAC, KDF, хеширование паролей, AEAD, подписи, RSA, обмен ключами, ML-KEM и ML-DSA. Портативная реализация на Rust с бэкендами SIMD и ASM.

Поделиться

rscrypto

Crates.io Docs.rs MSRV 1.100.0 License: MIT OR Apache-2.0

rscrypto — это библиотека на Rust с криптографическими примитивами, хешами, хешированием паролей и контрольными суммами. Всеми ими управляет одна модель функций. Переносимая реализация на Rust является эталонной. Бэкенды SIMD и ассемблера ускоряют работу на поддерживаемых целевых платформах. Продакшен-сборки не зависят от C, FFI, OpenSSL или системных библиотек.

rscrypto предоставляет только примитивы. Это не стек TLS, не набор инструментов PKI, не хранилище ключей и не реализация протокола.

Установка

rscrypto требует Rust 1.100. Пока Rust 1.100 не стабилен, используйте бета-версию 1.100 или более новый nightly. Ускоренные сборки для POWER, IBM Z и RISC-V требуют nightly-компилятора; сборки portable-only поддерживают заявленный MSRV. См. Toolchain.

Минимальная сборка no_std только с SHA-2:

[dependencies]
rscrypto = { version = "0.11", default-features = false, features = ["sha2"] }

Все примитивы, со случайностью от операционной системы:

[dependencies]
rscrypto = { version = "0.11", features = ["full", "getrandom"] }

Функция по умолчанию — std. Установите default-features = false, чтобы убрать её. Включайте getrandom только для API, которые получают соли, ключи, nonce или энтропию для генерации ключей RSA от операционной системы. Руководство по функциям объясняет, как выбирать функции. Cargo.toml определяет точный граф функций.

Быстрый старт

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);

Типы хешей поддерживают одноразовое и потоковое использование. В examples/README.md есть запускаемые примеры для AEAD, подписей, RSA, ECDH P-256 и P-384, X25519, ML-KEM, хеширования паролей и интроспекции бэкендов.

Примитивы и функции

СемействоПримитивыФункция
Контрольные суммыCRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMechecksums или листовая функция
Криптографические хешиSHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOFcrypto-hashes или листовая функция
Быстрые хешиXXH3-64/128, RapidHash V3-64fast-hashes или листовая функция
MAC и KDFHMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2macs, kdfs или листовая функция
Хеширование паролейArgon2d/i/id, scrypt, ограниченные записи паролей PHCpassword-hashing или листовая функция
Подписи и RSAECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, SLH-DSA (все 12 наборов FIPS 205, pure и HashSLH-DSA), подпись, проверка, шифрование и генерация ключей RSAsignatures или листовая функция
Обмен ключами и KEMP-256 ECDH, P-384 ECDH, X25519, ML-KEM-512/768/1024key-exchange или листовая функция
AEADAES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128aead или листовая функция

Ключи подписей и KEM импортируют и экспортируют стандартный DER (PKCS #8 и SubjectPublicKeyInfo) для ECDSA, Ed25519, RSA, ML-DSA, ML-KEM и SLH-DSA.

Дайджест accept для WebSocket существует только для совместимости с протоколом. Он требует функции websocket-sha1. Ни одна зонтичная функция, включая full, его не включает.

Точные типы и методы см. на docs.rs. Заметки о совместимости API объясняют типы вывода, начальные значения коллекций и сохранённые имена методов. Руководство по криптографической устойчивости объясняет предположения о безопасности, границы миграции и доказательства, которые следует изучить при выборе более стойкой криптографии.

Платформы и диспетчеризация

Переносимая реализация на Rust определяет правильный вывод, байт в байт. Каждый ускоренный бэкенд должен давать тот же вывод. Во время компиляции целевая платформа определяет, какие бэкенды доступны. С std rscrypto также определяет возможности CPU во время выполнения и выбирает бэкенд. Если ускоренный бэкенд недоступен, выполняется переносимая реализация.

Руководство по платформам перечисляет поддерживаемые целевые платформы. Оно также объясняет диспетчеризацию, поддержку no_std и ограничения portable-only.

Гарантии

Утверждение о безопасности существует только пока его доказательства проходят проверку. Отсутствующие или устаревшие доказательства снимают утверждение; они никогда не ослабляют критерий.

  • Корректность: векторы NIST, RFC, upstream и Wycheproof, независимые реализации, property-тесты, негативные тесты и Miri.
  • Фаззинг: фаззинг-цели запускают продакшен-код на примитивах, парсерах, конечных автоматах и границах трейтов. Минимизированные входные данные воспроизводятся как тесты. Отдельная линия запускает их с санитайзерами.
  • Бэкенды: дифференциальные тесты сравнивают каждый ускоренный бэкенд с переносимым Rust. Они покрывают длины, выравнивания, хвосты, переходы состояний, диспетчеризацию и откат на нативных целевых платформах.
  • Постоянное время: ct.toml перечисляет точные операции под тестированием. Доказательства объединяют инспекцию оптимизированных слинкованных бинарников, доказательства BINSEC для ядер фиксированной формы и тайминговые тесты DudeCT для сквозных операций.
  • Секреты: типы, владеющие секретами, скрывают их содержимое в выводе Debug и очищают своё инициализированное хранилище при удалении. Правила копирования зависят от типа; например, состояние BLAKE2 и BLAKE3 с ключом поддерживает Clone. Инвентаризация владения секретами перечисляет каждый тип.
  • Сбои: сбои проверки не сообщают, почему они произошли. Неудачное открытие AEAD очищает неаутентифицированный открытый текст.

Утверждение о постоянном времени применимо только к целевой платформе, функциям, компилятору, профилю и операции, которые покрывают его доказательства. Исходный код, который выглядит безветочным, не является доказательством.

Подробности см. в доказательствах тестирования, модели постоянного времени, жизненном цикле секретов и модели угроз.

rscrypto не проходил сторонний аудит безопасности. Проект не может оплатить его сейчас, и автоматизированные доказательства его не заменяют. rscrypto не заявляет, что прошёл аудит, валидацию FIPS 140-3, формальную верификацию или является константным по времени как целый крейт.

Категории