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

Introduzione agli algoritmi di firma EC e RSA in JWT

Scopri le nozioni essenziali della crittografia asimmetrica e comprendi i pro e i contro dei due popolari algoritmi di chiave di firma JWT - EC e RSA.

Charles
Charles
Developer

Background

Nel mondo digitale, la ricerca di una maggiore sicurezza nella trasmissione dei dati è rimasta costante ed in continua evoluzione. Oggi, i JSON Web Token (JWT) sono 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 token JWT inviato da un client? Come viene emesso e firmato il token dall'emittente? In questo post del blog, parleremo di crittografia asimmetrica e approfondiremo i pro e i contro dei diversi algoritmi di firma che Logto utilizza nei suoi token JWT.

Comprendere la crittografia asimmetrica

La crittografia asimmetrica, nota anche come crittografia a chiave pubblica, un concetto fondamentale nella sicurezza informatica e nella crittografia, implica l'uso di un paio unico di chiavi correlate: una chiave pubblica e una chiave privata. I ruoli di queste chiavi possono sembrare controintuitivi all'inizio, ma sono essenziali per la sicurezza dei dati.

  • Chiave pubblica: La chiave pubblica, come suggerisce il nome, è progettata per la condivisione aperta. Nel contesto dei JWT e dei sistemi simili, la chiave pubblica viene utilizzata per la verifica della firma, non per la crittografia. Quando i dati sono firmati con la chiave privata e il destinatario possiede la corrispondente chiave pubblica, possono convalidare che i dati sono stati effettivamente firmati dal titolare della chiave privata e non sono stati manomessi durante la trasmissione. Tuttavia, nell'uso tradizionale della crittografia asimmetrica, come HTTPS, la chiave pubblica viene utilizzata per la crittografia, e i dati crittografati possono essere decrittati solo dal server di destinazione che possiede la chiave privata associata.
  • Chiave privata: Al contrario, la chiave privata è un segreto strettamente custodito che dovrebbe essere noto solo al suo legittimo proprietario. Nel contesto dei JWT, la chiave privata viene utilizzata per creare firme digitali che possono essere verificate da chiunque abbia accesso alla corrispondente chiave pubblica. Inoltre, nel contesto della crittografia asimmetrica più tradizionale, la chiave privata viene effettivamente utilizzata per la decrittazione, consentendo l'accesso ai dati che sono stati crittografati in modo sicuro con la chiave pubblica.

Questo particolare schema di chiavi, dove la chiave pubblica verifica o crittografa i dati e la chiave privata li firma o decrittografa, costituisce la base dei meccanismi di trasmissione sicura dei dati e di autenticazione degli utenti nel mondo digitale. Controlla questo post del blog per ulteriori dettagli.

Algoritmi di crittografia asimmetrica: RSA vs EC

Gli algoritmi RSA (Rivest-Shamir-Adelman) e EC (Elliptic Curve) sono i due "funzioni matematiche" più comunemente utilizzate nella crittografia asimmetrica. Come sviluppatori, ci viene spesso presentata una scelta tra questi algoritmi quando gestiamo un framework di autenticazione e i suoi JWT. Ma quale sarebbe la tua scelta? Esploriamo i pro e i contro di ciascuno.

Algoritmo di firma RSA

  • Pro:
    1. Ampio supporto: RSA è ampiamente supportato su varie piattaforme e librerie, garantendo compatibilità in una vasta 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 raggiungere lo stesso livello di sicurezza dell'EC, portando a token di dimensioni maggiori e a un maggiore sovraccarico computazionale.
    2. Prestazioni: Le operazioni RSA tendono ad essere più lente dell'EC, il che può essere uno svantaggio nelle applicazioni ad alto traffico.

Algoritmo di firma EC

  • Pro:
    1. Efficienza: EC vanta 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 molto più corte rispetto alle loro controparti RSA, offrendo livelli di sicurezza equivalenti. Questo porta a requisiti ridotti di archiviazione e rete e a operazioni crittografiche accelerate.
    3. Sicurezza: EC è altamente considerato per la sua robusta sicurezza, corroborata dalla matematica complessa dietro le curve ellittiche, rendendolo resiliente agli attacchi di forza bruta.
  • Contro:
    1. Supporto limitato: Alcuni sistemi e librerie più vecchie potrebbero non supportare completamente l'EC, causando potenzialmente problemi di compatibilità. Ad esempio, Cloudflare Zero Trust non supporta i token firmati EC.
    2. Complessità: Implementare l'EC può essere più intricato a causa delle complessità matematiche coinvolte.

La scelta degli algoritmi di firma JWT di Logto

Logto è sempre stato impegnato ai più alti standard di sicurezza e flessibilità e tende a utilizzare le soluzioni più moderne ed efficienti al suo interno. EC offre un'eccezionale combinazione di sicurezza robusta ed efficienza computazionale, rendendolo ideale per le moderne esigenze di autenticazione e autorizzazione. Pertanto, EC è stato il nostro algoritmo di firma predefinito sin dalle prime fasi del nostro prodotto.

Tuttavia, abbiamo anche ricevuto numerosi feedback dai nostri utenti, che i token firmati EC non sono compatibili con alcuni sistemi e framework di terze parti, specialmente quelli legacy. Pertanto, stiamo lavorando per fornire il supporto per l'algoritmo RSA, garantendo che Logto rimanga adattabile e versatile per tutte le tue esigenze di autenticazione.

Nel prossimo rilascio, Logto Cloud introdurrà una funzionalità “Rotazione della chiave privata”, che ti consente di creare una nuova chiave privata OIDC e una chiave cookie nel tuo tenant. (La chiave privata è utilizzata per firmare i tuoi token JWT e la chiave cookie per firmare i tuoi cookie.)

Screenshot dell'interfaccia utente della console per ruotare le chiavi OIDC

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

Inoltre, durante la rotazione della tua chiave di firma JWT, forniremo anche un'opzione per selezionare l'algoritmo di firma della chiave tra EC e RSA. Quindi, se stai affrontando il problema di non riuscire a 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.

Poiché questa impostazione si trova nella pagina delle impostazioni del tenant, l'interfaccia utente non sarà disponibile per gli utenti OSS. Ma non preoccuparti, puoi comunque ottenere questo aggiornando all'ultima release ed eseguendo i seguenti comandi CLI nella directory root di Logto.

In sintesi

La crittografia asimmetrica aiuta a proteggere i tuoi token JWT nel tuo sistema di autenticazione. Gli algoritmi EC e RSA sono algoritmi essenziali e popolari nella crittografia. Comprendere i pro e i contro e i principi matematici dietro questi algoritmi aiuta a prendere decisioni migliori per la tua applicazione per lavorare con un framework di autenticazione e autorizzazione.

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