Zurück zu den Updates
New releaseSep 3, 2026

rscrypto v0.9.0

Rust-Kryptografie ohne erforderliche Abhängigkeiten: Hashes, Prüfsummen, MACs, KDFs, Passwort-Hashing, AEADs, Signaturen, RSA, Schlüsselaustausch, ML-KEM und ML-DSA. Portable Rust-Referenz mit SIMD- & ASM-Backends.

Teilen

rscrypto

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

rscrypto ist eine Rust-Bibliothek mit kryptografischen Primitiven, Hashes, Passwort-Hashing und Prüfsummen. Ein einziges Feature-Modell steuert sie alle. Portables Rust ist die Referenzimplementierung. SIMD- und Assembly-Backends machen sie auf unterstützten Zielen schneller. Produktions-Builds hängen nicht von C, FFI, OpenSSL oder Systembibliotheken ab.

rscrypto liefert nur Primitive. Es ist kein TLS-Stack, kein PKI-Toolkit, kein Schlüsselspeicher und keine Protokollimplementierung.

Installation

rscrypto benötigt Rust 1.100. Bis Rust 1.100 stabil ist, verwende die 1.100-Beta oder ein neueres Nightly. Beschleunigte POWER-, IBM Z- und RISC-V-Builds benötigen einen Nightly-Compiler; portable-only-Builds unterstützen die angegebene MSRV. Siehe Toolchain.

Minimaler no_std-Build nur mit SHA-2:

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

Alle Primitive, mit Betriebssystem-Zufälligkeit:

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

Das Standard-Feature ist std. Setze default-features = false, um es zu entfernen. Aktiviere getrandom nur für die APIs, die Salts, Schlüssel, Nonces oder RSA-Schlüsselerzeugungs-Entropie vom Betriebssystem beziehen. Der Feature-Leitfaden erklärt, wie Features ausgewählt werden. Cargo.toml definiert den genauen Feature-Graphen.

Schnellstart

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

Hash-Typen unterstützen einmalige und streamende Verwendung. examples/README.md enthält ausführbare Beispiele für AEAD, Signaturen, RSA, P-256- und P-384-ECDH, X25519, ML-KEM, Passwort-Hashing und Backend-Introspektion.

Primitive und Features

FamiliePrimitiveFeature
PrüfsummenCRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMechecksums oder ein Leaf-Feature
Kryptografische HashesSHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOFcrypto-hashes oder ein Leaf-Feature
Schnelle HashesXXH3-64/128, RapidHash V3-64fast-hashes oder ein Leaf-Feature
MACs und KDFsHMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2macs, kdfs oder ein Leaf-Feature
Passwort-HashingArgon2d/i/id, scrypt, begrenzte PHC-Passwortdatensätzepassword-hashing oder ein Leaf-Feature
Signaturen und RSAECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, SLH-DSA (alle 12 FIPS-205-Sets, pure und HashSLH-DSA), RSA-Signierung, -Verifikation, -Verschlüsselung und -Schlüsselerzeugungsignatures oder ein Leaf-Feature
Schlüsselaustausch und KEMsP-256 ECDH, P-384 ECDH, X25519, ML-KEM-512/768/1024key-exchange oder ein Leaf-Feature
AEADsAES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128aead oder ein Leaf-Feature

Signatur- und KEM-Schlüssel importieren und exportieren standardmäßiges DER (PKCS #8 und SubjectPublicKeyInfo) für ECDSA, Ed25519, RSA, ML-DSA, ML-KEM und SLH-DSA.

Der WebSocket-Accept-Digest existiert nur zur Protokollkompatibilität. Er benötigt das Feature websocket-sha1. Kein Umbrella-Feature, einschließlich full, aktiviert es.

Siehe docs.rs für genaue Typen und Methoden. Die API-Kompatibilitätshinweise erklären Ausgabetypen, Collection-Seeds und beibehaltene Methodennamen. Der Leitfaden zur kryptografischen Resilienz erklärt Sicherheitsannahmen, Migrationsgrenzen und die zu prüfende Evidenz bei der Wahl stärkerer Kryptografie.

Plattformen und Dispatch

Die portable Rust-Implementierung definiert die korrekte Ausgabe, Byte für Byte. Jedes beschleunigte Backend muss dieselbe Ausgabe liefern. Zur Kompilierzeit legt das Ziel fest, welche Backends verfügbar sind. Mit std erkennt rscrypto außerdem CPU-Features zur Laufzeit und wählt ein Backend. Wenn kein beschleunigtes Backend verfügbar ist, läuft die portable Implementierung.

Der Plattform-Leitfaden listet die unterstützten Ziele auf. Er erklärt außerdem Dispatch, no_std-Unterstützung und die Grenzen von portable-only.

Assurance

Eine Sicherheitsaussage existiert nur, solange ihre Evidenz besteht. Fehlende oder veraltete Evidenz entfernt die Aussage; sie schwächt niemals ein Gate ab.

  • Korrektheit: NIST-, RFC-, Upstream- und Wycheproof-Vektoren, unabhängige Implementierungen, Property-Tests, Negativtests und Miri.
  • Fuzzing: Fuzz-Ziele führen den Produktionscode über Primitive, Parser, Zustandsmaschinen und Trait-Grenzen aus. Minimierte Eingaben werden als Tests wiedergegeben. Eine separate Lane führt sie mit Sanitizern aus.
  • Backends: Differenztests vergleichen jedes beschleunigte Backend mit portablem Rust. Sie decken Längen, Ausrichtungen, Tails, Zustandsübergänge, Dispatch und Fallback auf nativen Zielen ab.
  • Konstante Zeit: ct.toml listet die genauen getesteten Operationen auf. Die Evidenz kombiniert die Inspektion optimierter gelinkter Binärdateien, BINSEC-Beweise für Kernel mit fester Form und DudeCT-Timing-Tests für End-to-End-Operationen.
  • Geheimnisse: Typen, die Geheimnisse besitzen, verbergen ihre Inhalte in der Debug-Ausgabe und löschen ihren initialisierten Speicher beim Drop. Kopierregeln variieren je nach Typ; beispielsweise unterstützt der Zustand von keyed BLAKE2 und BLAKE3 Clone. Das Inventar der Geheimnis-Eigentümerschaft listet jeden Typ auf.
  • Fehler: Verifikationsfehler sagen nicht, warum sie fehlgeschlagen sind. Ein fehlgeschlagenes AEAD-Open löscht den unauthentifizierten Klartext.

Eine Konstantzeit-Aussage gilt nur für das Ziel, die Features, den Compiler, das Profil und die Operation, die ihre Evidenz abdeckt. Quellcode, der branchless aussieht, ist kein Beweis.

Für Details siehe die Test-Evidenz, das Konstantzeit-Modell, den Geheimnis-Lebenszyklus und das Bedrohungsmodell.

rscrypto hatte kein Sicherheitsaudit durch Dritte. Das Projekt kann derzeit keines bezahlen, und automatisierte Evidenz ersetzt es nicht. rscrypto beansprucht nicht, auditiert, FIPS 140-3-validiert, formal verifiziert oder als gesamte Crate konstantzeitig zu sein.

Melde eine vermutete Schwachstelle über GitHub Private Vulnerability Reporting. Befolge den Prozess in SECURITY.md. Eröffne kein öffentliches Issue.

Kategorien