====== 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. → [[lyx_-_programmiersprache:units|Standard Library]] · [[lyx_-_programmiersprache:guides:kryptographie|Kryptographie-Guide (Vergleich & Empfehlungen)]] · [[lyx_-_programmiersprache:units:net:tls|std.net.tls]] · [[lyx_-_programmiersprache:units:hash|std.hash]] ---- ===== Units im Überblick ===== Alle Units dieses Pakets im Überblick: ^ Unit ^ Import ^ Beschreibung ^ | [[lyx_-_programmiersprache:units:crypto:aes|std.crypto.aes]] | ''import std.crypto.aes;'' | AES-128/256-CBC mit PKCS#7-Padding; IV-basierte Blockverschlüsselung | | [[lyx_-_programmiersprache:units:crypto:sha256|std.crypto.sha256]] | ''import std.crypto.sha256;'' | SHA-256 (32-Byte-Digest); FIPS 180-4; digitale Signaturen, Datenintegrität | | [[lyx_-_programmiersprache:units:crypto:ecc|std.crypto.ecc]] | ''import std.crypto.ecc;'' | secp256k1 ECDSA — Schlüsselerzeugung, Signieren, Verifizieren | | [[lyx_-_programmiersprache:units:crypto:rand|std.crypto.rand]] | ''import std.crypto.rand;'' | Kryptografisch sichere Zufallszahlen via ''getrandom(2)'' | | [[lyx_-_programmiersprache:units:crypto:hmac|std.crypto.hmac]] | ''import std.crypto.hmac;'' | HMAC-SHA256 (RFC 2104): Integrität + Authentizität; ''HMAC_SHA256'', ''HMAC_SHA256_Hex'' | | [[lyx_-_programmiersprache:units:crypto:md5|std.crypto.md5]] | ''import std.crypto.md5;'' | MD5-Hash (128 Bit); für Legacy-Checksummen und HTTP Digest Auth | | [[lyx_-_programmiersprache:units:crypto:sha1|std.crypto.sha1]] | ''import std.crypto.sha1;'' | SHA-1-Hash (160 Bit); MySQL ''mysql_native_password'', Git, Legacy | | [[lyx_-_programmiersprache:units:crypto:x25519|std.crypto.x25519]] | ''import std.crypto.x25519;'' | X25519 Diffie-Hellman (Curve25519, RFC 7748): Schlüsselaustausch, constant-time Montgomery-Leiter | | [[lyx_-_programmiersprache:units:crypto:keccak|std.crypto.keccak]] | ''import std.crypto.keccak;'' | Keccak-f[1600] / SHA-3/256 / SHA-3/512 / SHAKE-128 / SHAKE-256 (FIPS 202) | | [[lyx_-_programmiersprache:units:crypto:ct|std.crypto.ct]] | ''import std.crypto.ct;'' | Constant-Time Utilities: CTSelect, CTMemEqual, SecureZero, Barrett/Montgomery-Reduktion | | [[lyx_-_programmiersprache:units:crypto:ntt|std.crypto.ntt]] | ''import std.crypto.ntt;'' | NTT / Polynomring-Arithmetik für ML-KEM (q=3329) und ML-DSA (q=8380417) — intern | | [[lyx_-_programmiersprache:units:crypto:pqc|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 | | [[lyx_-_programmiersprache:units:crypto:pqc: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) | [[lyx_-_programmiersprache:units:hash|std.hash]] | | TLS/HTTPS (vollständiger Handshake) | [[lyx_-_programmiersprache:units:net:tls|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) | [[lyx_-_programmiersprache:units:crypto:pqc|std.crypto.pqc]] → ''PQCKeyGen(PQC_ALG_MLKEM_768)'' | | Post-Quantum-Signatur | [[lyx_-_programmiersprache:units:crypto:pqc|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'' → ''RandBytesExact'' verwenden. * **ECDSA-Nonces dürfen nie wiederverwendet werden** — ''std.crypto.ecc'' generiert den Nonce intern kryptografisch zufällig. * Alle Units sind **reine Software-Implementierungen** ohne AES-NI / SHA-NI Hardware-Beschleunigung. Letzte Aktualisierung: 2026-06-07