====== Signatures Namespace ====== **Namespace:** ''WvdS.System.Security.Cryptography.Signatures'' Enthält Extension Methods für digitale Signaturen mit PQ-Unterstützung. ---- ===== Klassen ===== ^ Klasse ^ Beschreibung ^ | SignatureExtensions | Extensions für RSA, ECDsa und X509Certificate2 Signaturen | | SignedDataExtensions | Extensions für CMS/PKCS#7 SignedCms | | HybridSignatureInfo | Container für hybride Signaturdaten | | PqSignedCmsHelper | High-Level API für PQ-fähige CMS-Operationen | ---- ===== Erweiterte Typen ===== ^ .NET-Typ ^ Extension-Klasse ^ | ''System.Security.Cryptography.RSA''((Microsoft Docs: https://learn.microsoft.com/dotnet/api/system.security.cryptography.rsa)) | SignatureExtensions | | ''System.Security.Cryptography.ECDsa''((Microsoft Docs: https://learn.microsoft.com/dotnet/api/system.security.cryptography.ecdsa)) | SignatureExtensions | | ''System.Security.Cryptography.Pkcs.SignedCms''((Microsoft Docs: https://learn.microsoft.com/dotnet/api/system.security.cryptography.pkcs.signedcms)) | SignedDataExtensions | ---- ===== Signaturmodi ===== | Modus | Klassisch | ML-DSA | Verwendung | | Classic | ✓ | - | Standard .NET Verhalten | | Hybrid | ✓ | ✓ | Maximale Sicherheit | | PostQuantum | - | ✓ | Rein post-quantum | ---- ===== Hybrides Signaturformat ===== Im Hybrid-Modus werden zwei Signaturen erzeugt: ┌─────────────────────────────────────────┐ │ Hybrid-Signatur │ ├─────────────────────────────────────────┤ │ [4 Bytes] Länge klassische Signatur │ │ [n Bytes] Klassische Signatur (RSA/ECDSA)│ │ [m Bytes] PQ-Signatur (ML-DSA) │ └─────────────────────────────────────────┘ ^ Komponente ^ Typische Größe ^ | RSA-2048 Signatur | 256 Bytes | | ECDSA P-256 Signatur | ~70 Bytes | | ML-DSA-65 Signatur | 3.293 Bytes | | **Hybrid RSA** | **~3.553 Bytes** | ---- ===== Beispiel ===== using WvdS.System.Security.Cryptography; using WvdS.System.Security.Cryptography.Signatures; CryptoConfig.DefaultMode = CryptoMode.Hybrid; using var rsa = RSA.Create(2048); byte[] data = Encoding.UTF8.GetBytes("Zu signierende Daten"); // Hybride Signatur erstellen byte[] signature = rsa.SignData( data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); // Verifizieren bool valid = rsa.VerifyData( data, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); ---- ===== SignatureExtensions Methoden ===== ==== RSA Extensions ==== ^ Methode ^ Parameter ^ Rückgabe ^ | ''SignData(data, hash, padding, mode)'' | byte[], HashAlgorithmName, RSASignaturePadding, CryptoMode? | byte[] | | ''SignData(stream, hash, padding, mode)'' | Stream, HashAlgorithmName, RSASignaturePadding, CryptoMode? | byte[] | | ''VerifyData(data, sig, hash, padding, mode)'' | byte[], byte[], HashAlgorithmName, RSASignaturePadding, CryptoMode? | bool | ==== ECDsa Extensions ==== ^ Methode ^ Parameter ^ Rückgabe ^ | ''SignData(data, hash, mode)'' | byte[], HashAlgorithmName, CryptoMode? | byte[] | | ''VerifyData(data, sig, hash, mode)'' | byte[], byte[], HashAlgorithmName, CryptoMode? | bool | ==== Standalone ML-DSA ==== ^ Methode ^ Parameter ^ Rückgabe ^ | ''GenerateMlDsaKeyPair()'' | - | (byte[] PublicKey, byte[] PrivateKey) | | ''SignMlDsa(data, privateKey)'' | byte[], byte[] | byte[] | | ''VerifyMlDsa(data, sig, publicKey)'' | byte[], byte[], byte[] | bool | ---- ===== Siehe auch ===== * [[.:x509certificates:start|X509Certificates Namespace]] * [[.:keyexchange|KeyExchange Namespace]] * [[.:start|API-Übersicht]] {{tag>namespace signaturen ml-dsa}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//