====== NativeCryptoProvider ====== **Imenski prostor:** ''WvdS.System.Security.Cryptography.Providers'' Kriptografski ponudnik na osnovi P/Invoke za strežniške in namizne aplikacije. Neposredno komunicira z OpenSSL 3.6 preko storitev Platform Invocation Services. ===== Pregled ===== ''NativeCryptoProvider'' je privzeti ponudnik za: * Blazor Server * ASP.NET Core * Namizne aplikacije (Windows, Linux, macOS) * Konzolne aplikacije * Windows Services / Linux Daemons ===== Lastnosti ===== ^ Lastnost ^ Tip ^ Opis ^ | ''Name'' | string | ''%%"Native (P/Invoke)"%%'' | | ''IsAvailable'' | bool | ''true'', ko je OpenSSL 3.6 dosegljiv | ===== Inicializacija ===== using WvdS.System.Security.Cryptography.Providers; // Ustvari ponudnika var provider = new NativeCryptoProvider(); // Inicializiraj (naloži OpenSSL) await provider.InitializeAsync(); // Preveri razpoložljivost if (provider.IsAvailable) { Console.WriteLine($"Ponudnik: {provider.Name}"); Console.WriteLine($"OpenSSL: {provider.GetOpenSslVersion()}"); } ===== Operacije ML-DSA ===== ==== GenerateMlDsaKeyPairAsync ==== Generira par ključev ML-DSA. var (publicKey, privateKey) = await provider.GenerateMlDsaKeyPairAsync("ML-DSA-65"); // Podprti algoritmi: // - "ML-DSA-44" (NIST Level 1) // - "ML-DSA-65" (NIST Level 3, priporočeno) // - "ML-DSA-87" (NIST Level 5) ==== SignMlDsaAsync / VerifyMlDsaAsync ==== byte[] data = Encoding.UTF8.GetBytes("Pomembni podatki"); byte[] signature = await provider.SignMlDsaAsync(data, privateKey); bool isValid = await provider.VerifyMlDsaAsync(data, signature, publicKey); ===== Operacije ML-KEM ===== ==== GenerateMlKemKeyPairAsync ==== var (publicKey, privateKey) = await provider.GenerateMlKemKeyPairAsync("ML-KEM-768"); // Podprti algoritmi: // - "ML-KEM-512" (NIST Level 1) // - "ML-KEM-768" (NIST Level 3, priporočeno) // - "ML-KEM-1024" (NIST Level 5) ==== EncapsulateAsync / DecapsulateAsync ==== var (sharedSecret, ciphertext) = await provider.EncapsulateAsync(recipientPublicKey); byte[] sharedSecret = await provider.DecapsulateAsync(ciphertext, privateKey); ===== Pregled metod ===== ^ Metoda ^ Parametri ^ Vrnitev ^ | ''InitializeAsync()'' | - | Task | | ''GetOpenSslVersion()'' | - | string | | ''GenerateMlDsaKeyPairAsync'' | string algorithm | Task<(byte[], byte[])> | | ''SignMlDsaAsync'' | byte[] data, byte[] privateKey | Task | | ''VerifyMlDsaAsync'' | byte[] data, byte[] signature, byte[] publicKey | Task | | ''GenerateMlKemKeyPairAsync'' | string algorithm | Task<(byte[], byte[])> | | ''EncapsulateAsync'' | byte[] publicKey | Task<(byte[], byte[])> | | ''DecapsulateAsync'' | byte[] ciphertext, byte[] privateKey | Task | | ''CreateEphemeralCertificateAsync'' | string subject, TimeSpan validity, byte[] privateKey | Task | | ''SignCertificateAsync'' | byte[] tbsCertificate, byte[] privateKey | Task | ===== Konfiguracija poti OpenSSL ===== // Nastavite pot pred InitializeAsync() CryptoConfig.OpenSslPath = @"C:\OpenSSL\bin"; var provider = new NativeCryptoProvider(); await provider.InitializeAsync(); **Privzete iskalne poti:** ^ Operacijski sistem ^ Poti ^ | Windows | ''%%.\%%'', ''%%C:\OpenSSL\bin%%'', ''%%PATH%%'' | | Linux | ''%%/usr/local/lib64%%'', ''%%/usr/lib/x86_64-linux-gnu%%'' | | macOS | ''%%/opt/homebrew/lib%%'', ''%%/usr/local/lib%%'' | ===== Varnostne opombe ===== * Zahteva OpenSSL 3.6.0 ali novejši s PQ-algoritmi * Zasebni ključi so hranjeni v pomnilniku procesa * Za najvišjo varnost: ključe eksplicitno izbrišite z ''CryptographicOperations.ZeroMemory'' ===== Glejte tudi ===== * [[.:start|Imenski prostor Providers]] * [[.:icryptoprovider|ICryptoProvider]] * [[.:wasmcryptoprovider|WasmCryptoProvider]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//