
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.
rscrypto
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
| Familie | Primitive | Feature |
|---|---|---|
| Prüfsummen | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums oder ein Leaf-Feature |
| Kryptografische Hashes | SHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | crypto-hashes oder ein Leaf-Feature |
| Schnelle Hashes | XXH3-64/128, RapidHash V3-64 | fast-hashes oder ein Leaf-Feature |
| MACs und KDFs | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | macs, kdfs oder ein Leaf-Feature |
| Passwort-Hashing | Argon2d/i/id, scrypt, begrenzte PHC-Passwortdatensätze | password-hashing oder ein Leaf-Feature |
| Signaturen und RSA | ECDSA 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üsselerzeugung | signatures oder ein Leaf-Feature |
| Schlüsselaustausch und KEMs | P-256 ECDH, P-384 ECDH, X25519, ML-KEM-512/768/1024 | key-exchange oder ein Leaf-Feature |
| AEADs | AES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead 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.tomllistet 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 BLAKE3Clone. 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.