Color scheme: Riviera
You are here: start » de » Dokumentation » Post-Quanten-Kryptografie » WKL.System.Security.Cryptography – Überblick » Anleitungen » So stellen Sie reine ML-DSA-Zertifikate aus

So stellen Sie reine ML-DSA-Zertifikate aus

Sie brauchen eine Zertifizierungsstelle und Zertifikate, die ausschließlich ML-DSA verwenden, etwa für eine geschlossene Umgebung, in der alle Beteiligten ML-DSA prüfen.

Lösungsübersicht

ElementZweck
PostQuantumConfig.Exemptionserlaubt mit PurePostQuantum die Betriebsart PostQuantum
MLDsaKey.Generateerzeugt ein ML-DSA-Schlüsselpaar mit dem Parametersatz ML-DSA-65 oder ML-DSA-87; ML-DSA-44 nur mit ReducedParameterSets
MLDsaX509SignatureGenerator.CreateCertificateRequesterzeugt eine CertificateRequest für einen ML-DSA-Schlüssel
CreateSelfSigned, Create mit CryptoMode.PostQuantumstellen das Zertifikat nach RFC 9881 aus
X509Chain.Build mit CryptoMode.PostQuantumprüft die Kette
AttachPrivateMLDsaKeyordnet einem ausgestellten Zertifikat seinen privaten Schlüssel zu
X509CertificateBuilderderselbe Weg für .NET Framework 4.6.2, das CertificateRequest nicht kennt

Umsetzung

BSI TR-02102-1 empfiehlt PQ-Signaturen nur in Kombination mit einer klassischen Signatur. Die Betriebsart PostQuantum braucht deshalb eine Freischaltung, die Sie einmal beim Start der Anwendung setzen:

PostQuantumConfig.Exemptions |= PostQuantumExemptions.PurePostQuantum;

Stammzertifikat:

var now = DateTimeOffset.UtcNow;
using var rootKey = MLDsaKey.Generate(MLDsaParameterSet.MLDsa65);
var rootRequest = new MLDsaX509SignatureGenerator(rootKey)
    .CreateCertificateRequest("CN=Muster GmbH PQ Root CA");
rootRequest.CertificateExtensions.Add(new X509BasicConstraintsExtension(true, false, 0, true));
rootRequest.CertificateExtensions.Add(
    new X509KeyUsageExtension(X509KeyUsageFlags.KeyCertSign | X509KeyUsageFlags.CrlSign, true));
 
using var root = rootRequest.CreateSelfSigned(now, now.AddYears(10), CryptoMode.PostQuantum);

Zertifikat eines Unterzeichners, ausgestellt vom Stammzertifikat, mit Prüfung der Kette:

using var signerKey = MLDsaKey.Generate(MLDsaParameterSet.MLDsa65);
var signerRequest = new MLDsaX509SignatureGenerator(signerKey)
    .CreateCertificateRequest("CN=signer.example.com");
signerRequest.CertificateExtensions.Add(
    new X509KeyUsageExtension(X509KeyUsageFlags.DigitalSignature, true));
 
using var signer = signerRequest.Create(
    root, now, now.AddYears(1), RandomNumberGenerator.GetBytes(16), CryptoMode.PostQuantum);
signer.AttachPrivateMLDsaKey(signerKey);
 
using var chain = new X509Chain();
chain.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust;
chain.ChainPolicy.CustomTrustStore.Add(root);
chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
Console.WriteLine(chain.Build(signer, CryptoMode.PostQuantum));

Für .NET Framework 4.6.2 stellen Sie das Zertifikat mit X509CertificateBuilder aus:

var builder = new X509CertificateBuilder(
    new X500DistinguishedName("CN=signer.example.com"), signerKey);
using var selfSigned = builder.CreateSelfSigned(now, now.AddYears(1), CryptoMode.PostQuantum);

Hinweise

  • Den privaten Schlüssel zuordnen. Ein mit Create ausgestelltes Zertifikat kennt nur den öffentlichen Schlüssel aus der Anforderung. GetPrivateMLDsaKey gibt dafür null zurück, bis Sie AttachPrivateMLDsaKey aufrufen. Erst dann kann das Zertifikat signieren, ausstellen oder als PFX exportiert werden.
  • HasPrivateKey bleibt false. Die Eigenschaft von .NET kennt nur klassische Schlüssel. Ob ein ML-DSA-Schlüssel vorhanden ist, zeigt GetPrivateMLDsaKey.
  • Ohne CryptoMode gilt .NET. rootRequest.CreateSelfSigned(notBefore, notAfter) ohne Argument bindet an die Methode von .NET. Sie kennt den ML-DSA-Schlüssel nicht und wirft eine InvalidOperationException.
  • Freischaltung auch beim Prüfen. Ohne PurePostQuantum wirft jede Operation in der Betriebsart PostQuantum eine CryptographicException, auch X509Chain.Build. Jede Operation meldet das Ereignis PolicyDeviation; siehe Richtlinie für Post-Quanten-Verfahren.
  • Nur Prüfer mit ML-DSA. Software ohne ML-DSA-Kenntnis kann diese Zertifikate nicht prüfen. Für den Übergang verwenden Sie hybride Zertifikate wie in Die erste hybride Zertifikatskette.

Verwandte Themen

de/wiki/pqcrypt/lib/how-to/issue-ml-dsa-certificates.txt · Last modified: by Wolfgang van der Stille