====== 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//