JSON Web Key (JWK)

Een JSON Web Key (JWK) is een cryptografische sleutel geschreven als JSON-tekst, gebruikt om JWT's en andere JOSE-tokens te ondertekenen en verifiëren.

Een JSON Web Key (JWK) is een JSON-object dat een cryptografische sleutel weergeeft: het type, de waarde en waarvoor de sleutel gebruikt mag worden. In plaats van een binair sleutelbestand reist de sleutel als gewone JSON-tekst - hetzelfde formaat dat JSON Web Signature (JWS), JSON Web Encryption (JWE) en de rest van de JOSE-familie gebruiken, zodat een systeem dat al JSON verwerkt een sleutel kan lezen zonder aparte library voor een binair certificaatformaat zoals X.509.

Een JWK bevat een klein aantal standaardvelden naast het sleutelmateriaal zelf:

  • kty (key type): de cryptografische familie - RSA, EC (elliptische kromme) of oct (een symmetrische sleutel)
  • use of key_ops: het beoogde doel, zoals ondertekenen ("sig") of versleutelen ("enc"), of een fijnmaziger lijst van operaties zoals sign, verify, encrypt of decrypt
  • alg: het specifieke algoritme waarmee de sleutel bedoeld is te worden gebruikt, zoals benoemd in JSON Web Algorithms (JWA)
  • kid (key ID): een label waarmee een header, zoals een JWS-header, naar de juiste sleutel kan verwijzen als er meerdere beschikbaar zijn

Meerdere sleutels worden meestal samen gepubliceerd als een JWK Set: een JSON-object met een enkel keys-veld dat een array van JWK's bevat. Zo publiceert een identity provider of wallet provider doorgaans zijn actuele publieke sleutels op een jwks_uri, zodat een verifierende partij bij een JSON Web Token (JWT) de bijbehorende publieke sleutel kan opzoeken via de kid, zonder dat beide partijen sleutels buitenom hoeven uit te wisselen.

Let op: een JWK kan net zo goed een private sleutel bevatten als een publieke. Een JWK Set op een publieke URL publiceren is alleen veilig omdat die bedoeld is om alleen publieke sleutels te bevatten - een private JWK hoort in een beveiligde opslag, nooit op een publiek eindpunt.

Veelgestelde vragen

Terug naar begrippenlijst