Inhaltsverzeichnis

TrustStoreExtensions & PqTrustStore

Upravljanje prilagojenega Trust Store za PQ-kompatibilne PKI-infrastrukture.


Pregled

Razred Opis
PqTrustStore Polnopravni Trust Store s PQ-podporo
TrustStoreExtensions Razširitvene metode za X509Certificate2Collection
TrustEntry Metapodatki za vnose Trust Store
TrustType Enum: TrustAnchor, IntermediateCA, itd.

Razred PqTrustStore

using WvdS.System.Security.Cryptography.X509Certificates;
 
// Ustvarjanje Trust Store
using var trustStore = new PqTrustStore();
 
// Dodajanje Root CA
var rootCa = new X509Certificate2("root-ca.cer");
trustStore.AddTrustAnchor(rootCa, alias: "Korenski CA podjetja");
 
// Dodajanje Intermediate CA
var intermediateCa = new X509Certificate2("intermediate-ca.cer");
trustStore.AddIntermediate(intermediateCa, alias: "Izdajateljski CA");
 
// Uporaba Trust Store
Console.WriteLine($"Trust Store vsebuje {trustStore.Count} vnosov");

Integracija z X509Chain

Validacija s prilagojenim Trust Store:

using System.Security.Cryptography.X509Certificates;
using WvdS.System.Security.Cryptography;
using WvdS.System.Security.Cryptography.X509Certificates;
 
// Nalaganje Trust Store
using var trustStore = PqTrustStore.LoadFromPem("company-trust-store.pem");
 
// Validacija certifikata
var userCert = new X509Certificate2("user.cer");
 
using var chain = new X509Chain();
bool isValid = chain.Build(userCert, trustStore, CryptoMode.Hybrid);
 
if (isValid)
{
    Console.WriteLine("Certifikat je veljaven");
}
else
{
    foreach (var status in chain.ChainStatus)
    {
        Console.WriteLine($"Napaka: {status.StatusInformation}");
    }
}

Z X509Certificate2Collection:

// Enostavneje: neposredno s Collection
var trustAnchors = TrustStoreExtensions.LoadFromPem("trust-anchors.pem");
 
using var chain = new X509Chain();
bool isValid = chain.Build(userCert, trustAnchors, CryptoMode.Hybrid);

Uvoz/Izvoz Trust Store

PEM-paket:

// Shranjevanje
trustStore.SaveToPem("trust-store.pem");
 
// Nalaganje
var loadedStore = PqTrustStore.LoadFromPem("trust-store.pem");

PKCS#7 (DER):

// Shranjevanje kot PKCS#7
trustStore.SaveToPkcs7("trust-store.p7b");
 
// Nalaganje
var loadedStore = PqTrustStore.LoadFromPkcs7("trust-store.p7b");

Uvoz sistemskega Store

// Polnjenje Trust Store s sistemskimi certifikati
using var trustStore = new PqTrustStore();
 
// Uvoz Windows Root CA-jev
trustStore.ImportFromSystemRootStore();
 
// Uvoz Windows Intermediate CA-jev
trustStore.ImportFromSystemIntermediateStore();
 
// Izvoz kot PEM za air-gapped sisteme
trustStore.SaveToPem("system-trust-store.pem");

Enum TrustType

Vrednost Opis
TrustAnchor Zaupni sidro (Root CA)
IntermediateCA Vmesna certifikacijska agencija
CrossCertifiedCA Navzkrižno certificiran CA
EndEntity Končna entiteta (ni CA)

Poizvedbe po Trust Store

// Samo Trust Anchors
var roots = trustStore.TrustAnchors;
 
// Samo Intermediate CA-ji
var intermediates = trustStore.IntermediateCAs;
 
// Iskanje po Subject
var found = trustStore.FindBySubjectName("Podjetje");
 
// Iskanje po Thumbprint
var entry = trustStore.FindByThumbprint("A1B2C3...");
 
// Preverjanje ali je vsebovano
bool exists = trustStore.Contains(certificate);

Poročilo o validaciji

using var chain = new X509Chain();
chain.Build(cert, trustStore, CryptoMode.Hybrid);
 
// Ustvarjanje podrobnega poročila
var report = chain.GetValidationReport();
 
Console.WriteLine($"Veljavno: {report.IsValid}");
Console.WriteLine($"Dolžina verige: {report.ChainLength}");
Console.WriteLine($"Popolnoma PQ-zaščiteno: {report.IsFullyPqProtected}");
 
// Posamezni elementi
foreach (var element in report.Elements)
{
    Console.WriteLine($"  {element.Subject}");
    Console.WriteLine($"    Način: {element.CryptoMode}");
    Console.WriteLine($"    PQ-ključi: {element.HasPqKeys}");
}

Primer izhoda:

Chain Validation: VALID
Chain Length: 3
Fully PQ Protected: True
Elements:
  [0] CN=Uporabniški certifikat
      Mode: Hybrid, PQ Keys: True
  [1] CN=Izdajateljski CA
      Mode: Hybrid, PQ Keys: True
  [2] CN=Korenski CA
      Mode: Hybrid, PQ Keys: True

Offline CRL-preverjanje

Za air-gapped sisteme s predhodno naloženimi CRL-ji:

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

Razširitve Collection

// Filtriranje Collection
var collection = new X509Certificate2Collection();
collection.Import("certificates.p7b");
 
// Samo CA-ji
var cas = collection.FilterCertificateAuthorities();
 
// Samo Root CA-ji (samopodpisani)
var roots = collection.FilterRootCertificates();
 
// Iskanje po Subject
var found = collection.FindBySubjectName("Podjetje");
 
// Preverjanje PQ-statusa
bool hasPq = collection.HasPqProtectedCertificates();
 
// Shranjevanje kot PEM
collection.SaveToPem("output.pem");

Najboljše prakse

Hierarhija Trust Store:

PqTrustStore
├── TrustAnchors (Root CA-ji)
│   └── → chain.ChainPolicy.CustomTrustStore
└── IntermediateCAs
    └── → chain.ChainPolicy.ExtraStore

Priporočila:


Glej tudi


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