====== 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(sp =>
new WasmCryptoProvider(sp.GetRequiredService()));
===== 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'':
===== 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.wasm'' i ''wvds-crypto.js'' moraju 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 =====
* [[.:start|Providers prostor imena]]
* [[.:icryptoprovider|ICryptoProvider]]
* [[.:nativecryptoprovider|NativeCryptoProvider]]
* [[..:..:developer:integration|Vodic za integraciju]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//