====== 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//