JWK ⇄ PEM Kulcsátalakító
Kriptográfiai kulcsok átalakítása JWK és PEM formátumok között a valós Web Crypto API használatával, az algoritmus/görbe/méret dekódolása és az RFC 7638 JWK ujjlenyomat kiszámítása.
🔒 Teljesen a böngészőjében dolgozzák fel – soha semmi, amit itt beírt, nem kerül feltöltésre.
Eredmény
A JSON Web Keys (JWK) és a PEM kódolású kulcsok felváltva jelennek meg a JWT könyvtárakban, TLS eszközökben és OAuth/OIDC konfigurációkban, de a kettő közötti kézi átalakítás a DER struktúrák base64-dekódolását vagy a JSON átformázását igényli — könnyű alattomosan hibázni. Ez az eszköz a böngésző valós Web Crypto API-ját használja az átalakításhoz szövegmanipuláció helyett: egy beillesztett PEM blokkot a crypto.subtle.importKey('spki'|'pkcs8', ...) hívással importál, majd JWK-ként exportál újra az exportKey('jwk', ...) segítségével; egy beillesztett JWK-t pedig az importKey('jwk', ...) hívással importál, majd SPKI vagy PKCS8 DER formátumba exportál és a megfelelő PEM fejlécbe csomagol. Mivel a böngésző maga ellenőrzi és dekódolja a kulcsanyagot, egy hibás kulcs vagy egy eltérő algoritmusválasztás egyértelmű hibával leáll, ahelyett, hogy csendben szemetet produkálna.
A támogatott algoritmusok: RSA (RSASSA-PKCS1-v1_5), EC a P-256/P-384/P-521 görbéken, valamint — ahol a böngésző implementálja — Ed25519 és X25519. Az Ed25519/X25519 Web Crypto támogatása a böngészőmotorok között még mindig inkonzisztens, ezért ahelyett, hogy a user agent stringből találgatna, az eszköz egy valódi crypto.subtle.generateKey() próbát futtat le a kiválasztott görbére, és egyértelműen jelzi, ha az itt nem támogatott, nem pedig gyártott eredményt ad vissza.
Minden átalakítás dekódolja a kulcs valós metaadatait is: RSA kulcsoknál a modulus bitszámát és a hash algoritmust közvetlenül a CryptoKey objektumból; EC és OKP kulcsoknál a megnevezett görbét; minden kulcsnál pedig az RFC 7638 JWK ujjlenyomatot — a JWK szükséges tagjainak szigorú lexikografikus sorrendben szerializált SHA-256 hash-ét (RSA esetén e/kty/n, EC esetén crv/kty/x/y, OKP/Ed25519/X25519 esetén crv/kty/x). Ez az ujjlenyomat az, amit sok rendszer a kulcs "kid" azonosítójaként használ, és a tagok sorrendjének eltévesztése teljesen más hash-t eredményez, pontosan az a fajta hiba, amire egy kézzel írt implementáció hajlamos.
Mivel minden a crypto.subtle-n keresztül, a saját böngészőlapján fut, a privát kulcs anyaga sosem hagyja el az eszközét — nincs szerver, nincs feltöltés és nincs külső API hívás az átalakítás egyetlen pontján sem.