JOSE
JOSE is de IETF-familie van standaarden - JWS, JWE, JWK, JWA - voor het ondertekenen en versleutelen van gegevens in JSON-formaat.
JOSE (JSON Object Signing and Encryption) is de verzamelnaam die de IETF gaf aan een groep samenhangende standaarden voor het beveiligen van gegevens in JSON, in plaats van in oudere binaire formaten zoals CMS (Cryptographic Message Syntax). De IETF-werkgroep JOSE kreeg als opdracht een veilig objectformaat op basis van JSON te ontwikkelen, om het toevoegen van objectgebaseerde beveiliging aan applicaties die al met JSON werken te vereenvoudigen. JOSE is niet zelf een specificatie: het is de familienaam, en elk lid van de familie regelt een deeltaak - ondertekenen, versleutelen, of het beschrijven van sleutels en algoritmen.
Vier specificaties vallen onder de naam JOSE:
- JSON Web Signature (JWS): beschermt integriteit en authenticiteit - het bewijst dat gegevens niet zijn gewijzigd en toont wie heeft ondertekend.
- JSON Web Encryption (JWE): beschermt vertrouwelijkheid - het verbergt de inhoud zodat alleen de beoogde ontvanger die kan lezen.
- JSON Web Key (JWK): representeert een cryptografische sleutel zelf - publiek of privé, RSA of elliptische curve - als JSON-object, zodat sleutels in hetzelfde formaat kunnen worden gepubliceerd of uitgewisseld als de rest.
- JSON Web Algorithms (JWA): benoemt welke cryptografische algoritmen JWS en JWE mogen gebruiken, en hoe hun identifiers in een header verschijnen.
JSON Web Token (JWT) bouwt hierop voort in plaats van er onderdeel van te zijn: een JWT is een verzameling claims die binnen een JWS- of JWE-container wordt vervoerd. Die combinatie is wat daadwerkelijk terugkomt in OAuth 2.0-accesstokens en OpenID Connect-ID-tokens, en het is ook de basis waarop wallet-gerichte formaten zoals SD-JWT verder bouwen.
Let op: JOSE wordt vaak losjes gebruikt alsof het één formaat is waar je naar kunt wijzen. Het geeft zelf nooit een certificaat of handtekening uit - wat een systeem daadwerkelijk implementeert is JWS, JWE, JWK of JWA, elk met een eigen header, algoritmelijst en coderingsregels.