Namespace: WvdS.System.Security.Cryptography.X509Certificates
Estensioni Drop-In Replacement per X509Chain con validazione delle firme Post-Quantum. Estende la validazione standard della catena con la verifica delle firme PQ in tutte e tre le modalità crittografiche.
| Metodo | Descrizione |
|---|---|
Build(certificate, mode) | Costruisce e valida la catena dei certificati con CryptoMode |
Build(certificate, customTrustStore, mode) | Validazione della catena con Trust Store personalizzato |
Build(certificate, trustStore, mode) | Validazione della catena con PqTrustStore |
BuildWithRevocationCheck(…) | Build della catena con verifica CRL/OCSP |
BuildWithOfflineCrl(…) | Build della catena con dati CRL offline |
IsFullyPqProtected() | Verifica se l'intera catena è protetta PQ |
GetChainCryptoModes() | Restituisce i CryptoModes di tutti gli elementi della catena |
GetValidationReport() | Crea un report di validazione dettagliato |
using var chain = new X509Chain(); var cert = new X509Certificate2("certificate.pfx"); // Con CryptoMode esplicito bool isValid = chain.Build(cert, CryptoMode.Hybrid); // Con modalità predefinita da CryptoConfig bool isValid2 = chain.Build(cert, null);
| Modalità | Firma classica | Firma PQ |
|---|---|---|
| Classic | Verificata | Ignorata |
| Hybrid | Verificata | Verificata (se presente) |
| PostQuantum | Verificata (struttura) | Richiesta |
// Con X509Certificate2Collection var trustAnchors = new X509Certificate2Collection(); trustAnchors.Add(rootCa); using var chain = new X509Chain(); bool isValid = chain.Build(cert, trustAnchors, CryptoMode.Hybrid); // Con PqTrustStore var trustStore = PqTrustStore.LoadFromPem("truststore.pem"); bool isValid2 = chain.Build(cert, trustStore, CryptoMode.Hybrid);
using var chain = new X509Chain(); bool isValid = chain.BuildWithRevocationCheck( certificate, customTrustStore, X509RevocationMode.Online, // oppure Offline CryptoMode.Hybrid);
Per ambienti air-gapped o quando il download CRL non è possibile:
// Caricare le CRL 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);
using var chain = new X509Chain(); chain.Build(cert, CryptoMode.Hybrid); if (chain.IsFullyPqProtected()) { Console.WriteLine("L'intera catena è protetta PQ"); } else { // Quali certificati non sono protetti PQ? var modes = chain.GetChainCryptoModes(); for (int i = 0; i < modes.Length; i++) { if (modes[i] == CryptoMode.Classic) { Console.WriteLine($"L'elemento {i} non ha protezione PQ"); } } }
Crea un report dettagliato sulla validazione della catena:
using var chain = new X509Chain(); chain.Build(cert, CryptoMode.Hybrid); var report = chain.GetValidationReport(); Console.WriteLine(report.ToString()); // Proprietà singole: Console.WriteLine($"Valido: {report.IsValid}"); Console.WriteLine($"Lunghezza catena: {report.ChainLength}"); Console.WriteLine($"Completamente protetto PQ: {report.IsFullyPqProtected}"); // Dettagli per elemento: foreach (var element in report.Elements) { Console.WriteLine($" {element.Subject}"); Console.WriteLine($" Modalità: {element.CryptoMode}"); Console.WriteLine($" Ha chiavi PQ: {element.HasPqKeys}"); }
| Proprietà | Tipo | Descrizione |
|---|---|---|
IsValid | bool | La catena è valida |
ChainLength | int | Numero di elementi nella catena |
IsFullyPqProtected | bool | Tutti i certificati sono protetti PQ |
OverallStatus | X509ChainStatusFlags[] | Stato complessivo |
Elements | ChainElementInfo[] | Dettagli per elemento |
| Proprietà | Tipo | Descrizione |
|---|---|---|
Subject | string | Subject del certificato |
Issuer | string | Emittente |
Thumbprint | string | Fingerprint SHA-1 |
NotBefore | DateTime | Valido da |
NotAfter | DateTime | Valido fino a |
CryptoMode | CryptoMode | Modalità rilevata |
HasPqKeys | bool | Chiavi PQ nello store |
StatusFlags | X509ChainStatusFlags[] | Flag di stato |
StatusMessages | string[] | Messaggi di stato |
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional