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.wasm in wvds-crypto.js morata 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