Uporaba knjižnice v Blazorju
Vaša aplikacija Blazor naj uporablja postkvantne postopke, na strežniku ali v brskalniku.
Pregled rešitve
Blazor Server in Blazor WebAssembly knjižnico uporabljata različno, ker brskalnik ne nalaga izvornih knjižnic:
| Blazor Server | Blazor WebAssembly | |
|---|---|---|
| Sklic | WKL.System.Security.Cryptography.Extensions | WKL.System.Security.Cryptography.WASM |
| OpenSSL | libcrypto 3.5 ali novejši na strežniku | OpenSSL kot modul WebAssembly, ki ga prinese projekt |
| Vmesnik | razširitvene metode s CryptoMode, kot v vsaki aplikaciji .NET | asinhrone metode WasmCryptoProvider: ML-DSA, ML-KEM, izpeljava ključev |
| Mesto ključev | na strežniku | v brskalniku |
Razširitvene metode OpenSSL kličejo prek klicev platforme, zato v Blazor WebAssembly ne delujejo. V
brskalniku neposredno uporabite WasmCryptoProvider.
Izvedba
Blazor Server
Blazor Server knjižnico uporablja kot vsaka druga aplikacija .NET. Ob zagonu aplikacije nastavite pot do OpenSSL in vklopite način PQ, preden se izvede prva kriptografska operacija:
using WKL.System.Security.Cryptography; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents().AddInteractiveServerComponents(); var app = builder.Build(); PostQuantumConfig.OpenSslPath = builder.Configuration["OpenSsl:Directory"]; PostQuantumConfig.EnablePostQuantum(CryptoMode.Hybrid); app.Run();
Nato vsa navodila te dokumentacije veljajo nespremenjena, na primer Prva hibridna veriga potrdil.
Blazor WebAssembly
Dodajte sklic na projekt WebAssembly:
<ItemGroup> <ProjectReference Include="..\sys-sec-crypto\WKL.System.Security.Cryptography.WASM\WKL.System.Security.Cryptography.WASM.csproj" /> </ItemGroup>
Projekt objavi
wkl-crypto.js,openssl.jsinopenssl.wasmkot statično spletno vsebino pod_content/WKL.System.Security.Cryptography.WASM/.Most JavaScript naložite v
wwwroot/index.html, pred skriptom Blazorja:<script src="_content/WKL.System.Security.Cryptography.WASM/wkl-crypto.js"></script>Most
openssl.jsinopenssl.wasmnaloži sam. Če so datoteke drugje, pred skriptom nastavitewindow.WKLCryptoConfig = { jsPath: "…", wasmPath: "…" }.Ponudnika registrirajte in zaženite v
Program.cs:using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.JSInterop; using WKL.System.Security.Cryptography; using WKL.System.Security.Cryptography.WASM; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); var host = builder.Build(); var provider = new WasmCryptoProvider(host.Services.GetRequiredService<IJSRuntime>()); CryptoProviderFactory.SetProvider(provider); await PostQuantumConfig.EnablePostQuantumAsync(CryptoMode.Hybrid); await host.RunAsync();
Podpisujte in preverjajte v brskalniku, na primer v komponenti, ki prejme ponudnika:
var (publicKey, privateKey) = await provider.GenerateMlDsaKeyPairAsync("ML-DSA-65"); byte[] data = "Naročilo 2026-0815"u8.ToArray(); byte[] signature = await provider.SignMlDsaAsync(data, privateKey); bool valid = await provider.VerifyMlDsaAsync(data, signature, publicKey);
Ključi so v obliki DER: SubjectPublicKeyInfo za javne, PKCS #8 za zasebne ključe. ML-KEM deluje enako z
GenerateMlKemKeyPairAsync,EncapsulateAsyncinDecapsulateAsync.
Opombe
- Brez nadaljevanja brez PQ. Če
EnablePostQuantumAsyncne uspe, sprožiCryptographicException. Aplikacija ne teče neopazno naprej brez postopkov PQ. - Pravila veljajo tudi v brskalniku.
GenerateMlDsaKeyPairAsync("ML-DSA-44")inGenerateMlKemKeyPairAsync("ML-KEM-512")brezPostQuantumExemptions.ReducedParameterSetssprožitaCryptographicException.EncryptStreamWithPqKeyAsyncšifrira samo z ML-KEM in potrebujePostQuantumExemptions.PurePostQuantum.DeriveHybridKeyAsynczdružuje s postopkom, ki ga BSI TR-02102-1 ne priporoča, in potrebujePostQuantumExemptions.NonRecommendedCombiners. Glejte Pravila za postkvantne postopke. - Ključ ML-DSA sam ni hibridni podpis.
SignMlDsaAsyncračuna samo ML-DSA. Za podpis po priporočilu BSI TR-02102-1 ga v svojem protokolu združite s klasičnim podpisom, na primer z ECDSA prek vmesnika Web Crypto API brskalnika. - Zasebnih ključev ne shranjujte v pomnilnik brskalnika. Kar je v
localStoragealisessionStorage, lahko prebere vsak skript na strani. OpenSslPathv brskalniku ne velja. Ponudnik WebAssembly lastnost prezre.