So verwenden Sie die Bibliothek in Blazor
Ihre Blazor-Anwendung soll Post-Quanten-Verfahren nutzen, auf dem Server oder im Browser.
Lösungsübersicht
Blazor Server und Blazor WebAssembly verwenden die Bibliothek unterschiedlich, weil ein Browser keine nativen Bibliotheken lädt:
| Blazor Server | Blazor WebAssembly | |
|---|---|---|
| Verweis | WKL.System.Security.Cryptography.Extensions | WKL.System.Security.Cryptography.WASM |
| OpenSSL | libcrypto ab 3.5 auf dem Server | OpenSSL als WebAssembly-Modul, das das Projekt mitbringt |
| Schnittstelle | die Erweiterungsmethoden mit CryptoMode, wie in jeder .NET-Anwendung | die asynchronen Methoden von WasmCryptoProvider: ML-DSA, ML-KEM, Schlüsselableitung |
| Ort der Schlüssel | auf dem Server | im Browser |
Die Erweiterungsmethoden rufen OpenSSL über Plattformaufrufe auf und laufen deshalb nicht in Blazor
WebAssembly. Im Browser verwenden Sie WasmCryptoProvider direkt.
Umsetzung
Blazor Server
Blazor Server verwendet die Bibliothek wie jede andere .NET-Anwendung. Setzen Sie beim Start der Anwendung den Pfad zu OpenSSL und schalten Sie den PQ-Betrieb ein, bevor die erste kryptografische Operation läuft:
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();
Danach gelten alle Anleitungen dieser Dokumentation unverändert, etwa Die erste hybride Zertifikatskette.
Blazor WebAssembly
Verweisen Sie auf das WebAssembly-Projekt:
<ItemGroup> <ProjectReference Include="..\sys-sec-crypto\WKL.System.Security.Cryptography.WASM\WKL.System.Security.Cryptography.WASM.csproj" /> </ItemGroup>
Das Projekt veröffentlicht
wkl-crypto.js,openssl.jsundopenssl.wasmals statische Webinhalte unter_content/WKL.System.Security.Cryptography.WASM/.Laden Sie die JavaScript-Brücke in
wwwroot/index.html, vor dem Skript von Blazor:<script src="_content/WKL.System.Security.Cryptography.WASM/wkl-crypto.js"></script>Die Brücke lädt
openssl.jsundopenssl.wasmselbst. Liegen die Dateien woanders, setzen Sie vor dem Skriptwindow.WKLCryptoConfig = { jsPath: "…", wasmPath: "…" }.Registrieren und starten Sie den Anbieter in
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();
Signieren und prüfen Sie im Browser, etwa in einer Komponente, die den Anbieter erhält:
var (publicKey, privateKey) = await provider.GenerateMlDsaKeyPairAsync("ML-DSA-65"); byte[] data = "Bestellung 2026-0815"u8.ToArray(); byte[] signature = await provider.SignMlDsaAsync(data, privateKey); bool valid = await provider.VerifyMlDsaAsync(data, signature, publicKey);
Schlüssel liegen als DER vor: SubjectPublicKeyInfo für öffentliche, PKCS#8 für private Schlüssel. ML-KEM funktioniert ebenso mit
GenerateMlKemKeyPairAsync,EncapsulateAsyncundDecapsulateAsync.
Hinweise
- Kein Weiterlaufen ohne PQ. Scheitert
EnablePostQuantumAsync, wirft es eineCryptographicException. Die Anwendung läuft nicht unbemerkt ohne PQ-Verfahren weiter. - Die Richtlinie gilt auch im Browser.
GenerateMlDsaKeyPairAsync("ML-DSA-44")undGenerateMlKemKeyPairAsync("ML-KEM-512")werfen ohnePostQuantumExemptions.ReducedParameterSetseineCryptographicException.EncryptStreamWithPqKeyAsyncverschlüsselt mit ML-KEM allein und brauchtPostQuantumExemptions.PurePostQuantum.DeriveHybridKeyAsynckombiniert mit einem Verfahren, das BSI TR-02102-1 nicht empfiehlt, und brauchtPostQuantumExemptions.NonRecommendedCombiners. Siehe Richtlinie für Post-Quanten-Verfahren. - Ein ML-DSA-Schlüssel allein ist keine hybride Signatur.
SignMlDsaAsyncrechnet nur ML-DSA. Für eine Signatur nach der Empfehlung von BSI TR-02102-1 kombinieren Sie sie in Ihrem Protokoll mit einer klassischen Signatur, etwa mit ECDSA über die Web Crypto API des Browsers. - Private Schlüssel nicht im Browserspeicher ablegen. Was in
localStorageodersessionStorageliegt, kann jedes Skript der Seite lesen. OpenSslPathgilt im Browser nicht. Der WebAssembly-Anbieter übergeht die Eigenschaft.