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
| Element | Namen |
|---|---|
PostQuantumConfig.Exemptions | z PurePostQuantum dovoli način PostQuantum |
MLDsaKey.Generate | ustvari par ključev ML-DSA z naborom parametrov ML-DSA-65 ali ML-DSA-87; ML-DSA-44 samo z ReducedParameterSets |
MLDsaX509SignatureGenerator.CreateCertificateRequest | ustvari CertificateRequest za ključ ML-DSA |
CreateSelfSigned, Create s CryptoMode.PostQuantum | izdata potrdilo po RFC 9881 |
X509Chain.Build s CryptoMode.PostQuantum | preveri verigo |
AttachPrivateMLDsaKey | izdanemu potrdilu dodeli njegov zasebni ključ |
X509CertificateBuilder | ista 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.GetPrivateMLDsaKeyzanj vrnenull, dokler ne pokličeteAttachPrivateMLDsaKey. Šele nato lahko potrdilo podpisuje, izdaja ali se izvozi kot datoteka PFX. HasPrivateKeyostanefalse. Lastnost iz .NET pozna samo klasične ključe. Ali je ključ ML-DSA na voljo, pokažeGetPrivateMLDsaKey.- Brez
CryptoModevelja .NET.rootRequest.CreateSelfSigned(notBefore, notAfter)brez argumenta se veže na metodo .NET. Ta ključa ML-DSA ne pozna in sprožiInvalidOperationException. - Izjema velja tudi za preverjanje. Brez
PurePostQuantumvsaka operacija v načinuPostQuantumsprožiCryptographicException, tudiX509Chain.Build. Vsaka operacija sporoči dogodekPolicyDeviation; 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