std.crypto
Das std.crypto-Paket stellt symmetrische Verschlüsselung, kryptografische Hashfunktionen, MACs, digitale Signaturen und sichere Zufallszahlen bereit. Alle Implementierungen sind reine Lyx-Software (kein AES-NI, kein OpenSSL) und damit auf eingebetteten Systemen, Bare-Metal-Targets und portablen Umgebungen ohne externe Abhängigkeiten nutzbar.
Einsatzbereiche: Datenverschlüsselung (Dateien, Netzwerkpakete), Passwort-Authentifizierung (MySQL-Protokoll), Checksummen, digitale Signaturen (ECDSA), sichere Schlüsselgenerierung.
→ Standard Library · Kryptographie-Guide (Vergleich & Empfehlungen) · std.net.tls · std.hash
Units im Überblick
Alle Units dieses Pakets im Überblick:
| Unit | Import | Beschreibung |
|---|---|---|
| std.crypto.aes | import std.crypto.aes; | AES-128/256-CBC mit PKCS#7-Padding; IV-basierte Blockverschlüsselung |
| std.crypto.sha256 | import std.crypto.sha256; | SHA-256 (32-Byte-Digest); FIPS 180-4; digitale Signaturen, Datenintegrität |
| std.crypto.ecc | import std.crypto.ecc; | secp256k1 ECDSA — Schlüsselerzeugung, Signieren, Verifizieren |
| std.crypto.rand | import std.crypto.rand; | Kryptografisch sichere Zufallszahlen via getrandom(2) |
| std.crypto.hmac | import std.crypto.hmac; | HMAC-SHA256 (RFC 2104): Integrität + Authentizität; HMAC_SHA256, HMAC_SHA256_Hex |
| std.crypto.md5 | import std.crypto.md5; | MD5-Hash (128 Bit); für Legacy-Checksummen und HTTP Digest Auth |
| std.crypto.sha1 | import std.crypto.sha1; | SHA-1-Hash (160 Bit); MySQL mysql_native_password, Git, Legacy |
| std.crypto.x25519 | import std.crypto.x25519; | X25519 Diffie-Hellman (Curve25519, RFC 7748): Schlüsselaustausch, constant-time Montgomery-Leiter |
| std.crypto.keccak | import std.crypto.keccak; | Keccak-f[1600] / SHA-3/256 / SHA-3/512 / SHAKE-128 / SHAKE-256 (FIPS 202) |
| std.crypto.ct | import std.crypto.ct; | Constant-Time Utilities: CTSelect, CTMemEqual, SecureZero, Barrett/Montgomery-Reduktion |
| std.crypto.ntt | import std.crypto.ntt; | NTT / Polynomring-Arithmetik für ML-KEM (q=3329) und ML-DSA (q=8380417) — intern |
| std.crypto.pqc | import std.crypto.pqc.pqc; | Post-Quantum-Kryptografie: ML-KEM (FIPS 203), ML-DSA (FIPS 204), SLH-DSA (FIPS 205), Hybrid-KEM, DADQ |
| std.crypto.pqc.dadq | import std.crypto.pqc.dadq; | DADQ-SYM: symmetrisches Authenticated Cipher, Latin-Square Z₂₅₆, 128-Bit Quantensicherheit (experimentell) |
Wann welche Unit?
Kurzübersicht für die Unit-Auswahl:
| Aufgabe | Unit |
|---|---|
| Daten symmetrisch verschlüsseln/entschlüsseln | std.crypto.aes |
| AES-128 (kleinerer Schlüssel, schneller) | std.crypto.aes → AES128CBCEncrypt |
| AES-256 (höhere Sicherheit) | std.crypto.aes → AES256CBCEncrypt |
| SHA-256-Hash (Datenintegrität, Signaturen) | std.crypto.sha256 → SHA256 / SHA256Hex |
| Digitale Signatur erzeugen (ECDSA) | std.crypto.ecc → ECDSASign |
| Digitale Signatur prüfen | std.crypto.ecc → ECDSAVerify |
| Kryptografisch sichere Zufallszahl | std.crypto.rand → RandBytesExact / RandInt64 |
| Zufälligen AES-Schlüssel / IV erzeugen | std.crypto.rand → RandBytesExact |
| Nachricht authentifizieren (MAC) | std.crypto.hmac → HMAC_SHA256 |
| AES-CBC + Integritätsschutz (Encrypt-then-MAC) | std.crypto.aes + std.crypto.hmac |
MySQL-Authentifizierung (mysql_native_password) | std.crypto.sha1 → SHA1MySQLNativePassword |
| Legacy-Checksum (Git, ältere Protokolle) | std.crypto.sha1 → SHA1 |
| HTTP Digest Authentication, alte API-Signaturen | std.crypto.md5 → MD5 |
| Allgemeine Checksummen (CRC32, FNV) | std.hash |
| TLS/HTTPS (vollständiger Handshake) | std.net.tls |
| Symmetrische authentifizierte Verschlüsselung (Latin-Square, 128-Bit QS) | std.crypto.pqc.dadq → dadqFOEnc / dadqFODec (FO-Modus empfohlen) |
| Post-Quantum-Schlüsselaustausch (KEM) | std.crypto.pqc → PQCKeyGen(PQC_ALG_MLKEM_768) |
| Post-Quantum-Signatur | std.crypto.pqc → PQCKeyGen(PQC_ALG_MLDSA_65) |
Hinweise
Wichtige allgemeine Hinweise zum Krypto-Paket:
- MD5 und SHA-1 sind für neue kryptografische Zwecke nicht geeignet — beide haben bekannte Kollisionsangriffe. Für Integrität → SHA-256; für Signaturen → ECDSA.
- AES-CBC ist nicht authentifiziert — schützt gegen passive Abhörung, nicht gegen Manipulation. Für Integrität zusätzlichen MAC einsetzen.
- Der IV muss für jede AES-Verschlüsselung zufällig und einmalig sein —
std.crypto.rand→RandBytesExactverwenden. - ECDSA-Nonces dürfen nie wiederverwendet werden —
std.crypto.eccgeneriert den Nonce intern kryptografisch zufällig. - Alle Units sind reine Software-Implementierungen ohne AES-NI / SHA-NI Hardware-Beschleunigung.
Letzte Aktualisierung: 2026-06-07
