PkcsExtensions

Máj 2020

PkcsExtensions je malá knižnica pridávajúca extensions metódy a typy, ktoré chýbajú v dotnete (.net core 3.1) v oblasti PKCS.

Táto knižnica vznikla pre to, lebo som sa často stretával s opakujúcimi sa úlohami. Napríklad bezpečný prevod SecureString na pole bajtov, generátor náhodných čísiel, ktorý dokáže zbierať entropiu, zistenie, či je certifikát možné použiť pri podpisovaní dokumentu,…

Plno z tohto rieši BauncyCastle, ale to je okolo dva megabajty veľká knižnica, ktorá sa nedá dobre linkovať (IL Linking), lebo takmer každá trieda súvisí s každou. Preto som sa inšpiroval knižnicu SecurityDriven.Inferno, ktorá pridáva len tenkú vrstvu a rozšírenia nad štandardné dotnet API.

Mojim cieľom bolo vytvoriť malú knižnicu, vhodnú pre AOT kompiláciu, IL Linking a teda aby šla dobre použiť v malých programoch a Blazore.

PkcsExtensions poskytuje funkcionalitu pre:

  • export RSA, ECDsa, certifikátu do BER/DER formátu,
  • hex konvertor,
  • generátor náhodných čísiel,
  • rozšírenia pre HashAlgorithm aby bol použiteľnejší,
  • KDF algoritmus SP800-108 na deriváciu nových kľúčov,
  • ASN1 writer a reader z corefx,
  • pomocné triedy pre vytváranie SignedCms,
  • rozšírenia pre X509Certificate2 na zisťovanie možnosti použitia certifikátu a parsovanie subjectu a issuera,

Vytvorený Nuget balíček.

Ukážky použitia a príklady so zdrojovými kódmi sa nachádzajú na Github stránke projektu.

PkcsExtensions.Blazor

PkcsExtensions.Blazor je knižnica pre Blazor WebAssembly, poskytujúca interop pre WebCrypto (kryptografické primitíva vo webovom prehliadači) a ďalšie pomocné triedy a extension metódy pre PKCS v prostredí browsera (PkcsExtensions je jej závislosť).

Táto knižnica umožňuje:

  • generovať náhodné pole bajtov pomocou WebCrypto,
  • generovať RSA kľúče pomocou WebCrypto,
  • generovať EC kľúče pomocou WebCrypto,
  • Diffie–Hellmanovu výmenu kľúčov a ECIES pomocou WebCrypto,
  • exportovať RSA kľúče,
  • podporu JsonWebKey,

Táto knižnica zámerne nerobí interop na WebCrypto pre hash funkcie, HMAC, šifrovanie a podpisovanie, pretože ich implementácie a podpora sa môže líšiť medzi prehliadačmi a operačnými systémami, navyše WebCrypto neumožňuje podpísať hash. Preto v súčasnosti považujem za lepšiu alternatívu použiť dotnet/Blazor implementáciu týchto funcionalít.

Poznámka: To, ktoré kryptografické API v Blazor WebAssembly funguje záleží od jeho verzie. Preto aj táto knižnica môže poskytovať rôznu časť funkcionality v závislosti od toho, akú verziu Blazoru používate.

Vytvorený Nuget balíček.

Ukážky použitia a príklady so zdrojovými kódmi sa nachádzajú na Github stránke projektu.