Overzicht van JWT-tekenalgoritmen
Ontdek JSON Web Token (JWT) tekenalgoritmen en bespreek twee van de meest populaire asymmetrische versleutelingsmethoden: RSA en EC. Leer over de voor- en nadelen van elk algoritme en hoe Logto ze gebruikt om je JWT-tokens te beveiligen.
Wat is een JWT?
JSON Web Token (JWT) is een compacte, URL-veilige manier om claims veilig weer te geven. De structuur bevat een header, payload en handtekening.
Tegenwoordig zijn JWT's wijdverbreid en spelen ze een cruciale rol in OAuth 2.0 en OIDC. Maar hoe verifieert en vertrouwt een autorisatieserver een JWT die van een cliënt wordt verzonden? Hoe wordt de token uitgegeven en getekend door de uitgever? In deze blogpost bespreken we asymmetrische versleuteling en onderzoeken we de voor- en nadelen van verschillende tekenalgoritmen die Logto gebruikt in zijn JWT-tokens.
JWT-structuur
Logto ondertekent alle JWT-tokens, inclusief zowel ID-tokens als toegangstokens. Een ondertekende JWT is ook bekend als een JWS (JSON Web Signature). Een ondertekende JWT-structuur bestaat uit drie delen: de header, payload en handtekening, gescheiden door punten (.
).
JOSE (JSON Object Signing and Encryption) header
De header bestaat doorgaans uit de volgende onderdelen:
- typ: Het type token, dat is JWT.
- alg: Het gebruikte tekenalgoritme, zoals RS256 of ES384.
- kid: Een hint die aangeeft welke sleutel is gebruikt om de JWT te beveiligen.
Payload
De payload bevat de claims, dit zijn uitspraken over een entiteit (meestal de gebruiker) en aanvullende gegevens. Een ID-token kan bijvoorbeeld de volgende claims bevatten:
Handtekening
De handtekening wordt gebruikt om te verifiëren dat de afzender van de JWT geen bedrieger is en dat het bericht niet is gewijzigd. Bij het gebruik van een ondertekende JWT moet je de tokensignatuur verifiëren om de integriteit van de token te waarborgen. Bekijk deze gids over hoe je JWT-tokens kunt valideren om je API te beschermen.
Wat is asymmetrische versleuteling?
Asymmetrische versleuteling, ook bekend als public-key cryptografie, een fundamenteel concept in computerbeveiliging en cryptografie, houdt het gebruik in van een uniek paar gerelateerde sleutels: een openbare sleutel en een privésleutel.
Definities van openbare en privésleutels
- Openbare sleutel: De openbare sleutel, zoals de naam al suggereert, is ontworpen voor open deling. In de context van JWT en vergelijkbare systemen wordt de openbare sleutel gebruikt voor handtekeningverificatie, niet voor versleuteling. Wanneer gegevens worden ondertekend met de privésleutel en de ontvanger in het bezit is van de overeenkomstige openbare sleutel, kunnen ze valideren dat de gegevens inderdaad door de houder van de privésleutel zijn ondertekend en tijdens de overdracht niet zijn gemanipuleerd.
- Privésleutel: In tegenstelling daarmee is de privésleutel een goed bewaard geheim dat alleen bij de rechtmatige eigenaar bekend zou moeten zijn. In de context van JWT wordt de privésleutel gebruikt om digitale handtekeningen te creëren die kunnen worden geverifieerd door iedereen met toegang tot de overeenkomstige openbare sleutel.
Deze unieke regeling van sleutels vormt de basis van veilige gegevensoverdracht en gebruikersauthenticatiemechanismen in de digitale wereld. Bekijk deze blogpost voor meer details.
Populaire JWT-tekenalgoritmen: RSA vs EC
De RSA (Rivest-Shamir-Adelman) en EC (Elliptic Curve) algoritmen zijn de twee meest gebruikte 'wiskundige functies' in asymmetrische versleuteling.
Als ontwikkelaars worden we vaak voor een keuze gesteld tussen deze algoritmen bij het omgaan met een auth-framework en zijn JWT's. Maar welke zou je kiezen? Laten we de voor- en nadelen van elk bekijken.
RSA-tekenalgoritme (bijv. RSASHA256)
- Voordelen:
- Wijdverspreide ondersteuning: RSA wordt breed ondersteund op verschillende platforms en bibliotheken, waardoor compatibiliteit in een breed scala aan omgevingen mogelijk is.
- Lange staat van dienst: RSA heeft een lange geschiedenis van betrouwbare beveiliging en zijn algoritmen worden goed begrepen door de cryptografische gemeenschap.
- Nadelen:
- Sleutelgroottes: RSA-sleutels zijn langer om hetzelfde beveiligingsniveau als EC te bereiken, wat resulteert in grotere tokenformaten en verhoogde computationele overhead.
- Prestaties: RSA-bewerkingen zijn meestal langzamer dan EC, wat een nadeel kan zijn bij toepassingen met veel verkeer.
EC-tekenalgoritme (bijv. ECDSASHA384)
- Voordelen:
- Efficiëntie: EC biedt superieure prestaties vergeleken met RSA, waardoor het ideaal is voor toepassingen met beperkte bronnen of hoge verkeersbelasting.
- Compacte sleutelgroottes: EC-sleutels zijn veel korter dan hun RSA-tegenhangers terwijl ze gelijkwaardige beveiligingsniveaus bieden. Dit leidt tot verminderde opslag- en netwerkvereisten en versnelde cryptografische bewerkingen.
- Beveiliging: EC staat hoog aangeschreven om zijn robuuste beveiliging, versterkt door de ingewikkelde wiskunde achter elliptische krommen, waardoor het bestand is tegen brute-force aanvallen.
- Nadelen:
- Beperkte ondersteuning: Sommige oudere systemen en bibliotheken kunnen mogelijk niet volledig EC ondersteunen, wat mogelijk compatibiliteitsproblemen veroorzaakt. Bijvoorbeeld Cloudflare Zero Trust ondersteunt geen met EC ondertekende tokens.
- Complexiteit: Het implementeren van EC kan ingewikkelder zijn vanwege de betrokken wiskundige complexiteiten.
Logto's keuze voor JWT-tekenalgoritmen
Logto heeft zich altijd ingezet voor de hoogste normen van beveiliging en flexibiliteit en heeft de neiging om de meest moderne en performante oplossingen in zijn kern te gebruiken. EC biedt een winnende combinatie van robuuste beveiliging en computationele efficiëntie, wat het een ideale keuze maakt voor moderne authenticatie- en autorisatiebehoeften. Daarom is EC ons standaard tekenalgoritme sinds de vroege fase van ons product.
We hebben echter ook erkend dat de met EC ondertekende tokens niet compatibel zijn met sommige externe systemen en frameworks, vooral die van de oudere generatie. Daarom hebben we ook een functie geïntroduceerd om je JWT-tekenalgoritme te veranderen door je privésleutels te roteren.
Dus als je het probleem ondervindt dat je niet kunt verbinden met een extern platform vanwege het niet-ondersteunde JWT-tekenalgoritme, is het nu tijd om te roteren en het RSA-algoritme voor je nieuwe privésleutel te selecteren.
Deze functie helpt ook de risico's te verminderen die gepaard gaan met lange-termijnsleutelblootstelling of -compromittatie. Het regelmatig roteren van privésleutels moet een fundamentele praktijk zijn in de beveiligingsstrategie van elke organisatie en wordt sterk aanbevolen door Logto.
Samenvatting: De vaak gebruikte JWT-tekenalgoritmen: RSA en EC
Het ondertekenen van JWT-tokens zorgt voor de integriteit en authenticiteit van de verzonden gegevens. De keuze van het tekenalgoritme kan een significante invloed hebben op de beveiliging, prestaties en compatibiliteit van je toepassing.
Zowel RSA als EC-algoritmen zijn essentiële en populaire algoritmen in de cryptografie. Het begrijpen van de voor- en nadelen en de wiskundige principes achter deze algoritmen helpt bij het nemen van betere beslissingen voor je toepassing om samen te werken met een authenticatie- en autorisatieframework.
Logto zal blijven verkennen en je een veiligere en robuustere gebruikerservaring bieden.