====== PKI-Infrastruktur aufbauen ====== Kompakte Anleitung zum Aufbau einer PQ-fähigen PKI. → **Details:** [[de:int:pqcrypt:szenarien:pki:start|PKI-Szenarien]] ---- ===== Hierarchie ===== Root-CA (Offline, ML-DSA-87) └── Intermediate-CA (Online, ML-DSA-65) ├── Server-Zertifikate (Hybrid: ECDSA + ML-DSA) ├── Client-Zertifikate (ML-DSA-65) └── Benutzer-Zertifikate (ML-DSA-65) ---- ===== 1. Root-CA ===== using var mlDsa = MlDsaSigner.Create(MlDsaParameterSet.MlDsa87); var rootDn = new X500DistinguishedNameBuilder(); rootDn.AddCommonName("WvdS Root CA"); rootDn.AddOrganizationName("EMSR DATA d.o.o."); var request = new CertificateRequest(rootDn.Build(), mlDsa, HashAlgorithmName.SHA512); request.CertificateExtensions.Add( new X509BasicConstraintsExtension(true, true, 2, true)); request.CertificateExtensions.Add( new X509KeyUsageExtension( X509KeyUsageFlags.KeyCertSign | X509KeyUsageFlags.CrlSign, true)); var rootCert = request.CreateSelfSigned( DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(20)); File.WriteAllBytes("root-ca.pfx", rootCert.Export(X509ContentType.Pfx, "passwort")); → **Details:** [[de:int:pqcrypt:szenarien:pki:root_ca_erstellen|Root-CA erstellen]] ---- ===== 2. Intermediate-CA ===== var rootCert = new X509Certificate2("root-ca.pfx", "passwort"); using var mlDsa = MlDsaSigner.Create(MlDsaParameterSet.MlDsa65); var dn = new X500DistinguishedNameBuilder(); dn.AddCommonName("WvdS Intermediate CA"); var csr = new CertificateRequest(dn.Build(), mlDsa, HashAlgorithmName.SHA384); csr.CertificateExtensions.Add(new X509BasicConstraintsExtension(true, true, 0, true)); csr.CertificateExtensions.Add( new X509KeyUsageExtension( X509KeyUsageFlags.KeyCertSign | X509KeyUsageFlags.CrlSign, true)); var serial = new byte[20]; RandomNumberGenerator.Fill(serial); serial[0] &= 0x7F; var intCert = csr.Create(rootCert, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(10), serial); → **Details:** [[de:int:pqcrypt:szenarien:pki:intermediate_ca_erstellen|Intermediate-CA erstellen]] ---- ===== 3. Trust Store ===== var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadWrite); store.Add(new X509Certificate2("root-ca.crt")); store.Close(); → **Details:** [[de:int:pqcrypt:szenarien:pki:trust_store_konfigurieren|Trust Store konfigurieren]] ---- ===== Empfehlungen ===== ^ Komponente ^ Algorithmus ^ Gültigkeit ^ | Root-CA | ML-DSA-87 | 20-30 Jahre | | Intermediate-CA | ML-DSA-65 | 5-10 Jahre | | End-Entity | Hybrid oder ML-DSA-65 | 1-2 Jahre | ---- << [[.:start|← Kurzreferenz]] | [[de:int:pqcrypt:szenarien:pki:start|→ PKI-Szenarien (Details)]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>kurzreferenz pki root-ca intermediate-ca}}