====== 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 { 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 ===== * [[.:x509certificate2extensions|X509Certificate2Extensions]] * [[.:truststoreextensions|TrustStoreExtensions]] * [[.:revocationextensions|RevocationExtensions]] * [[sl:int:pqcrypt:konzepte:start|Razlaga kriptografskih načinov]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//