Italiano

Strumenti per sviluppatori · Codificatore e decodificatore Base64

Base64 non è crittografia: perché un segreto codificato è leggibile da chiunque

· Perché è importante

base64 sicurezza codifica

Testo codificato Base64 decodificato istantaneamente senza chiave, mostrando il contenuto in testo normale
Illustrazione vettoriale originale ToolAcre

Base64 non nasconde nulla: chiunque abbia la stringa può decodificarla istantaneamente, senza chiave. Questo post spiega la differenza tra codifica, crittografia e hashing e cosa fare quando trovi segreti Base64 in un repository.

Il valore di configurazione che sembrava criptato e decodificato in una password del database: una scoperta concreta e la rapidità con cui si inverte

Trovare Base64 in un file di configurazione crea un falso senso di sicurezza. Uno sviluppatore scopre una password del database che appare come una sequenza codificata come dGlnZXJfZGF0YWJhc2VfYWRtaW4, presuppone che sia crittografata e la inserisce nel repository insieme al codice dell'applicazione. Settimane dopo, un controllo di sicurezza rivela il testo in chiaro: tigre_database_admin.

Base64 non nasconde nulla; è una codifica, non una crittografia. La stessa password invertita diventa nuovamente grezza istantaneamente nel browser, senza chiave, senza calcoli, senza ritardi. Questo post spiega perché esiste la codifica, come differisce fondamentalmente dalla crittografia e dall'hashing e cosa succede realmente quando qualcuno trova segreti Base64 in una cronologia impegnata.

Codifica, crittografia e hashing: tre compiti diversi: cosa garantisce ciascuno e quale necessita di una chiave

La confusione nasce perché Base64 sembra una protezione. Un essere umano non può dare un'occhiata a dGlnZXJfZGF0YWJhc2VfYWRtaW4e leggere Tiger_database_admin. Sembra oscurato finché non lo passi attraverso un decodificatore. Quell’offuscamento a livello superficiale sembra sicurezza, ma non lo è. Base64 è stato progettato per risolvere un problema completamente diverso: spostare dati binari arbitrari attraverso canali di solo testo. La posta elettronica, i moduli Web meno recenti e i sistemi di protocollo di linea non potevano trasportare byte grezzi. Base64 converte i byte in caratteri ASCII stampabili in modo che i dati possano passare intatti attraverso quei canali.

Una volta arrivati ​​i dati, il destinatario li decodifica in byte. La codifica e la decodifica sono ugualmente semplici; non richiedono chiavi, né entropia, né libreria crittografica. La codifica, la crittografia e l'hashing hanno tre scopi distinti e offrono tre diverse garanzie. La codifica trasforma i dati in una rappresentazione diversa in modo che possano passare attraverso un canale specifico o essere utilizzati in un contesto specifico. Base64, codifica URL, rappresentazione esadecimale e persino virgolette di escape in JSON sono tutte codifiche. Sono reversibili da chiunque e non richiedono alcuna chiave segreta.

Perché Base64 esiste: trasporto sicuro di byte attraverso canali di testo, mai riservatezza

L'obiettivo è la compatibilità dei formati, non la riservatezza. La crittografia, al contrario, richiede una chiave nota solo alle parti autorizzate. Solo qualcuno con la chiave corretta può trasformare il testo cifrato in testo in chiaro. Senza la chiave il messaggio rimane opaco anche per qualcuno abbastanza sofisticato da attaccarlo. Per definizione l'hashing è unidirezionale: l'hash crittografico di una password non può essere assolutamente invertito. Viene utilizzato per verificare che una password corrisponda a un hash memorizzato senza memorizzare la password stessa.

Un segreto Kubernetes denominato database-password che contiene base64: dGlnZXJfZGF0YWJhc2VfYWRtaW4 non è effettivamente segreto. Base64 è la codifica predefinita utilizzata da Kubernetes per l'archiviazione, non per la protezione. Chiunque abbia accesso al database YAML o al database etcd può decodificare il valore in pochi secondi. Le variabili di ambiente con chiavi API codificate base64 in uno script di avvio affrontano lo stesso problema. Un'intestazione di autenticazione di base che invia Autorizzazione: Base64_nomeutente:password a un server può essere decodificata da qualsiasi proxy, strumento di monitoraggio o osservatore di rete tra il client e il server.

Esempio realizzato: decodificare una stringa "segreta" nel browser: un incolla, una decodifica e il testo in chiaro, senza il coinvolgimento del server

Se il canale è HTTP anziché HTTPS, l'esposizione è ancora maggiore. Base64 in questi contesti è una falsa pista: il vero segreto è già stato compromesso essendo stato archiviato o trasmesso in una forma recuperabile. Un esempio concreto rende il problema concreto. Supponiamo che una chiave API per un servizio di terze parti venga visualizzata in un file di configurazione come YXBpa2V5XzEyMzQ1Njc4OTAx. Copia questa stringa nel codificatore e decodificatore Base64 nel tuo browser, incollala nel campo di input e fai clic su Decodifica.

Lo strumento restituisce apikey_1234567890. Ciò è avvenuto istantaneamente, nel tuo browser, senza alcun server contattato, nessuna chiave richiesta e nessuna autenticazione eseguita. L'intera operazione richiede meno di un secondo. Supponiamo ora che la stessa chiave venga trovata in un repository GitHub pubblico da un utente malintenzionato. Lo decodificano altrettanto facilmente, con qualunque strumento preferiscano, e lo utilizzano per accedere al servizio. Se la stringa rimane nascosta in un repository, viaggia su una rete o appare nei log delle applicazioni, può essere rivelata con un'operazione banale disponibile in ogni linguaggio di programmazione e in strumenti browser come questo.

Dove si presenta questo errore: segreti Kubernetes, file .env, intestazioni di autenticazione di base e risorse di app mobili

L'errore appare ovunque perché Base64 è così comune da essere associato all'offuscamento per prossimità. Gli sviluppatori vedono i dati codificati Base64, deducono che qualcuno pensava che fossero importanti e lasciano i segreti in quel formato. Un file .env contenente API_KEY=VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0 sembra più sicuro a un ingegnere junior di API_KEY=Questo non è realmente un segreto anche se la decodifica richiede un'operazione. Le applicazioni mobili raggruppano token con codifica Base64 in risorse che qualsiasi decompilatore può estrarre e decodificare. I backup del database contengono password con codifica Base64 in campi destinati a essere cercati, non protetti.

In ogni caso qualcuno ha scambiato la codifica per la crittografia e ha creato un archivio di segreti in testo semplice che risulta essere formattato in un modo che richiede un passaggio aggiuntivo per la lettura. Cosa fare quando vengono scoperti i segreti Base64 dipende dal contesto.

Cosa fare invece: gestori segreti, crittografia reale a riposo e rotazione di tutto ciò che è già stato impegnato

Se il segreto è un token, una chiave API o una password ed è già stato sottoposto al controllo della versione, trattalo come compromesso. Revocarlo, generarne uno nuovo e aggiornare ogni luogo in cui è stato utilizzato. Il commit storico fa parte del record permanente del repository anche se il segreto viene successivamente rimosso in un nuovo commit; chiunque abbia accesso alla cronologia del repository può trovarlo.

La ricerca nei repository di valori codificati Base64 è ora una tattica di ricognizione standard, quindi il fatto che qualcosa fosse Base64 non lo rende segreto. Per qualsiasi operazione in corso, non codificare mai i segreti con Base64 e dare per scontato che siano protetti. Utilizza un gestore di segreti che archivia valori crittografati, con accesso controllato e verificabili. Archivia solo il riferimento o una derivazione, non il segreto stesso, nel codice e nella configurazione dell'applicazione. La vera crittografia a riposo significa che i dati vengono crittografati con una chiave archiviata separatamente e sono inutili per chiunque non disponga di tale chiave.

Cosa non copre: la scelta di un algoritmo di crittografia o di un progetto di gestione delle chiavi

Un database che crittografa colonne sensibili, un gestore di segreti che utilizza la crittografia busta con chiavi in ​​un modulo di sicurezza hardware o un gestore di password che ricava chiavi di crittografia dalle password degli utenti offrono tutti una vera riservatezza. La crittografia a livello di applicazione nel momento in cui vengono creati i segreti, prima che vengano archiviati ovunque, è ancora più potente. La rotazione dei segreti che sono stati esposti, anche se erano codificati solo in Base64, rimuove la finestra di opportunità per un uso improprio. Se un segreto era in un repository, controlla i log per vedere quando è stato effettuato l'accesso e per cosa è stato utilizzato durante la finestra di esposizione.

Per una sicurezza continua, utilizza token di breve durata emessi da un servizio di autorizzazione, non segreti statici archiviati nella configurazione. Un token che scade dopo un'ora ha meno valore per un utente malintenzionato, anche se compromesso. Questo articolo non tratta la scelta di un algoritmo di crittografia, di una progettazione di gestione delle chiavi o di un'architettura di autenticazione. Queste sono domande ingegneristiche più profonde con i propri standard e compromessi. Il punto è più semplice: Base64 non è uno degli strumenti per nessuno di questi problemi. È una conversione di formato per il trasporto e l'archiviazione.

Conclusione: tratta Base64 come testo normale: come il codificatore e decodificatore Base64 fa il punto con un clic, senza che il segreto esca mai dalla scheda

Non lasciare che la comparsa di Base64 in un repository, in un file di configurazione o in un registro ti consoli dicendo che i dati sono protetti. Qualsiasi strumento in grado di leggere il testo può decodificare Base64 e l'operazione è istantanea e deterministica. Leggere una stringa codificata Base64 come testo cifrato è un malinteso comune e lascia i veri segreti in bella vista. Gli sviluppatori spesso se ne rendono conto solo dopo aver scoperto i segreti Base64 in produzione o in un audit. Una nuova prospettiva arriva quando un ingegnere decodifica localmente una stringa campione e vede il testo in chiaro originale apparire immediatamente.

Lo strumento rende il punto inevitabile: la codifica non è crittografia. Una volta chiara questa distinzione, il follow-up è automatico. Ogni segreto Base64 nel codebase deve essere ruotato. Ogni luogo in cui viene utilizzato il segreto deve essere aggiornato. La finestra di esposizione deve essere valutata. Per il futuro, i gestori segreti e la crittografia reale dovranno sostituire la codifica in questo ruolo. Il codificatore e decodificatore Base64 mostra esattamente quanto sia facile e veloce l'inversione, senza che il tuo segreto lasci mai il browser. Considera questa facilità come un vero e proprio atteggiamento di sicurezza: se riesci a decodificarlo tu in un secondo, può farlo anche chiunque altro.