0

JWK ⇄ PEM-avainmuunnin

Muunna salausavaimet JWK- ja PEM-muodon välillä käyttämällä todellista Web Crypto API:ta, pura algoritmi/käyrä/koko ja laske RFC 7638 JWK -peukalojälki.

Buy Me a Coffee at ko-fi.com
Käsitellään... 0%
Jäsennysavain
Muuntava muoto
Peukalonjälkien laskeminen
Valmis

Tulos

JSON-verkkoavaimet (JWK) ja PEM-koodatut avaimet näkyvät vaihtokelpoisesti JWT-kirjastoissa, TLS-työkaluissa ja OAuth/OIDC-määrityksessä, mutta muuntaminen näiden kahden välillä käsin tarkoittaa base64-dekoodaamista DER-rakenteista tai JSONin uudelleenalustamista – helppo erehtyä. Tämä työkalu tekee muunnoksen selaimen todellisella Web Crypto API:lla tekstinkäsittelyn sijaan: liitetty PEM-lohko tuodaan koodilla crypto.subtle.importKey('spki'|'pkcs8', ...) ja viedään uudelleen JWK-muodossa exportKey('jwk', ...); liimattu JWK tuodaan importKeyllä('jwk', ...) ja viedään uudelleen SPKI- tai PKCS8 DER -muodossa ja kääritään sitten oikeaan PEM-otsikkoon. Koska selain itse vahvistaa ja purkaa avainmateriaalin, virheellisesti muotoiltu avain tai väärän algoritmin valinta epäonnistuu äänekkäästi sen sijaan, että se tuottaisi hiljaa roskaa.

Tuetut algoritmit ovat RSA (RSASSA-PKCS1-v1_5), EC P-256/P-384/P-521-käyrillä ja – jos selain toteuttaa ne – Ed25519 ja X25519. Web Crypton Ed25519/X25519-selaimen tuki on edelleen epäjohdonmukaista eri moottoreiden välillä, joten sen sijaan, että työkalu arvaisi käyttäjäagenttimerkkijonon perusteella, työkalu suorittaa todellisen crypto.subtle.generateKey()-koettimen valitulle käyrälle ja kertoo selkeästi, jos sitä ei tueta tässä, sen sijaan, että se palauttaisi tekotuloksen.

Jokainen muunnos purkaa myös avaimen todelliset metatiedot: RSA-avaimille moduulibitin pituus ja hash-algoritmi suoraan CryptoKey-objektista; EC- ja OKP-näppäimille nimetty käyrä; ja jokaiselle avaimelle RFC 7638 JWK:n peukalonjälki — SHA-256-tiiviste JWK:n vaadituista jäsenistä tiukassa leksikografisessa järjestyksessä (e/kty/n RSA:lle, crv/kty/x/y EC:lle, crv/kty/x OKP/Ed25519/X25:lle). Tätä peukalonjälkeä monet järjestelmät käyttävät avaimen "lapsi"-tunnisteena, ja jäsenjärjestyksen saaminen väärin tuottaa täysin erilaisen tiivisteen, mikä on juuri sellainen virhe, johon käsin rullattu toteutus on altis.

Koska kaikki kulkee selaimesi crypto.subtle-välilehden kautta, yksityisen avaimen materiaali ei koskaan poistu laitteestasi – muunnoksen missään vaiheessa ei ole mukana palvelinta, latausta tai ulkoista API-kutsua.