X509ChainExtensions

Namespace: WvdS.System.Security.Cryptography.X509Certificates

Drop-In Replacement razširitve za X509Chain s post-kvantno validacijo podpisov. Razširja standardno validacijo verige s preverjanjem PQ-podpisov v vseh treh kriptografskih načinih.

Metode

Metoda Opis
Build(certificate, mode) Zgradi in validira verigo certifikatov s CryptoMode
Build(certificate, customTrustStore, mode) Validacija verige s prilagojenim Trust Store
Build(certificate, trustStore, mode) Validacija verige s PqTrustStore
BuildWithRevocationCheck(…) Gradnja verige s CRL/OCSP preverjanjem
BuildWithOfflineCrl(…) Gradnja verige z offline CRL-podatki
IsFullyPqProtected() Preveri ali je celotna veriga PQ-zaščitena
GetChainCryptoModes() Vrne CryptoModes vseh členov verige
GetValidationReport() Ustvari podrobno poročilo o validaciji

Build s CryptoMode

using var chain = new X509Chain();
var cert = new X509Certificate2("certificate.pfx");
 
// Z eksplicitnim CryptoMode
bool isValid = chain.Build(cert, CryptoMode.Hybrid);
 
// S privzetim načinom iz CryptoConfig
bool isValid2 = chain.Build(cert, null);

Obnašanje validacije po načinu

Način Klasični podpis PQ-podpis
Classic Preverjen Ignoriran
Hybrid Preverjen Preverjen (če je prisoten)
PostQuantum Preverjen (struktura) Obvezen

Build s prilagojenim Trust Store

// Z X509Certificate2Collection
var trustAnchors = new X509Certificate2Collection();
trustAnchors.Add(rootCa);
 
using var chain = new X509Chain();
bool isValid = chain.Build(cert, trustAnchors, CryptoMode.Hybrid);
 
// S PqTrustStore
var trustStore = PqTrustStore.LoadFromPem("truststore.pem");
bool isValid2 = chain.Build(cert, trustStore, CryptoMode.Hybrid);

BuildWithRevocationCheck

using var chain = new X509Chain();
bool isValid = chain.BuildWithRevocationCheck(
    certificate,
    customTrustStore,
    X509RevocationMode.Online,  // ali Offline
    CryptoMode.Hybrid);

BuildWithOfflineCrl

Za air-gapped okolja ali ko prenos CRL ni mozzen:

// Nalaganje CRL-jev
var crlData = new List<byte[]>
{
    File.ReadAllBytes("root-ca.crl"),
    File.ReadAllBytes("intermediate-ca.crl")
};
 
using var chain = new X509Chain();
bool isValid = chain.BuildWithOfflineCrl(
    certificate,
    customTrustStore,
    crlData,
    CryptoMode.Hybrid);

IsFullyPqProtected

using var chain = new X509Chain();
chain.Build(cert, CryptoMode.Hybrid);
 
if (chain.IsFullyPqProtected())
{
    Console.WriteLine("Celotna veriga je PQ-zaščitena");
}
else
{
    // Kateri certifikati niso PQ-zaščiteni?
    var modes = chain.GetChainCryptoModes();
    for (int i = 0; i < modes.Length; i++)
    {
        if (modes[i] == CryptoMode.Classic)
        {
            Console.WriteLine($"Element {i} nima PQ-zaščite");
        }
    }
}

GetValidationReport

Ustvari podrobno poročilo o validaciji verige:

using var chain = new X509Chain();
chain.Build(cert, CryptoMode.Hybrid);
 
var report = chain.GetValidationReport();
Console.WriteLine(report.ToString());
 
// Posamezne lastnosti:
Console.WriteLine($"Veljavno: {report.IsValid}");
Console.WriteLine($"Dolžina verige: {report.ChainLength}");
Console.WriteLine($"Popolnoma PQ-zaščiteno: {report.IsFullyPqProtected}");
 
// Podrobnosti na element:
foreach (var element in report.Elements)
{
    Console.WriteLine($"  {element.Subject}");
    Console.WriteLine($"    Način: {element.CryptoMode}");
    Console.WriteLine($"    Ima PQ-ključe: {element.HasPqKeys}");
}

ChainValidationReport

Lastnost Tip Opis
IsValid bool Veriga je veljavna
ChainLength int Število členov verige
IsFullyPqProtected bool Vsi certifikati PQ-zaščiteni
OverallStatus X509ChainStatusFlags[] Skupni status
Elements ChainElementInfo[] Podrobnosti na člen

ChainElementInfo

Lastnost Tip Opis
Subject string Subject certifikata
Issuer string Izdajatelj
Thumbprint string SHA-1 prstni odtis
NotBefore DateTime Veljavno od
NotAfter DateTime Veljavno do
CryptoMode CryptoMode Prepoznan način
HasPqKeys bool PQ-ključi v shrambi
StatusFlags X509ChainStatusFlags[] Statusne zastavice
StatusMessages string[] Statusna sporočila

Glej tudi


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: dne 30.01.2026 ob 01:30