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:

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.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


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional