Carattere alfanumerico: definizione, utilizzo in crittografia, sicurezza

Carattere alfanumerico: definizione, utilizzo in crittografia, sicurezza

Sessantadue. Questo è il numero totale di simboli distinti disponibili quando qualcuno dice "usa solo caratteri alfanumerici". Ventisei maiuscole, ventisei minuscole, dieci cifre. Eliminando la distinzione tra maiuscole e minuscole, il conteggio scende a trentasei. Entrambi i numeri sono importanti, perché quasi ogni identificativo digitale che abbiate mai digitato — un indirizzo di portafoglio, una password Wi-Fi, un hash di transazione, un token GitHub — è costruito a partire da un sottoinsieme di quei sessantadue simboli.

La scelta del sottoinsieme da utilizzare e le relative motivazioni sono gli aspetti che la maggior parte delle spiegazioni tralascia. È anche l'elemento che lega la definizione enciclopedica di carattere alfanumerico alla sicurezza pratica del vostro portafoglio di criptovalute. Questo articolo analizza il conteggio, lo standard che lo sottende, il modo in cui la crittografia moderna seleziona i sottoinsiemi e cosa dice ora l'autorità nazionale statunitense in materia di password. Alcune di queste linee guida sono cambiate in modi che la maggior parte dei consulenti di sicurezza non ha ancora recepito.

Che cos'è un carattere alfanumerico? Definizione e conteggio

Partiamo dalla definizione. Un carattere alfanumerico è qualsiasi lettera dalla A alla Z (maiuscole e minuscole) o qualsiasi cifra decimale da 0 a 9. Tutto qui. Da qui, i calcoli sono ovvi: ventisei lettere maiuscole e minuscole più dieci cifre danno sessantadue caratteri distinti con distinzione tra maiuscole e minuscole, trentasei senza. Tutto il resto è "speciale". Punteggiatura, spazi bianchi, simboli matematici, lettere accentate, emoji: nessuno di questi è considerato alfanumerico.

Gli ingegneri solitamente soddisfano la definizione tramite una delle due abbreviazioni. Gli strumenti POSIX come grep, sed e awk riconoscono `[:alnum:]`, che corrisponde ai sessantadue caratteri sopra indicati. La maggior parte delle moderne varianti di regex — Python, JavaScript, Java, PCRE — utilizza invece `\w`. Il problema con `\w` è che introduce di nascosto il trattino basso. Il trattino basso non è formalmente un carattere alfanumerico. La maggior parte della sintassi di programmazione lo tratta come onorifico, motivo per cui il prefisso della chiave Stripe `sk_live_` e il prefisso della chiave AWS `AKIA` mescolano trattini bassi e lettere maiuscole con cifre senza che nessuno se ne accorga.

Da dove deriva il termine? Dalle schede perforate, pensate un po'. Negli anni '30, le macchine tabulatrici IBM necessitavano di un termine unico per i codici che mescolavano lettere e numeri, e "alfanumerico" si affermò. Con l'IBM 1401, all'inizio degli anni '60, il termine era ormai entrato a far parte del vocabolario standard dell'informatica aziendale. La distinzione si rivelò efficace nella pratica: un campo dichiarato "alfanumerico" accettava qualsiasi lettera o cifra; un campo esclusivamente numerico rifiutava categoricamente l'alfabeto. Da lì, il termine si diffuse nelle targhe automobilistiche, nei codici bancari IBAN, nelle mnemotecniche delle tastiere telefoniche, nei codici SKU dei prodotti e in centinaia di altri contesti.

La distinzione tra maiuscole e minuscole e non maiuscole è più importante di quanto sembri. L'entropia delle password raddoppia quando sono consentite le lettere maiuscole. Gli indirizzi Bitcoin in Base58 mantengono intenzionalmente entrambe le maiuscole e minuscole. Bech32 ignora intenzionalmente le maiuscole e minuscole. Ognuna di queste scelte rappresenta un compromesso tra espressività ed errore umano. Scegliere male può portare a perdite economiche per gli utenti a causa di errori di battitura.

Carattere alfanumerico

Da ASCII a Unicode: una breve storia tecnica

Oggi il sistema "alfanumerico" è il sopravvissuto di una guerra di standardizzazione durata sessant'anni. La maggior parte degli utenti si è trovata nel mezzo senza nemmeno accorgersene.

Il primo standard è stato l'ASCII. Fu rilasciato nel 1963, per gentile concessione dell'American Standards Association, e formalizzato cinque anni dopo come ANSI X3.4-1968. Seguirono due revisioni: una nel 1977 e un'altra nel 1986. La versione del 1968 assegnò alla lettera maiuscola A il valore 65, alla lettera minuscola a il valore 97 e alle cifre da 0 a 9 i valori da 48 a 57. Aprite il vostro editor ora: il byte 'A' è ancora 65. Nulla è cambiato in sessant'anni.

Per circa quattro decenni, il set alfanumerico ASCII è stato l'unico set alfanumerico. Poi è arrivato il web globale. Sette bit hanno smesso di essere sufficienti. I problemi erano gravi: email illeggibili, database danneggiati, siti web giapponesi che funzionavano perfettamente a Tokyo e apparivano come muri di punti interrogativi su un laptop americano. Unicode è arrivato nel 1991 con un obiettivo ambizioso: assegnare un numero univoco a ogni carattere di ogni scrittura mai realizzata. UTF-8 è seguito nel 1992 come codifica che ha effettivamente permesso a Unicode di funzionare attraverso le reti ordinarie. Il suo punto di forza era la retrocompatibilità: i primi 128 punti di codice di UTF-8 corrispondono esattamente ai byte ASCII originali del 1968. I testi in inglese inviati prima del 1991 hanno continuato a funzionare per sempre.

Il passaggio di classe è avvenuto nel dicembre 2007. Quel mese, le statistiche pubbliche delle scansioni web hanno finalmente mostrato che UTF-8 aveva superato ASCII come codifica più comune online. Da quel momento in poi, il termine "alfanumerico" ha smesso di indicare strettamente i sessantadue simboli ASCII. Unicode ora cataloga blocchi alfanumerici per gli alfabeti cirillico, greco, arabo, ebraico e CJK. Ogni alfabeto ha le sue lettere e le sue cifre.

In pratica, però, i software che devono attraversare i confini nazionali continuano a utilizzare di default il sottoinsieme ASCII originale: lettere latine dalla A alla Z, numeri arabi da 0 a 9 e nient'altro. Il motivo è banale: ogni tastiera produce caratteri ASCII, ogni database li accetta e ogni motore di espressioni regolari li riconosce. Uscire da questo intervallo significa ereditare una serie di bug di codifica errata, caratteri simili e attacchi di phishing, di cui parlerò più avanti.

Classe Membri Contare Abbreviazione delle espressioni regolari Esempio
Alfabetico A–Z, a–z 52 `[A-Za-z]` Parola in inglese semplice
Numerico 0–9 10 `[0-9]` o `\d` Un anno, un codice postale
Alfanumerico A–Z, a–z, 0–9 62 `[A-Za-z0-9]` o `[:alnum:]` Chiave API, SKU
Speciale/simbolico `!@#$%^&*()_+-=[]{};:'"\ ,.<>/?` ~33 (ASCII) `[^A-Za-z0-9]` Modificatore password

Caratteri alfanumerici in crittografia: indirizzi, hash e seed

Ecco il punto che la maggior parte delle spiegazioni generiche omette. I sistemi di criptovaluta non utilizzano mai l'intero set alfanumerico di sessantadue caratteri. Scelgono invece dei sottoinsiemi accuratamente selezionati. Ognuno di essi è frutto di un compromesso ingegneristico documentato, non di una scelta estetica arbitraria.

Prima di tutto Bitcoin. Un indirizzo Bitcoin tradizionale (quello che inizia con 1 o 3) è codificato in Base58. L'alfabeto è stato progettato a mano da Satoshi Nakamoto. La ricetta: prendi l'insieme alfanumerico di sessantadue caratteri, eliminane quattro. Via lo zero, la O maiuscola, la I maiuscola, la l minuscola. Perché proprio questi quattro? Scrivili su un Post-it con una calligrafia illeggibile. Allontanati. Torna dopo cinque minuti. Prova a distinguerli. Non ci riesci. Questo è il problema che Base58 è stato creato per risolvere. Rimangono cinquantotto caratteri. Un tipico indirizzo tradizionale risulta essere lungo dai ventisei ai trentacinque simboli, abbastanza corto da poter essere copiato a mano se proprio necessario.

SegWit è stato attivato nell'agosto 2017. Con esso è arrivato un secondo formato di indirizzo Bitcoin: Bech32, definito nel BIP-173. Bech32 adotta un approccio diverso. La distinzione tra maiuscole e minuscole scompare completamente: ogni indirizzo è in minuscolo. Vengono eliminati quattro caratteri diversi: la cifra 1, più b, i, o. Le trentadue lettere e cifre rimanenti contengono un checksum incorporato. Il checksum rileva automaticamente quasi tutti gli errori di battitura di un singolo carattere. Taproot, attivo dal novembre 2021, ha perfezionato il formato in Bech32m (BIP-350) dopo che i ricercatori hanno scoperto un errore in un caso limite nella formula matematica originale.

Ethereum ha scelto una terza strada: usare il formato esadecimale. Un indirizzo Ethereum è composto da `0x` seguito da esattamente quaranta caratteri esadecimali, per un totale di quarantadue caratteri. Il formato esadecimale riduce l'alfanumerico a soli sedici elementi: le cifre da 0 a 9, le lettere dalla a alla f e nient'altro. Nel 2015, la scelta sembrava sensata. Ma dopo anni passati a decifrare blocchi esadecimali grezzi in MetaMask, il risultato è diventato sgradevole. La soluzione è stata EIP-55. Si tratta di convertire in maiuscolo alcune lettere secondo uno schema derivato da un hash Keccak-256 dell'indirizzo in minuscolo. Il risultato è un sistema di rilevamento degli errori di battitura gratuito. EIP-55 rileva gli errori di battitura con un'affidabilità di circa il 99,975%. Il tasso di errore si aggira intorno allo 0,0247%. Un valore basso, ma non nullo.

Gli hash sono il caso più semplice. L'output di un hash SHA-256 è di 256 bit, visualizzato come 64 caratteri esadecimali. Keccak-256 di Ethereum produce un output di lunghezza identica. L'ID di una transazione Bitcoin, un txid, è l'hash SHA-256 della transazione stessa, quindi anche un txid è composto da 64 caratteri alfanumerici esadecimali. Possono sembrare complessi in un block explorer, ma sono interamente alfanumerici.

Le frasi seed rompono lo schema. Il recupero del portafoglio BIP-39 è l'unico caso in cui le criptovalute escono dal sistema alfanumerico e tornano in un territorio puramente alfabetico. Lo standard codifica 128 o 256 bit di entropia come dodici o ventiquattro parole inglesi tratte da un elenco fisso di 2.048 parole. Ogni parola è composta solo da lettere minuscole: niente cifre, niente lettere maiuscole e minuscole. Perché? Perché l'obiettivo del progetto è una persona che scrive parole su carta alle 3 del mattino dopo che il suo telefono si è scaricato, e le cifre introducono un'ambiguità che le lettere non presentano.

Identificativo Set di personaggi Lunghezza Esempio (troncato)
Indirizzo legacy di Bitcoin Base58 (58 caratteri, senza 0/0/1/1) 26–35 `1A1zP1eP5QGefi2…`
Bitcoin Bech32 (SegWit) 32 minuscole, senza 1/b/i/o ~42 `bc1qar0srrr7xfk…`
Indirizzo Ethereum esadecimale (0–9, a–f) + `0x` 42 `0xde0B295669a91…`
SHA-256 / txid esadecimale 64 `e3b0c44298fc1c1…`
Parola BIP-39 solo dalla a alla z 3–8 per parola `abbandonare la capacità possibile…`

Ogni sottoinsieme è un esempio di progettazione incentrata sull'uomo, celato all'interno di un sistema profondamente tecnico.

Password alfanumeriche: cosa dice realmente il NIST nel 2024

La maggior parte dei consigli sulle password che si trovano sul web sono obsoleti da diversi anni. Usare lettere maiuscole e minuscole, aggiungere numeri, includere almeno un carattere speciale, cambiarla ogni novanta giorni: queste regole sono state considerate valide per due decenni. Il National Institute of Standards and Technology degli Stati Uniti le ha ufficialmente abbandonate.

La pubblicazione speciale NIST 800-63B, l'autorità federale in materia di linee guida sull'identità digitale, ha finalizzato la Revisione 4 nel settembre 2024. Le nuove linee guida colpiscono per la quantità di elementi che eliminano. La raccomandazione sulla lunghezza minima è stata innalzata a quindici caratteri per l'autenticazione a fattore singolo. L'istruzione sulle regole di composizione dei caratteri è formulata come un "divieto": i servizi non devono richiedere classi di caratteri specifiche. Anche la scadenza periodica delle password, quella rotazione di novanta giorni che tutti odiavano, è stata eliminata. Al posto di queste regole, il NIST ora richiede ai servizi di verificare le password inviate confrontandole con una lista nera di credenziali note per essere state compromesse.

Il cambiamento è giustificato dalla matematica dell'entropia. Un insieme alfanumerico di 62 caratteri produce circa 5,95 bit per carattere. L'intero insieme ASCII stampabile di 95 caratteri (alfanumerici più speciali) ne produce 6,57. L'aggiunta dell'intero set di caratteri speciali aggiunge 0,62 bit per carattere. Aggiungendo un ulteriore carattere di lunghezza si ottengono i 5,95 bit completi. La lunghezza domina la complessità di un ordine di grandezza.

Il Data Breach Investigations Report 2025 di Verizon ha rilevato che le credenziali rappresentano il 22% di tutti i punti di accesso violati confermati. Il credential stuffing, ovvero il riutilizzo automatico di elenchi di password trapelati, si verifica nel 19% dei tentativi di autenticazione, con picchi del 44%. Il 49% degli utenti riutilizza le stesse password per diversi servizi. Nessuno di questi problemi si risolve richiedendo l'uso della lettera maiuscola.

Una password alfanumerica più lunga, senza caratteri speciali, è più difficile da decifrare rispetto a una breve, composta appositamente per soddisfare un requisito di complessità. Se la tua banca ti obbliga ancora a creare una password di dodici caratteri con una lettera maiuscola, una cifra e un carattere speciale, tale politica è ora formalmente non conforme allo standard federale statunitense.

Dove compaiono altri caratteri alfanumerici

Uscendo dal mondo della crittografia, le password e le stringhe alfanumeriche continuano a riemergere ovunque un sistema necessiti di un identificatore che gli esseri umani possano digitare e i computer possano analizzare senza ambiguità.

I codici bancari sono un esempio semplice. Un IBAN può arrivare fino a trentaquattro caratteri alfanumerici e inizia sempre con un codice paese ISO di due lettere. I codici SWIFT/BIC sono composti da otto o undici caratteri. Le targhe automobilistiche variano da paese a paese – una targa britannica è completamente diversa da una tedesca – ma entrambe sono sottoinsiemi alfanumerici dello stesso insieme di sessantadue simboli. I numeri di identificazione del veicolo (VIN) sono composti esattamente da diciassette caratteri in tutto il mondo e, per distinguerli visivamente dalle cifre, escludono deliberatamente le lettere I, O e Q.

Le chiavi API sono esempi quotidiani che la maggior parte degli utenti non si preoccupa nemmeno di esaminare. Una chiave live di Stripe apre `sk_live_` seguito da un token alfanumerico. Una chiave di accesso AWS apre `AKIA` seguito da sedici caratteri alfanumerici. Un token di accesso personale di GitHub emesso dopo il 2021 apre `ghp_`. Questi prefissi sono a loro volta alfanumerici, scelti in modo che i provider possano scansionare repository e log pubblici alla ricerca di chiavi compromesse. In molti casi, questa scansione individua una falla prima ancora che un malintenzionato possa farlo.

I codici QR meritano una breve menzione. Lo standard ISO/IEC 18004 definisce una "modalità alfanumerica" dedicata che codifica uno specifico set di 45 caratteri (lettere maiuscole, cifre, spazi e alcuni segni di punteggiatura) in modo più efficiente rispetto alla modalità byte generica. Un codice QR che contiene solo testo alfanumerico in maiuscolo memorizza circa 1,6 volte più dati per quadrato rispetto allo stesso contenuto codificato come byte grezzi.

Base32, Base58, Base64: quando la crittografia sceglie un sottoinsieme

Esistono alcuni standard di codifica specifici per mappare i dati binari in un sottoinsieme alfanumerico. Il riferimento è l'RFC 4648, pubblicato dall'IETF nel 2006, che definisce tre codifiche.

L'esadecimale è il più semplice di tutti. Ufficialmente Base16. Sedici caratteri: 0-9, a-f. Utilizzato per gli indirizzi Ethereum, gli hash crittografici e praticamente per qualsiasi debug di basso livello in cui è necessario leggere byte grezzi. Base32 è il più interessante. L'alfabeto a 32 caratteri è stato scelto per essere insensibile alle maiuscole e minuscole e, in alcune varianti, per omettere le cifre 0, 1, 8 e 9, visivamente confondibili. Chiunque abbia configurato l'autenticazione a due fattori e inserito una password in Google Authenticator ha digitato Base32, il più delle volte senza saperlo.

Base64 è il sistema di codifica più utilizzato. Sessantadue caratteri alfanumerici più i due simboli `+` e `/`. Una variante sicura per gli URL li sostituisce con `-` e `_`. Base64 è il codice utilizzato per veicolare gli allegati email, codificare gli URL dei dati all'interno dell'HTML e impacchettare i JSON Web Token per OAuth.

L'alfabeto Base58 di Bitcoin non rientra nello standard RFC 4648. Satoshi Nakamoto lo ha creato in modo indipendente. L'obiettivo era diverso: impedire agli esseri umani di digitare nuovamente gli indirizzi, non migliorare l'efficienza in termini di byte per carattere. Il risultato è stato un alfabeto personalizzato che nessun altro utilizza. Il Base85, a volte chiamato Ascii85, funziona in direzione opposta: comprime quattro byte in cinque caratteri e viene utilizzato nei file PDF e PostScript, dove la maggiore densità giustifica la perdita di leggibilità.

Carattere alfanumerico

Errori comuni: confusione visiva e oggetti simili

Le stesse ragioni per cui la crittografia seleziona sottoinsiemi di caratteri alfanumerici sono le stesse per cui tutti commettono errori. La maggior parte dei problemi è causata da poche coppie di caratteri.

Le classiche lettere che possono essere confuse: zero e O maiuscola. La cifra uno, la l minuscola e la I maiuscola. La l minuscola e la I maiuscola. Bitcoin Base58 le elimina tutte e quattro per questo motivo. Altri sistemi utilizzano diverse misure di mitigazione: i numeri di telaio (VIN) eliminano I, O e Q, alcuni codici finanziari eliminano completamente la O, e si possono trovare normative nazionali sulle targhe automobilistiche che vietano la lettera che più assomiglia a uno zero nel carattere tipografico del paese.

Un problema più complesso e recente è rappresentato dagli attacchi basati su omografi Unicode. L'idea è stata documentata in un articolo del 2001 da Evgeniy Gabrilovich e Alex Gontmakher. Un omografo consiste nello scambiare un carattere visivamente identico con uno di un alfabeto diverso, ad esempio la lettera cirillica 'а' (U+0430) al posto della lettera latina 'a' (U+0061). Registrando un nome di dominio con questa sostituzione, è possibile ospitare una pagina di phishing indistinguibile da quella reale della banca. I browser moderni visualizzano la rappresentazione Punycode grezza, qualcosa come `xn--80akhbyknj4f`, ogni volta che un dominio mescola alfabeti. Questa difesa blocca la maggior parte degli attacchi, ma non tutti.

Come creare una password alfanumerica sicura in 2026

Tre regole. Tutte derivate direttamente dalla matematica del NIST.

Primo: la lunghezza è più importante della tipologia di carattere. Puntate a sedici caratteri o più. La regola vale sia che il sistema accetti solo lettere e cifre, sia che accetti l'intero set ASCII stampabile.

Secondo consiglio: se proprio devi memorizzarla, usa una passphrase. Quattro parole casuali tratte da un lungo elenco (l'elenco di Diceware è l'opzione di riferimento) sono più sicure di quasi qualsiasi password breve che una persona possa inventare a tavolino.

Terzo: per tutto il resto, usa un gestore di password. Lascia che il gestore generi lunghe stringhe alfanumeriche che non dovrai mai leggere o digitare a mano. Una volta che il gestore si occupa dell'output, la leggibilità del risultato smette di avere importanza.

Guida rapida: Conteggi alfanumerici ed esempi

Sessantadue con distinzione tra maiuscole e minuscole. Trentasei senza. Codici ASCII 48-57 per le cifre. 65-90 per le maiuscole. 97-122 per le minuscole. Corrispondenza dell'intero set con l'espressione regolare `[A-Za-z0-9]` o la classe POSIX `[:alnum:]`. Questo insieme di sessantadue simboli è alla base di quasi ogni identificatore digitale che utilizzerete questa settimana. Password. Chiavi API. IBAN. Targhe automobilistiche. ID di transazione. Ogni indirizzo di portafoglio che generate.

Qualsiasi domanda?

Perché Satoshi Nakamoto si è seduto e ha eliminato ogni carattere che visivamente entra in conflitto con un altro nei font più comuni. Lo zero entra in conflitto con la O maiuscola. La l minuscola entra in conflitto con la I maiuscola. Un utente Bitcoin che riscrive un indirizzo da una copia cartacea si confonderà. Questa confusione costa soldi veri alle persone. Eliminando i quattro caratteri problematici, il tasso di errori di battitura crolla.

No. Punteggiatura, simboli matematici, simboli di valuta, spazi bianchi: tutto ciò che non è una lettera o una cifra si trova al di fuori dell’insieme alfanumerico. Puoi aggiungerli a una password e guadagnare una frazione di bit di entropia per ogni carattere. Aggiungere un singolo carattere extra di lunghezza tende a farti guadagnare molto di più.

Una password composta da lettere e cifre, senza simboli. La norma NIST SP 800-63B Rev 4, pubblicata nel settembre 2024, ha smesso di richiedere caratteri speciali nella sua versione attuale. La raccomandazione corrente è di almeno quindici caratteri, oltre a un controllo della lista nera rispetto alle credenziali compromesse. La maggior parte delle politiche aziendali in materia di password è ancora indietro di qualche anno rispetto a queste linee guida.

Sì, anche se mai l’intero set. Gli indirizzi Bitcoin tradizionali utilizzano Base58, che rimuove 0, O, I e l. Gli indirizzi Bech32 SegWit utilizzano un sottoinsieme di trentadue caratteri minuscoli che elimina 1, b, i e o. La logica alla base di entrambe le scelte è identica: le persone confondono i caratteri simili quando li riscrivono, e chi riscrive in modo errato perde denaro.

No. Lo spazio appartiene alla classe `whitespace`, che è un insieme completamente separato. Esegui qualsiasi test — POSIX `[:alnum:]`, regex `[A-Za-z0-9]`, `isalnum()` di Python, la regex `\w` di JavaScript — e ognuno di essi rifiuta spazi, tabulazioni e a capo.

Sessantadue se la distinzione tra maiuscole e minuscole è importante. Ventisei maiuscole, ventisei minuscole, dieci cifre. Disattivando la distinzione tra maiuscole e minuscole, si arriva a trentasei. Questa distinzione risale allo standard ASCII del 1968 e da allora non è cambiata.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.