0Pricing
Cryptology Academy · Lezione

PKCE: protezione dei client pubblici

Comprenda il Proof Key for Code Exchange e come previene gli attacchi di intercettazione dei codici di autorizzazione.

PKCE: protezione dei client pubblici è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.

Intercettazione del codice di autorizzazione

Senza PKCE, le applicazioni mobili sono vulnerabili agli attacchi di intercettazione del codice di autorizzazione. Quando il server di autorizzazione reindirizza il codice di autorizzazione allo schema URI personalizzato registrato dall'app, ad esempio myapp://callback, qualsiasi applicazione dannosa sullo stesso dispositivo che registri lo stesso schema URI può intercettare il reindirizzamento e sottrarre il codice.

Come funziona l'intercettazione

L'attacco funziona nel modo seguente: un'applicazione dannosa registra lo stesso schema URI personalizzato dell'applicazione legittima. Quando il server di autorizzazione reindirizza il codice a myapp://callback, il sistema operativo può presentare entrambe le app come gestori. Se l'utente seleziona l'app dannosa o il sistema operativo la sceglie come predefinita, l'attaccante riceve il codice di autorizzazione e può scambiarlo con i token senza conoscere il segreto del client.

Code verifier PKCE

PKCE (RFC 7636) aggiunge un segreto generato dinamicamente al flusso del codice di autorizzazione. Prima di avviare il flusso, il client genera una stringa crittograficamente casuale di 43-128 caratteri chiamata code verifier. Questa stringa è univoca per ogni richiesta di autorizzazione e non viene mai trasmessa prima della fase di scambio del token.

Calcolo della code challenge

Il client calcola una code challenge a partire dal verifier: code_challenge = BASE64URL(SHA256(code_verifier)). L'utilizzo di SHA256 è il metodo richiesto da RFC 7636; il metodo "plain", che invia direttamente il verifier, non è consigliato. La code challenge è una trasformazione unidirezionale del verifier: conoscere la challenge non consente di ricavare il verifier.

Inclusione della code challenge nell'autorizzazione

La richiesta di autorizzazione include due parametri aggiuntivi: "code_challenge=BASE64URL(SHA256(verifier))&code_challenge_method=S256". Il server di autorizzazione memorizza la code challenge associandola al codice di autorizzazione emesso. In questa fase non viene trasmesso al server alcun segreto che potrebbe essere intercettato.

Scambio del token con il code verifier

Durante lo scambio del token, tramite una richiesta POST all'endpoint dei token, il client include "code_verifier=ORIGINAL_RANDOM_STRING" insieme al codice di autorizzazione. Il server di autorizzazione calcola BASE64URL(SHA256(code_verifier)) e verifica che corrisponda alla code_challenge memorizzata. Solo il client legittimo che ha generato il verifier può superare questo controllo.

Perché l'intercettazione non riesce con PKCE

Se un attaccante intercetta il codice di autorizzazione, riceve solo il codice e la code challenge, che è pubblica. Per scambiare il codice con i token, deve fornire il code verifier. Poiché il verifier è stato generato dal client legittimo e non è stato trasmesso fino alla fase di scambio del token, che avviene in modo sicuro, l'attaccante non può calcolarlo né recuperarlo.

PKCE previene l'iniezione del codice

PKCE previene anche gli attacchi di iniezione del codice di autorizzazione, in cui un attaccante sostituisce nel reindirizzamento un codice valido con un codice rubato. Il code challenge associato al codice rubato non corrisponde al code verifier che il client della vittima presenterà, causando il fallimento dello scambio del token. PKCE fornisce una difesa in profondità contro più vettori di attacco contemporaneamente.

PKCE per tutti i client

Sebbene RFC 7636 sia stato inizialmente descritto come una soluzione per i client pubblici (quelli privi di client secret), l'OAuth Security BCP e OAuth 2.1 richiedono PKCE per tutti i client, inclusi i client confidenziali con client secret. PKCE fornisce una protezione indipendente dall'autenticazione del client, risultando quindi vantaggioso in ogni caso.

PKCE in OAuth 2.1

OAuth 2.1 (draft-ietf-oauth-v2-1) riunisce in un unico documento le best practice di sicurezza dell'OAuth 2.0 Security BCP. Impone PKCE per tutti i flussi del codice di autorizzazione, depreca il flusso implicito e richiede la rotazione dei refresh token. PKCE costituisce di fatto il requisito di base obbligatorio per qualsiasi nuova implementazione di OAuth 2.0.

Note sull'implementazione

Implementare correttamente PKCE richiede di: usare un generatore di numeri casuali crittograficamente sicuro per il code verifier (almeno 32 byte casuali, quindi codificati in base64url), memorizzare il verifier in modo sicuro nel client (non nell'URL o nei log), usare il metodo S256 (non plain) e assicurarsi che il verifier venga eliminato dopo lo scambio del token. La maggior parte delle librerie OAuth moderne gestisce PKCE automaticamente.

Verifica del code verifier di PKCE

In PKCE, qual è la relazione tra il code verifier e il code challenge?

Riepilogo della lezione: sicurezza di PKCE

PKCE (RFC 7636) previene l'intercettazione del codice di autorizzazione associando ogni codice a un code verifier generato dinamicamente e noto solo al client legittimo. Il verifier viene sottoposto ad hashing per produrre il code challenge (inviato pubblicamente). Lo scambio del token richiede il verifier originale. PKCE previene sia gli attacchi di intercettazione sia quelli di iniezione. OAuth 2.1 impone PKCE per tutti i flussi del codice di autorizzazione.

Domande Frequenti

La lezione «PKCE: protezione dei client pubblici» è gratuita?

Sì — il testo completo di «PKCE: protezione dei client pubblici» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.

Cosa imparerò in «PKCE: protezione dei client pubblici»?

Comprenda il Proof Key for Code Exchange e come previene gli attacchi di intercettazione dei codici di autorizzazione. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cryptology Academy?

Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «PKCE: protezione dei client pubblici»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?

Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Flussi OAuth 2.0 e tipi di token
  2. PKCE: protezione dei client pubblici
  3. Claim e token ID di OpenID Connect
  4. Vulnerabilità OAuth e schemi di attacco
← Torna a Cryptology Academy