Attenzione, questa frase contiene un messaggio nascosto
Lo standard Unicode offre flessibilità nella rappresentazione dei caratteri, utilizzabile per nascondere informazioni attraverso i variation selectors. Paul Butler ha dimostrato come questi elementi possano incorporare dati invisibili all’occhio umano, ma rilevabili digitalmente.

Unicode è uno standard di codifica dei caratteri che consente di rappresentare un’ampia gamma di simboli, alfabeti ed emoji utilizzati in tutto il mondo. Basti pensare che a settembre 2024 lo Standard Unicode è cambiato ancora con l’introduzione di 5.000 nuovi caratteri. In un altro articolo abbiamo spiegato nel dettaglio come ottenere caratteri speciali da tastiera. La flessibilità di Unicode apre le porte all’uso di tecniche avanzate di steganografia, l’arte di nascondere informazioni all’interno di elementi apparentemente “insospettabili”.
L’ingegnere software Paul Butler ha voluto confermare uno degli esempi più interessanti di questa pratica, dimostrando come sia possibile “contrabbandare” dati arbitrari all’interno di caratteri Unicode, in particolare attraverso l’uso dei cosiddetti variation selectors.
Il sistema di codifica Unicode e i code points
In Unicode, ogni carattere è associato a un valore numerico chiamato code point, rappresentato nella forma U+XXXX
(dove XXXX
è un numero esadecimale). Ad esempio, il carattere `g` corrisponde a U+0067
, una faccina sorridente a U+1F600
.
Provate ad aprire il Blocco Note di Windows, scrivete 1F600
, selezionate i caratteri appena inseriti quindi premete ALT+X
: vedrete immediatamente comparire la faccina che ride.
Per rendere il sistema ancora più flessibile, Unicode include una funzionalità chiamata variation selector, che consente di specificare diverse varianti di un carattere senza modificarne la rappresentazione visiva. Esistono due categorie principali di variation selectors:
- Standardized Variation Sequence (SVS)
- Ideographic Variation Sequence (IVS)
Questi selector vanno da U+FE00
(VS-1) a U+E01EF
(VS-256) e sono accodati a un carattere base per definirne una variante, senza però alterarne il rendering visibile. Questo significa che se il carattere `g` (U+0067
) è fatto seguire da U+FE01
(VS-2), la resa grafica sarà sempre `g`, ma il codice sottostante includerà il selector, rilevabile solo tramite analisi binaria del testo.
Occultamento di dati attraverso Unicode
I variation selectors sono utilizzati per specificare varianti stilistiche e forme grafiche. Ad esempio, il simbolo di una mano che fa il segno “vittoria” può essere rappresentato nella forma classica oppure, tramite il variation selector si può indicare di renderlo come emoji.
In generale, i variation selectors sono adoperati al fine di garantire coerenza visiva e stilistica in contesti in cui è importante controllare l’aspetto di un carattere senza modificarne il significato.
Butler mette in evidenza il fatto che i variation selectors possono essere sfruttati per nascondere testi all’interno di semplici caratteri Unicode perché tali codici sono mantenuti anche quando il testo è copiato negli appunti e incollato (CTRL+C
/CTRL+V
).
In questo modo si possono trasferire dati invisibili all’occhio umano, che però rimangono fissati all’interno della rappresentazione digitale. Poiché esistono 256 variation selectors, è possibile codificare un byte di dati per ogni carattere.
La frase contenente il messaggio nascosto
Prendete la seguente frase di esempio:
Ce la giochiamo a birra e