Nessun upload, 100% locale, nessun account

Articolo

Codificare e decodificare dati in privato

Ogni giorno gli sviluppatori incollano token, payload e credenziali in pagine di codifica e decodifica. Quelle più comode girano su un server, il che significa che i tuoi dati lasciano la macchina per un compito che non lo richiedeva. Questi quattro strumenti funzionano interamente nel browser, quindi i dati restano con te.

Base64: sembra confuso, ma non è segreto

Base64 è una codifica, non una cifratura. Trasforma dati binari in testo capace di sopravvivere al copia e incolla o al transito attraverso sistemi che gestiscono solo caratteri semplici. Chiunque veda la stringa Base64 può ridecodificarla all'originale in un solo passaggio, perciò una stringa che contiene una chiave API, un certificato privato o il corpo di un'email è del tutto leggibile da chi la possiede. Il rischio è che quel valore spesso si nasconda in file di configurazione, data URL o intestazioni di autenticazione e sembri oscuro, il che spinge a incollarlo nel primo decodificatore trovato online. Quel decodificatore riceve il segreto grezzo. Uno strumento che decodifica Base64 localmente ti mostra i byte originali senza che il valore raggiunga mai un server.

Hello! codificato in SGVsbG8h e poi decodificato, a dimostrazione che il Base64 è reversibile da chiunque senza una chiave.

Codifica URL: le query string portano più di quanto pensi

La codifica percentuale permette di inserire spazi, accenti e caratteri riservati in un URL in modo sicuro. Il testo che codifichi o decodifichi è spesso una vera query string proveniente da un'applicazione, e queste trasportano identificatori di sessione, termini di ricerca, indirizzi email, destinazioni di reindirizzamento e a volte parametri firmati. Incollare un URL completo in un encoder remoto consegna tutto questo a una terza parte in un colpo solo, e le query string sono proprio il tipo di valore che finisce nei log del server. Codificare e decodificare nel browser significa che l'URL viene elaborato in memoria sul tuo dispositivo e non viene mai trasmesso mentre ci lavori.

JWT: il payload è firmato, non nascosto

Un JSON Web Token è composto da tre sezioni Base64url unite da punti: un'intestazione, un payload e una firma. La firma dimostra che il token non è stato manomesso, ma non fa nulla per nascondere il payload, che si decodifica in JSON in chiaro contenente identificatori utente, ruoli, scadenze e qualsiasi claim personalizzato aggiunto dall'emittente. Un token valido è anche una credenziale attiva: finché non scade, chiunque lo possieda può agire al posto dell'utente. Incollare un token funzionante in un decodificatore online invia una credenziale attiva a un server che non controlli. Un decodificatore che analizza il token nel tuo browser rivela la stessa intestazione e lo stesso payload senza che quel token lasci mai la pagina.

Le tre parti di un JWT: intestazione leggibile, payload leggibile, e una firma che dimostra l'integrità senza nascondere nulla.

Hashing: l'input conta più del digest

Una funzione hash trasforma qualunque input in un digest di lunghezza fissa, e non puoi invertire il digest per risalire all'input. Questa proprietà rende l'hashing utile per verificare l'integrità di un file o confrontare valori senza memorizzare l'originale. L'insidia sta dal lato dell'input: per calcolare l'hash di una password, di un documento o di un segreto di configurazione, devi fornire il valore reale allo strumento. Se quello strumento gira su un server, l'input sensibile viaggia fin lì anche se viene restituito solo il digest innocuo. Calcolare l'hash localmente mantiene l'input sul tuo dispositivo, così ottieni il digest che ti serve senza esporre la cosa che stavi hashando.

Codifica Base64: mappatura dei byte e padding

Base64 traduce i byte a 8 bit in caratteri a 6 bit raggruppando tre byte di input (24 bit) in quattro valori a 6 bit. Ogni valore a 6 bit corrisponde a un carattere nell'alfabeto Base64 (A-Z, a-z, 0-9, +, /). Poiché il processo richiede input divisibili per 24 bit, gli input corti vengono riempiti con padding: un byte rimanente produce due caratteri di padding (==), due byte rimanenti ne producono uno (=). La variante Base64url, usata nei JSON Web Token (JWT), sostituisce + con - e / con _ per rendere la stringa sicura negli URL, e rimuove completamente il padding =, poiché i caratteri di padding possono causare errori nei parser URI rigorosi. Riconoscere questa distinzione è utile nel debugging della gestione dei token: un JWT che sembra malformato potrebbe semplicemente essere codificato in Base64url anziché in Base64 standard.

Firme JWT: HS256, RS256 e confusione degli algoritmi

La sicurezza di un JSON Web Token dipende interamente dalla sua firma, ovvero il terzo segmento separato da punto. Con HS256 (HMAC-SHA256), il server firma l'intestazione e il payload codificati in Base64url usando una chiave segreta. La funzione di hash SHA-256 garantisce la resistenza alle collisioni: è computazionalmente impossibile produrre un payload modificato che produca la stessa firma senza conoscere la chiave segreta. Con RS256, il server firma usando una chiave privata RSA e verifica con una chiave pubblica. Una vulnerabilità nota chiamata algorithm confusion si verifica quando una libreria server non applica rigorosamente il tipo di algoritmo atteso. Un attaccante può cambiare il campo alg dell'intestazione del token da RS256 a HS256 e firmare il token usando la chiave pubblica del server come segreto HMAC, dato che le chiavi pubbliche sono spesso accessibili. Decodificare l'intestazione del JWT localmente nel browser permette di verificare quale algoritmo è effettivamente specificato, senza esporre il token attivo a sistemi di logging di terze parti.

Strumenti citati in questo articolo

Domande frequenti

Base64 o la codifica URL sono una forma di sicurezza?

No. Entrambe sono codifiche reversibili pensate per il trasporto sicuro dei dati, non per proteggerli. Chiunque possa leggere la stringa codificata la decodifica all'istante, senza chiave né password. Se devi mantenere riservato un valore, cifralo con un algoritmo adeguato e gestisci la chiave separatamente. Tratta qualsiasi valore in Base64 o codificato in percentuale come se fosse scritto in chiaro.

Perché conta dove decodifico un token o calcolo l'hash di una password?

Perché l'input è la parte sensibile. Un JWT valido è una credenziale attiva, e la password di cui calcoli l'hash è il vero segreto. Uno strumento basato su server riceve quell'input grezzo ancor prima di restituire un risultato, il che significa che una copia può essere registrata o conservata in un luogo che non vedi. Uno strumento che gira nel tuo browser esegue la stessa operazione in memoria sulla tua macchina, perciò il token o la password non vengono mai inviati da nessuna parte.