Inhaltsverzeichnis
WasmCryptoProvider
Imenski prostor: WvdS.System.Security.Cryptography.Providers
Kriptografski ponudnik na osnovi JavaScript Interop za Blazor WebAssembly. Komunicira preko IJSRuntime z openssl.wasm.
Pregled
WasmCryptoProvider omogoča post-kvantno kriptografijo v aplikacijah Blazor WebAssembly z:
- JavaScript Interop do OpenSSL, prevedenega v WebAssembly
- Popolnoma asinhroni API (potreben za JS Interop)
- Identična funkcionalnost kot
NativeCryptoProvider
Arhitektura
Blazor WebAssembly
|
v
+-----------------+
| WasmCrypto- |
| Provider |
| (C#) |
+--------+--------+
| IJSRuntime.InvokeAsync
v
+-----------------+
| wvds-crypto.js |
| (JavaScript) |
+--------+--------+
|
v
+-----------------+
| openssl.wasm |
| (WebAssembly) |
+-----------------+
Lastnosti
| Lastnost | Tip | Opis |
|---|---|---|
Name | string | "WASM (JS Interop)" |
IsAvailable | bool | true, ko je inicializiran |
Dependency Injection
// Program.cs (Blazor WebAssembly) builder.Services.AddScoped<ICryptoProvider>(sp => new WasmCryptoProvider(sp.GetRequiredService<IJSRuntime>()));
Inicializacija
@inject ICryptoProvider CryptoProvider @code { protected override async Task OnInitializedAsync() { await CryptoProvider.InitializeAsync(); if (CryptoProvider.IsAvailable) { var version = CryptoProvider.GetOpenSslVersion(); Console.WriteLine($"OpenSSL WASM: {version}"); } } }
Potrebne datoteke JS/WASM
V wwwroot/index.html:
<head> <!-- OpenSSL WASM Module --> <script src="_content/WvdS.Crypto/openssl.js"></script> <!-- WvdS Crypto Wrapper --> <script src="_content/WvdS.Crypto/wvds-crypto.js"></script> </head>
ML-DSA in ML-KEM
Metode so identične kot pri NativeCryptoProvider:
// ML-KEM var (publicKey, privateKey) = await provider.GenerateMlKemKeyPairAsync("ML-KEM-768"); var (sharedSecret, ciphertext) = await provider.EncapsulateAsync(recipientPublicKey); byte[] sharedSecret = await provider.DecapsulateAsync(ciphertext, privateKey); // ML-DSA var (sigPub, sigPriv) = await provider.GenerateMlDsaKeyPairAsync("ML-DSA-65"); byte[] signature = await provider.SignMlDsaAsync(data, sigPriv); bool isValid = await provider.VerifyMlDsaAsync(data, signature, sigPub);
Dodatne metode, specifične za WASM
Izpeljava ključev
| Metoda | Opis |
|---|---|
Pbkdf2Async | PBKDF2 preko Web Crypto API |
Pbkdf2WithPqSaltAsync | PBKDF2 s PQ-ojačano soljo |
Argon2idAsync | KDF, odporen na pomnilnik, preko OpenSSL WASM |
HkdfDeriveKeyAsync | HKDF Extract + Expand |
DeriveHybridKeyAsync | Kombinira klasično + PQ skrivnost |
Šifriranje po kosih/tokih
| Metoda | Opis |
|---|---|
EncryptChunkedAsync | Šifriranje AES-GCM po kosih |
DecryptChunkedAsync | Dešifriranje AES-GCM po kosih |
EncryptStreamWithPqKeyAsync | ML-KEM + šifriranje po kosih |
DecryptStreamWithPqKeyAsync | ML-KEM + dešifriranje po kosih |
Pomožne funkcije
| Metoda | Opis |
|---|---|
RandomBytesAsync | Kriptografsko varna naključna števila preko Web Crypto API |
CreateHybridSignatureAsync | Ustvari hibridni podpis |
DeriveTls13KeysAsync | Razpored ključev TLS 1.3 |
Varnostne opombe
- Zahteva .NET 8.0+ z Blazor WebAssembly
- Pomnilnik brskalnika je manj varen kot pomnilnik strežnika
- Zasebni ključi se ne smejo dolgoročno hraniti v brskalniku
- Za občutljive operacije: raje uporabite strežniško obdelavo
openssl.wasminwvds-crypto.jsmorata biti pravilno naložena
Najboljše prakse za kriptografijo v brskalniku:
- Uporabljajte kratkoživljajoče ključe za šifriranje na podlagi sej
- Občutljive zasebne ključe pustite na strežniku
- Ne uporabljajte IndexedDB/localStorage za nešifrirane ključe
- Pravilno konfigurirajte CSP-glave za WASM
Glejte tudi
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: dne 30.01.2026 ob 08:26