• sicurezza
  • crittografia
  • jws
  • asimmetrico
  • ec
  • rsa
  • chiave pubblica
  • chiave privata
  • token
  • firma jwt

Panoramica degli algoritmi di firma JWT

Esplora gli algoritmi di firma JSON Web Token (JWT), coprendo due degli approcci di crittografia asimmetrica più popolari: RSA e EC. Scopri i pro e i contro di ciascun algoritmo e come Logto li utilizza per proteggere i tuoi token JWT.

Charles
Charles
Developer

Che cos'è un JWT?

JSON Web Token (JWT) è un modo compatto e sicuro per rappresentare le dichiarazioni. La struttura include un'intestazione, un token e una firma.

Oggigiorno, i JWT sono stati ampiamente adottati e svolgono un ruolo cruciale in OAuth 2.0 e OIDC. Ma come fa un server di autorizzazione a verificare e fidarsi di un JWT inviato da un client? Come viene emesso e firmato il token dall'emittente? In questo post sul blog, parleremo della crittografia asimmetrica e approfondiremo i pro e i contro dei diversi algoritmi di firma che Logto utilizza nei propri token JWT.

Struttura del JWT

Logto firma tutti i token JWT, inclusi sia i token ID che i token di accesso. Un JWT firmato è anche conosciuto come JWS (JSON Web Signature). Una struttura di JWT firmata è composta da tre parti: l'intestazione, il payload e la firma, separati da punti (.).

Intestazione JOSE (JSON Object Signing and Encryption)

L'intestazione tipicamente consiste nelle seguenti parti:

  • typ: Il tipo di token, che è JWT.
  • alg: L'algoritmo di firma utilizzato, come RS256 o ES384.
  • kid: Un'indicazione che mostra quale chiave è stata utilizzata per rendere sicuro il JWT.

Payload

Il payload contiene le dichiarazioni, che sono affermazioni su un'entità (tipicamente, l'utente) e ulteriori dati. Ad esempio, un token ID potrebbe contenere le seguenti affermazioni:

Firma

La firma viene utilizzata per verificare che il mittente del JWT non sia un impostore e che il messaggio non sia stato manomesso. Quando si utilizza un JWT firmato, è necessario verificare la firma del token per garantire l'integrità del token. Consultare questa guida su come validare i token JWT per proteggere la tua API.

Che cos'è la crittografia asimmetrica?

La crittografia asimmetrica, anche conosciuta come crittografia a chiave pubblica, un concetto fondamentale nella sicurezza informatica e nella crittografia, coinvolge l'uso di una coppia univoca di chiavi correlate: una chiave pubblica e una chiave privata.

Definizioni di chiavi pubbliche e private

  • Chiave pubblica: La chiave pubblica, come suggerisce il nome, è progettata per la condivisione aperta. Nel contesto del JWT e di sistemi simili, la chiave pubblica viene utilizzata per la verifica della firma, non per la crittografia. Quando i dati vengono firmati con la chiave privata e il destinatario possiede la chiave pubblica corrispondente, può validare che i dati siano stati effettivamente firmati da chi possiede la chiave privata e non siano stati manomessi durante la trasmissione.
  • Chiave privata: Al contrario, la chiave privata è un segreto ben custodito che dovrebbe essere noto solo al suo legittimo proprietario. Nel contesto del JWT, la chiave privata viene utilizzata per creare firme digitali che possono essere verificate da chiunque abbia accesso alla chiave pubblica corrispondente.

Questa disposizione unica di chiavi costituisce la base dei meccanismi di trasmissione sicura dei dati e di autenticazione degli utenti nel mondo digitale. Consulta questo post sul blog per ulteriori dettagli.

Algoritmi di chiave di firma JWT popolari: RSA vs EC

Gli algoritmi RSA (Rivest-Shamir-Adelman) e EC (Elliptic Curve) sono le due “funzioni matematiche” più comunemente utilizzate nella crittografia asimmetrica.

Come sviluppatori, ci troviamo spesso di fronte a una scelta tra questi algoritmi quando ci occupiamo di un framework di autenticazione e dei suoi JWT. Ma quale sarebbe la tua scelta? Approfondiamo i pro e i contro di ciascuno.

Algoritmo di firma RSA (ad es. RSASHA256)

  • Pro:
    1. Supporto diffuso: RSA è ampiamente supportato su varie piattaforme e librerie, garantendo la compatibilità in un'ampia gamma di ambienti.
    2. Lunga storia: RSA ha una lunga storia di sicurezza affidabile e i suoi algoritmi sono ben compresi dalla comunità crittografica.
  • Contro:
    1. Dimensioni delle chiavi: le chiavi RSA sono più lunghe per ottenere lo stesso livello di sicurezza di EC, risultando in dimensioni di token più grandi e maggiore sovraccarico computazionale.
    2. Prestazioni: le operazioni RSA tendono ad essere più lente di EC, il che può essere uno svantaggio nelle applicazioni ad alto traffico.

Algoritmo di firma EC (ad es. ECDSASHA384)

  • Pro:
    1. Efficienza: EC offre prestazioni superiori rispetto a RSA, rendendolo ideale per applicazioni con vincoli di risorse o carichi di traffico elevati.
    2. Dimensioni compatte delle chiavi: le chiavi EC sono significativamente più corte delle loro controparti RSA fornendo al contempo livelli di sicurezza equivalenti. Ciò porta a requisiti di archiviazione e rete ridotti e operazioni crittografiche accelerate.
    3. Sicurezza: l'EC è fortemente considerato per la sua robusta sicurezza, rinforzato dalla matematica intricata legata alle curve ellittiche, rendendolo resiliente agli attacchi di forza bruta.
  • Contro:
    1. Supporto limitato: alcuni sistemi e librerie più vecchi potrebbero non supportare completamente EC, potenzialmente causando problemi di compatibilità. Ad esempio, Cloudflare Zero Trust non supporta i token firmati EC.
    2. Complessità: implementare EC può essere più complesso a causa delle complessità matematiche coinvolte.

Scelta di Logto degli algoritmi di firma JWT

Logto è sempre stato impegnato nei più alti standard di sicurezza e flessibilità e tende ad utilizzare le soluzioni più moderne e performanti nel suo nucleo. EC offre una combinazione vincente di sicurezza robusta ed efficienza computazionale, rendendolo un'alternativa ideale per le moderne esigenze di autenticazione e autorizzazione. Pertanto, EC è stato il nostro algoritmo di firma predefinito fin dalle prime fasi del nostro prodotto.

Tuttavia, abbiamo anche riconosciuto che i token firmati EC non sono compatibili con alcuni sistemi e framework di terze parti, specialmente quelli più datati. Pertanto, abbiamo anche introdotto una funzionalità per modificare il tuo algoritmo di firma JWT ruotando le tue chiavi private.

Screenshot di Logto Console UI per ruotare le tue chiavi private

Quindi, se stai affrontando il problema di non poter connetterti a una piattaforma di terze parti a causa dell'algoritmo di firma JWT non supportato, ora è il momento di ruotare e selezionare l'algoritmo RSA per la tua nuova chiave privata.

Questa funzionalità aiuta anche a mitigare i rischi associati all'esposizione o al compromesso a lungo termine delle chiavi. La rotazione regolare delle chiavi private dovrebbe essere una pratica fondamentale nella strategia di sicurezza di qualsiasi organizzazione ed è fortemente raccomandata da Logto.

Riepilogo: Gli algoritmi di firma JWT più comunemente usati: RSA e EC

Firmare i token JWT assicura l'integrità e l'autenticità dei dati trasmessi. La scelta dell'algoritmo di firma può avere un impatto significativo sulla sicurezza, efficienza e compatibilità della tua applicazione.

Sia gli algoritmi RSA che EC sono algoritmi essenziali e popolari in crittografia. Comprendere i pro e i contro e i principi matematici alla base di questi algoritmi aiuta a prendere decisioni migliori per far funzionare la tua applicazione con un framework di autenticazione e autorizzazione.

Logto continuerà ad esplorare e offrirti un'esperienza utente più sicura e robusta.