.NET kapselt die Kryptografie der Plattform – CNG unter Windows, OpenSSL unter Linux, Apples Bibliotheken unter macOS – hinter einer einzigen API: ECDsa, RSA, MLDsa, MLKem und Co. Die Prüfung lief mit .NET 10.0.13 unter Ubuntu 24.04, wo das darunterliegende OpenSSL die Version 3.0.13 hat, und diese Version prägt mehrere Ergebnisse.
Die Standardkodierung von Signaturen ist genau umgekehrt wie bei den meisten serverseitigen Bibliotheken. ECDsa.SignData liefert das 64 Byte lange r‖s nach IEEE P1363, und VerifyData erwartet es; für DER braucht es bei beiden Aufrufen DSASignatureFormat.Rfc3279DerSequence. Damit passt .NET ohne weiteres Zutun zu JWS und WebCrypto, aber weder zu OpenSSL noch zu SHA256withECDSA in Java oder SignASN1 in Go. Bei jeder fehlerhaften oder unpassenden Signatur gibt VerifyData false zurück, sodass eine DER-Signatur, die mit dem Standardformat geprüft wird, genau wie eine Fälschung aussieht – das Beispiel zeigt beide Ergebnisse, und der Konverter DER ⇄ Raw zeigt, welche Form du hast.
Unter Linux deckte ECDSA P-256 bis P-521, secp256k1 und die Brainpool-r1-Kurven ab, alle über OpenSSL. SignHash signiert einen Digest, den du selbst berechnet hast, die Nonces sind zufällig, s wird nicht normalisiert, und die Prüfung akzeptiert High-S. In der Basisklassenbibliothek gibt es keine Klasse für Ed25519 oder Ed448; für EdDSA brauchst du Bouncy Castle für .NET oder ein anderes Paket.
MLKem, MLDsa, SlhDsa und CompositeMLDsa gibt es in .NET 10, aber jede dieser Klassen meldet IsSupported je nach Plattform. Mit OpenSSL 3.0.13 war der Wert bei allen false; OpenSSL hat ML-KEM und ML-DSA in 3.5 hinzugefügt, unter Linux brauchen die Klassen also eine Distribution, die diese Version mitliefert, und unter Windows die entsprechende CNG-Unterstützung. Code muss IsSupported prüfen, statt die Unterstützung vorauszusetzen, und diese Seite hat keine Plattform geprüft, auf der die Antwort true lautet.
Schlüssel lassen sich aus SPKI und PKCS#8 (PEM oder DER, verschlüsselt oder nicht), aus SEC1 EC PRIVATE KEY und aus rohen Koordinaten in ECParameters importieren; einen Import von SEC1-Punkten oder JWK gibt es nicht. Untersuche PFX-Bundles mit dem PFX-Inspektor.