====== 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//