JWK ⇄ PEM-võtmemuundur
Teisendage krüptograafilised võtmed JWK- ja PEM-vormingu vahel, kasutades tõelist Web Crypto API-d, dekodeerige algoritmi/kõverat/suurust ja arvutage välja RFC 7638 JWK pöidlajälg.
Tulemus
JSON-i veebivõtmed (JWK) ja PEM-kodeeritud võtmed kuvatakse JWT teekides, TLS-i tööriistades ja OAuth/OIDC konfiguratsioonis vaheldumisi, kuid nende kahe käsitsi teisendamine tähendab DER-struktuuride base64-dekodeerimist või JSON-i ümbervormindamist – on lihtne eksida. See tööriist teeb tekstiga manipuleerimise asemel teisenduse brauseri tõelise Web Crypto API-ga: kleebitud PEM-plokk imporditakse crypto.subtle.importKey('spki'|'pkcs8', ...) abil ja eksporditakse uuesti JWK-na koos exportKey('jwk', ...) abil; kleebitud JWK imporditakse koos importKey('jwk', ...) abil ja eksporditakse uuesti SPKI või PKCS8 DER-ina, seejärel mähitakse õigesse PEM-päisesse. Kuna brauser ise valideerib ja dekodeerib võtmematerjali, ebaõnnestub valesti vormindatud võti või valesti valitud algoritmi valik valjult, selle asemel, et vaikselt prügi tekitada.
Toetatud algoritmid on RSA (RSASSA-PKCS1-v1_5), EC kõveratel P-256/P-384/P-521 ja – kus brauser neid rakendab – Ed25519 ja X25519. Web Crypto brauseri tugi Ed25519/X25519 jaoks on endiselt mootorite lõikes ebaühtlane, nii et kasutajaagendi stringi põhjal oletamise asemel käivitab tööriist valitud kõvera jaoks tegeliku crypto.subtle.generateKey() sondi ja ütleb teile selgelt, kui seda siin ei toetata, selle asemel et tagastada väljamõeldud tulemus.
Iga konversioon dekodeerib ka võtme tegelikud metaandmed: RSA võtmete puhul mooduli bitipikkus ja räsialgoritm otse CryptoKey objektist; EC- ja OKP-klahvide puhul nimega kõver; ja iga võtme jaoks RFC 7638 JWK pöidlajälg – JWK nõutavate liikmete SHA-256 räsi, mis on järjestatud ranges leksikograafilises järjekorras (e/kty/n RSA jaoks, crv/kty/x/y EC jaoks, crv/kty/x OKP/Ed25519/X25 jaoks). Seda pöidlajälge kasutavad paljud süsteemid võtme "lapse" identifikaatorina ja liikmejärjekorra vale saamine tekitab täiesti erineva räsi, mis on täpselt selline viga, mida käsitsi veeretav rakendus võib teha.
Kuna kõik jookseb teie brauseri vahekaardil oleva crypto.subtle kaudu, ei lahku privaatvõtme materjal kunagi teie seadmest – ei ole serverit, üleslaadimist ega välist API-kutset, mis on seotud konversiooniga.