Color scheme: Light
You are here: start » sl » Dokumentacija » Postkvantna kriptografija » WKL.System.Security.Cryptography – pregled » Navodila » Izdajanje čistih potrdil ML-DSA

Izdajanje čistih potrdil ML-DSA

Potrebujete overitelja in potrdila, ki uporabljajo izključno ML-DSA, na primer za zaprto okolje, v katerem vsi udeleženci preverjajo ML-DSA.

Pregled rešitve

ElementNamen
PostQuantumConfig.Exemptionsz PurePostQuantum dovoli način PostQuantum
MLDsaKey.Generateustvari par ključev ML-DSA z naborom parametrov ML-DSA-65 ali ML-DSA-87; ML-DSA-44 samo z ReducedParameterSets
MLDsaX509SignatureGenerator.CreateCertificateRequestustvari CertificateRequest za ključ ML-DSA
CreateSelfSigned, Create s CryptoMode.PostQuantumizdata potrdilo po RFC 9881
X509Chain.Build s CryptoMode.PostQuantumpreveri verigo
AttachPrivateMLDsaKeyizdanemu potrdilu dodeli njegov zasebni ključ
X509CertificateBuilderista pot za .NET Framework 4.6.2, ki CertificateRequest ne pozna

Izvedba

BSI TR-02102-1 podpise PQ priporoča samo v kombinaciji s klasičnim podpisom. Način PostQuantum zato potrebuje izjemo, ki jo nastavite enkrat ob zagonu aplikacije:

PostQuantumConfig.Exemptions |= PostQuantumExemptions.PurePostQuantum;

Korensko potrdilo:

var now = DateTimeOffset.UtcNow;
using var rootKey = MLDsaKey.Generate(MLDsaParameterSet.MLDsa65);
var rootRequest = new MLDsaX509SignatureGenerator(rootKey)
    .CreateCertificateRequest("CN=Vzorec 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);

Potrdilo podpisnika, ki ga izda korensko potrdilo, s preverjanjem verige:

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));

Za .NET Framework 4.6.2 potrdilo izdajte z X509CertificateBuilder:

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

Opombe

  • Dodelite zasebni ključ. Potrdilo, izdano s Create, pozna samo javni ključ iz zahtevka. GetPrivateMLDsaKey zanj vrne null, dokler ne pokličete AttachPrivateMLDsaKey. Šele nato lahko potrdilo podpisuje, izdaja ali se izvozi kot datoteka PFX.
  • HasPrivateKey ostane false. Lastnost iz .NET pozna samo klasične ključe. Ali je ključ ML-DSA na voljo, pokaže GetPrivateMLDsaKey.
  • Brez CryptoMode velja .NET. rootRequest.CreateSelfSigned(notBefore, notAfter) brez argumenta se veže na metodo .NET. Ta ključa ML-DSA ne pozna in sproži InvalidOperationException.
  • Izjema velja tudi za preverjanje. Brez PurePostQuantum vsaka operacija v načinu PostQuantum sproži CryptographicException, tudi X509Chain.Build. Vsaka operacija sporoči dogodek PolicyDeviation; glejte Pravila za postkvantne postopke.
  • Samo preverjevalniki z ML-DSA. Programska oprema, ki ML-DSA ne pozna, teh potrdil ne more preveriti. Za prehodno obdobje uporabite hibridna potrdila, kot v Prva hibridna veriga potrdil.

Sorodne teme

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