Namespace: WvdS.System.Security.Cryptography.Providers
JavaScript Interop-basierter Krypto-Provider für Blazor WebAssembly. Kommuniziert über IJSRuntime mit openssl.wasm.
Der WasmCryptoProvider ermöglicht Post-Quantum Kryptographie in Blazor WebAssembly Anwendungen durch:
NativeCryptoProviderBlazor WebAssembly
│
▼
┌─────────────────┐
│ WasmCrypto- │
│ Provider │
│ (C#) │
└────────┬────────┘
│ IJSRuntime.InvokeAsync
▼
┌─────────────────┐
│ wvds-crypto.js │
│ (JavaScript) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ openssl.wasm │
│ (WebAssembly) │
└─────────────────┘
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Name | string | "WASM (JS Interop)" |
IsAvailable | bool | true wenn initialisiert |
// Program.cs (Blazor WebAssembly) builder.Services.AddScoped<ICryptoProvider>(sp => new WasmCryptoProvider(sp.GetRequiredService<IJSRuntime>()));
@inject ICryptoProvider CryptoProvider @code { protected override async Task OnInitializedAsync() { await CryptoProvider.InitializeAsync(); if (CryptoProvider.IsAvailable) { var version = CryptoProvider.GetOpenSslVersion(); Console.WriteLine($"OpenSSL WASM: {version}"); } } }
In 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>
Die Methoden sind identisch mit 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);
| Methode | Beschreibung |
|---|---|
Pbkdf2Async | PBKDF2 über Web Crypto API |
Pbkdf2WithPqSaltAsync | PBKDF2 mit PQ-verstärktem Salt |
Argon2idAsync | Memory-hard KDF via OpenSSL WASM |
HkdfDeriveKeyAsync | HKDF Extract + Expand |
DeriveHybridKeyAsync | Kombiniert klassisch + PQ Secret |
| Methode | Beschreibung |
|---|---|
EncryptChunkedAsync | Chunked AES-GCM Verschlüsselung |
DecryptChunkedAsync | Chunked AES-GCM Entschlüsselung |
EncryptStreamWithPqKeyAsync | ML-KEM + chunked Encryption |
DecryptStreamWithPqKeyAsync | ML-KEM + chunked Decryption |
| Methode | Beschreibung |
|---|---|
RandomBytesAsync | Kryptographisch sichere Zufallszahlen via Web Crypto API |
CreateHybridSignatureAsync | Hybride Signatur erstellen |
DeriveTls13KeysAsync | TLS 1.3 Key Schedule |
openssl.wasm und wvds-crypto.js müssen korrekt geladen seinBest Practices für Browser-Krypto:
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional