Inhaltsverzeichnis
WasmCryptoProvider
Prostor imena: WvdS.System.Security.Cryptography.Providers
JavaScript Interop-temeljeni kripto-provider za Blazor WebAssembly. Komunicira putem IJSRuntime s openssl.wasm.
Pregled
WasmCryptoProvider omogucuje post-kvantnu kriptografiju u Blazor WebAssembly aplikacijama putem:
- JavaScript Interop-a prema WebAssembly kompiliranom OpenSSL-u
- Potpuno asinkronog API-ja (potreban za JS Interop)
- Identicne funkcionalnosti kao
NativeCryptoProvider
Arhitektura
Blazor WebAssembly
|
v
+-----------------+
| WasmCrypto- |
| Provider |
| (C#) |
+--------+--------+
| IJSRuntime.InvokeAsync
v
+-----------------+
| wvds-crypto.js |
| (JavaScript) |
+--------+--------+
|
v
+-----------------+
| openssl.wasm |
| (WebAssembly) |
+-----------------+
Svojstva
| Svojstvo | Tip | Opis |
|---|---|---|
Name | string | "WASM (JS Interop)" |
IsAvailable | bool | true kada je inicijaliziran |
Dependency Injection
// Program.cs (Blazor WebAssembly) builder.Services.AddScoped<ICryptoProvider>(sp => new WasmCryptoProvider(sp.GetRequiredService<IJSRuntime>()));
Inicijalizacija
@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 JS/WASM datoteke
U wwwroot/index.html:
<head> <!-- OpenSSL WASM modul --> <script src="_content/WvdS.Crypto/openssl.js"></script> <!-- WvdS Crypto omotac --> <script src="_content/WvdS.Crypto/wvds-crypto.js"></script> </head>
ML-DSA i ML-KEM
Metode su identicne kao kod 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 WASM-specificne metode
Derivacija kljuceva
| Metoda | Opis |
|---|---|
Pbkdf2Async | PBKDF2 putem Web Crypto API |
Pbkdf2WithPqSaltAsync | PBKDF2 s PQ pojacalom soli |
Argon2idAsync | Memorijski zahtjevan KDF putem OpenSSL WASM |
HkdfDeriveKeyAsync | HKDF Extract + Expand |
DeriveHybridKeyAsync | Kombinira klasicni + PQ tajni kljuc |
Stream/Chunked sifriranje
| Metoda | Opis |
|---|---|
EncryptChunkedAsync | Chunked AES-GCM sifriranje |
DecryptChunkedAsync | Chunked AES-GCM desifriranje |
EncryptStreamWithPqKeyAsync | ML-KEM + chunked sifriranje |
DecryptStreamWithPqKeyAsync | ML-KEM + chunked desifriranje |
Pomocne funkcije
| Metoda | Opis |
|---|---|
RandomBytesAsync | Kriptografski sigurni slucajni brojevi putem Web Crypto API |
CreateHybridSignatureAsync | Kreiranje hibridnog potpisa |
DeriveTls13KeysAsync | TLS 1.3 raspored kljuceva |
Sigurnosne napomene
- Zahtijeva .NET 8.0+ s Blazor WebAssembly
- Memorija preglednika je manje sigurna od memorije posluzitelja
- Privatni kljucevi se ne bi trebali dugorocno pohranjivati u pregledniku
- Za osjetljive operacije: preferirajte obradu na strani posluzitelja
openssl.wasmiwvds-crypto.jsmoraju biti ispravno ucitani
Najbolje prakse za kripto u pregledniku:
- Koristite efemerne kljuceve za sesijski temeljeno sifriranje
- Osjetljive privatne kljuceve drzite na posluzitelju
- Ne koristite IndexedDB/localStorage za nesifriane kljuceve
- Ispravno konfigurirajte CSP zaglavlja za WASM
Vidi takoder
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: 30.01.2026. u 08:55