Inhaltsverzeichnis
WasmCryptoProvider
Namespace: WvdS.System.Security.Cryptography.Providers
Provider crittografico basato su JavaScript Interop per Blazor WebAssembly. Comunica tramite IJSRuntime con openssl.wasm.
Panoramica
Il WasmCryptoProvider abilita la crittografia post-quantum in applicazioni Blazor WebAssembly attraverso:
- JavaScript Interop verso OpenSSL compilato in WebAssembly
- API completamente asincrona (richiesta per JS Interop)
- Funzionalita identica a
NativeCryptoProvider
Architettura
Blazor WebAssembly
|
v
+-----------------+
| WasmCrypto- |
| Provider |
| (C#) |
+--------+--------+
| IJSRuntime.InvokeAsync
v
+-----------------+
| wvds-crypto.js |
| (JavaScript) |
+--------+--------+
|
v
+-----------------+
| openssl.wasm |
| (WebAssembly) |
+-----------------+
Proprieta
| Proprieta | Tipo | Descrizione |
|---|---|---|
Name | string | "WASM (JS Interop)" |
IsAvailable | bool | true se inizializzato |
Dependency Injection
// Program.cs (Blazor WebAssembly) builder.Services.AddScoped<ICryptoProvider>(sp => new WasmCryptoProvider(sp.GetRequiredService<IJSRuntime>()));
Inizializzazione
@inject ICryptoProvider CryptoProvider @code { protected override async Task OnInitializedAsync() { await CryptoProvider.InitializeAsync(); if (CryptoProvider.IsAvailable) { var version = CryptoProvider.GetOpenSslVersion(); Console.WriteLine($"OpenSSL WASM: {version}"); } } }
File JS/WASM richiesti
In wwwroot/index.html:
<head> <!-- Modulo OpenSSL WASM --> <script src="_content/WvdS.Crypto/openssl.js"></script> <!-- Wrapper WvdS Crypto --> <script src="_content/WvdS.Crypto/wvds-crypto.js"></script> </head>
ML-DSA e ML-KEM
I metodi sono identici a 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);
Metodi aggiuntivi specifici WASM
Key Derivation
| Metodo | Descrizione |
|---|---|
Pbkdf2Async | PBKDF2 via Web Crypto API |
Pbkdf2WithPqSaltAsync | PBKDF2 con salt rafforzato PQ |
Argon2idAsync | KDF memory-hard via OpenSSL WASM |
HkdfDeriveKeyAsync | HKDF Extract + Expand |
DeriveHybridKeyAsync | Combina secret classico + PQ |
Cifratura Stream/Chunked
| Metodo | Descrizione |
|---|---|
EncryptChunkedAsync | Cifratura AES-GCM a chunk |
DecryptChunkedAsync | Decifratura AES-GCM a chunk |
EncryptStreamWithPqKeyAsync | ML-KEM + cifratura chunked |
DecryptStreamWithPqKeyAsync | ML-KEM + decifratura chunked |
Utility
| Metodo | Descrizione |
|---|---|
RandomBytesAsync | Numeri casuali crittograficamente sicuri via Web Crypto API |
CreateHybridSignatureAsync | Creare firma ibrida |
DeriveTls13KeysAsync | Key Schedule TLS 1.3 |
Note sulla sicurezza
- Richiede .NET 8.0+ con Blazor WebAssembly
- La memoria del browser e meno sicura della memoria del server
- Le chiavi private non dovrebbero essere memorizzate a lungo termine nel browser
- Per operazioni sensibili: preferire elaborazione lato server
openssl.wasmewvds-crypto.jsdevono essere caricati correttamente
Best Practice per crittografia nel browser:
- Usare chiavi effimere per cifratura basata su sessione
- Mantenere chiavi private sensibili sul server
- Non usare IndexedDB/localStorage per chiavi non cifrate
- Configurare correttamente gli header CSP per WASM
Vedi anche
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: il 30/01/2026 alle 09:06