Übersicht über JWT-Signierungsalgorithmen
Erkunden Sie JSON Web Token (JWT) Signierungsalgorithmen und decken Sie zwei der beliebtesten asymmetrischen Verschlüsselungsansätze ab: RSA und EC. Erfahren Sie mehr über die Vor- und Nachteile jedes Algorithmus und wie Logto sie verwendet, um Ihre JWT-Tokens zu sichern.
Was ist ein JWT?
JSON Web Token (JWT) ist eine kompakte, URL-sichere Möglichkeit, Ansprüche sicher darzustellen. Die Struktur umfasst einen Header, einen Payload und eine Signatur.
Heutzutage sind JWTs weit verbreitet und spielen eine entscheidende Rolle in OAuth 2.0 und OIDC. Aber wie überprüft und vertraut ein Autorisierungsserver einem von einem Client gesendeten JWT? Wie wird das Token vom Aussteller ausgegeben und signiert? In diesem Blogbeitrag sprechen wir über asymmetrische Verschlüsselung und gehen auf die Vor- und Nachteile verschiedener Signierungsalgorithmen ein, die Logto in seinen JWT-Tokens verwendet.
JWT-Struktur
Logto signiert alle JWT-Tokens, einschließlich sowohl ID-Tokens als auch Zugriffstokens. Ein signiertes JWT ist auch als JWS (JSON Web Signature) bekannt. Eine signierte JWT-Struktur besteht aus drei Teilen: dem Header, dem Payload und der Signatur, getrennt durch Punkte (.
).
JOSE (JSON Object Signing and Encryption) Header
Der Header besteht normalerweise aus den folgenden Teilen:
- typ: Der Typ des Tokens, das JWT ist.
- alg: Der verwendete Signierungsalgorithmus, wie RS256 oder ES384.
- kid: Ein Hinweis darauf, welcher Schlüssel zur Sicherung des JWT verwendet wurde.
Payload
Der Payload enthält die Ansprüche, bei denen es sich um Aussagen über eine Entität (typischerweise den Benutzer) und zusätzliche Daten handelt. Ein ID-Token könnte beispielsweise die folgenden Ansprüche enthalten:
Signatur
Die Signatur wird verwendet, um zu überprüfen, dass der Absender des JWT kein Betrüger ist und dass die Nachricht nicht manipuliert wurde. Bei der Verwendung eines signierten JWTs müssen Sie die Token-Signatur überprüfen, um die Integrität des Tokens sicherzustellen. Überprüfen Sie diese Anleitung, wie Sie JWT-Tokens validieren, um Ihre API zu schützen.
Was ist asymmetrische Verschlüsselung?
Asymmetrische Verschlüsselung, auch bekannt als Public-Key-Kryptographie, ein grundlegendes Konzept in der Computersicherheit und Kryptographie, beinhaltet die Verwendung eines einzigartigen Paars verwandter Schlüssel: eines öffentlichen Schlüssels und eines privaten Schlüssels.
Definitionen von öffentlichen und privaten Schlüsseln
- Öffentlicher Schlüssel: Der öffentliche Schlüssel, wie der Name schon sagt, ist für die offene Weitergabe vorgesehen. Im Kontext von JWT und ähnlichen Systemen wird der öffentliche Schlüssel zur Überprüfung von Signaturen verwendet, nicht zur Verschlüsselung. Wenn Daten mit dem privaten Schlüssel signiert werden und der Empfänger den entsprechenden öffentlichen Schlüssel besitzt, kann er validieren, dass die Daten tatsächlich vom Inhaber des privaten Schlüssels signiert wurden und während der Übertragung nicht manipuliert wurden.
- Privater Schlüssel: Im Gegensatz dazu ist der private Schlüssel ein streng gehütetes Geheimnis, das nur seinem rechtmäßigen Besitzer bekannt sein sollte. Im Kontext von JWT wird der private Schlüssel verwendet, um digitale Signaturen zu erstellen, die von jedem mit Zugriff auf den entsprechenden öffentlichen Schlüssel überprüft werden können.
Diese einzigartige Anordnung von Schlüsseln bildet die Grundlage für sichere Datenübertragung und Benutzerauthentifizierungsmechanismen in der digitalen Welt. Lesen Sie diesen Blogbeitrag für weitere Details.
Beliebte JWT-Signaturschlüssel-Algorithmen: RSA vs. EC
Die RSA (Rivest-Shamir-Adelman) und EC (Elliptische Kurve) Algorithmen sind die beiden am häufigsten verwendeten "mathematischen Funktionen" in der asymmetrischen Verschlüsselung.
Als Entwickler haben wir oft die Wahl zwischen diesen Algorithmen, wenn wir mit einem Authentifizierungs-Framework und seinen JWTs umgehen. Aber welcher wäre Ihre Wahl? Lassen Sie uns in die Vor- und Nachteile jedes Einzelnen eintauchen.
RSA-Signierungsalgorithmus (z. B. RSASHA256)
- Vorteile:
- Weit verbreitete Unterstützung: RSA wird durch verschiedene Plattformen und Bibliotheken weitgehend unterstützt und gewährleistet die Kompatibilität in einer Vielzahl von Umgebungen.
- Lange Erfolgsgeschichte: RSA hat eine lange Geschichte verlässlicher Sicherheit und seine Algorithmen sind der kryptographischen Gemeinschaft gut bekannt.
- Nachteile:
- Schlüssellängen: RSA-Schlüssel sind länger, um das gleiche Sicherheitsniveau wie EC zu erreichen, was zu größeren Token-Größen und einem erhöhten Rechenaufwand führt.
- Leistung: RSA-Operationen neigen dazu, langsamer zu sein als EC, was in Hochbelastungsanwendungen nachteilig sein kann.
EC-Signierungsalgorithmus (z. B. ECDSASHA384)
- Vorteile:
- Effizienz: EC bietet überragende Leistung im Vergleich zu RSA, was es ideal für Anwendungen mit begrenzten Ressourcen oder hohen Verkehrsbelastungen macht.
- Kompakte Schlüssellängen: EC-Schlüssel sind deutlich kürzer als ihre RSA-Gegenstücke und bieten dennoch gleichwertige Sicherheitsniveaus. Dies führt zu verringerten Speicher- und Netzwerkanforderungen und beschleunigten kryptographischen Operationen.
- Sicherheit: EC wird für seine robuste Sicherheit hoch angesehen, die durch die komplexe Mathematik elliptischer Kurven gestärkt wird, was sie gegen Brute-Force-Angriffe resistent macht.
- Nachteile:
- Eingeschränkte Unterstützung: Einige ältere Systeme und Bibliotheken könnten eine umfassende EC-Unterstützung fehlen, was zu Kompatibilitätsproblemen führen könnte. Zum Beispiel unterstützt Cloudflare Zero Trust keine mit EC signierten Tokens.
- Komplexität: Die Implementierung von EC kann aufgrund der mathematischen Komplexitäten, die dazugehört, komplizierter sein.
Logtos Wahl der JWT-Signierungsalgorithmen
Logto war schon immer dem höchsten Standard an Sicherheit und Flexibilität verpflichtet und tendiert dazu, die modernsten und leistungsstärksten Lösungen zu verwenden. EC bietet eine gewinnende Kombination aus robuster Sicherheit und rechnerischer Effizienz, was es zu einer idealen Lösung für moderne Authentifizierungs- und Autorisierungsanforderungen macht. Daher ist EC seit der Frühphase unseres Produkts unser Standard-Schlüsselalgorithmus.
Wir haben jedoch auch erkannt, dass die mit EC signierten Tokens nicht mit einigen Drittsystemen und -frameworks kompatibel sind, insbesondere mit älteren. Daher haben wir auch eine Funktion eingeführt, um Ihren JWT-Signaturschlüsselalgorithmus durch Drehen Ihrer privaten Schlüssel zu ändern.
Wenn Sie also das Problem haben, dass Sie aufgrund des nicht unterstützten JWT-Signierungsalgorithmus nicht mit einer Drittanbieterplattform verbinden können, ist es jetzt Zeit, zu wechseln und den RSA-Algorithmus für Ihren neuen privaten Schlüssel auszuwählen.
Diese Funktion hilft auch, die Risiken in Verbindung mit langfristiger Schlüssel-Exposition oder -Kompromittierung zu mindern. Das regelmäßige Drehen privater Schlüssel sollte eine grundlegende Praxis in der Sicherheitsstrategie jeder Organisation sein und wird von Logto dringend empfohlen.
Zusammenfassung: Die häufig verwendeten JWT-Signierungsalgorithmen: RSA und EC
Das Signieren von JWT-Tokens gewährleistet die Integrität und Authentizität der übertragenen Daten. Die Wahl des Signierungsalgorithmus kann erhebliche Auswirkungen auf die Sicherheit, Leistung und Kompatibilität Ihrer Anwendung haben.
Sowohl RSA- als auch EC-Algorithmen sind wesentliche und beliebte Algorithmen in der Kryptographie. Das Verständnis der Vor- und Nachteile und der mathematischen Prinzipien hinter diesen Algorithmen hilft, bessere Entscheidungen für Ihre Anwendung zu treffen, um mit einem Authentifizierungs- und Autorisierungs-Framework zu arbeiten.
Logto wird weiterhin forschen und Ihnen ein sichereres und robusteres Benutzererlebnis bieten.