Sicurezza

Nascondere testo segreto nelle immagini (steganografia)

6 min di lettura

La steganografia è la pratica di nascondere un’informazione dentro un’altra, in modo che nessuno sospetti nemmeno che ci sia qualcosa da trovare. In questa guida vedi come infilare del testo segreto dentro un’immagine e come tirarlo fuori di nuovo, gratis e interamente nel tuo browser: nessun file viene caricato da nessuna parte.

Come funziona

Un’immagine è una griglia di pixel, e ogni pixel ha tre valori di colore: rosso, verde e blu, ciascuno da 0 a 255. Quel numero, sotto sotto, è un byte di 8 bit. Il bit più a destra è il “bit meno significativo” (in inglese LSB, least significant bit): cambiarlo sposta il valore di appena una unità, e quel salto è del tutto invisibile all’occhio.

Prendi un pixel con il rosso a 200. In binario è 11001000. Se cambi l’ultimo bit ottieni 11001001, cioè 201. Un rosso a 200 e un rosso a 201 sono lo stesso rosso per chiunque guardi lo schermo. Ma quell’ultimo bit adesso è tuo: puoi metterci quello che vuoi.

Il messaggio da nascondere è anch’esso una sequenza di byte. Prendi la lettera “H”: il suo codice è 72, cioè 01001000 in binario. Quegli 8 bit vengono scritti uno per uno nel bit meno significativo di 8 canali consecutivi. Il primo pixel riceve lo 0, il secondo l’1, il terzo lo 0, e così via fino a completare la lettera. Ripeti per ogni carattere del messaggio e il testo intero finisce disperso nei pixel, senza cambiare in modo percepibile l’immagine.

Per rileggerlo si fa il percorso inverso: si scorrono i pixel nello stesso ordine, si raccoglie l’ultimo bit di ciascun canale, si rimettono insieme a gruppi di 8 e si ricostruiscono i byte originali.

Quanto puoi nascondere

La capacità dipende da quanti pixel ha l’immagine e da quanti canali usi. Con un solo canale (il rosso) nascondi 1 bit per pixel; usando rosso, verde e blu insieme ne nascondi 3, quindi tripli lo spazio disponibile.

Dimensione immagineSolo canale rossoRGB (3 canali)
100x100 pxcirca 1,2 KBcirca 3,6 KB
1280x720 pxcirca 115 KBcirca 345 KB
1920x1080 pxcirca 259 KBcirca 778 KB

Il nostro encoder ti lascia scegliere tra Rosso, RGB e RGBA proprio per questo motivo: se il messaggio è breve resti sul solo rosso (la scelta più discreta), se è lungo passi a RGB o RGBA per avere più spazio.

Nascondi un messaggio

Carica un’immagine, scrivi il testo e codifica. Il widget qui sotto fa tutto in locale.

Encoder di Steganografia
Gratis, senza registrazione, su qualsiasi dispositivo.
Apri lo strumento completo

I passi sono questi:

  1. Carica un’immagine di partenza (una foto o un PNG qualsiasi).
  2. Scrivi il messaggio nel campo di testo.
  3. Se il messaggio è lungo, scegli RGB (circa 3 volte la capacità) o RGBA (circa 4 volte); altrimenti lascia il solo Rosso.
  4. Se vuoi protezione, imposta una password.
  5. Clicca su Codifica e poi su Scarica.

L’immagine in uscita è sempre un PNG. Non è un dettaglio casuale: il PNG è un formato senza perdita, cioè conserva ogni pixel esattamente come lo hai scritto. Il JPEG invece è con perdita, ricomprime l’immagine buttando via i dettagli che l’occhio non nota, e proprio quei dettagli sono i tuoi bit nascosti. Salvare in JPEG distruggerebbe il messaggio.

Rivela un messaggio

Per leggere un’immagine che contiene un segreto, usa il decoder.

  1. Trascina il PNG nel widget.
  2. Il testo nascosto appare in automatico.
  3. Se il messaggio era protetto, digita la password per sbloccarlo.

Il decoder non si limita al formato prodotto dal nostro encoder: rileva automaticamente molti schemi LSB diversi, provando i vari canali (R, RGB, RGBA, oppure solo verde o solo blu), sia con prefisso di lunghezza sia con terminatore null, e sia con ordine dei bit MSB sia LSB. La validazione è severa, così una foto normale, senza niente nascosto, torna semplicemente vuota invece di produrre caratteri casuali.

Aggiungi una password (cifratura)

Impostare una password fa un passo in più rispetto al semplice nascondere. Il messaggio viene cifrato con AES-256-GCM, con la chiave derivata dalla tua password tramite PBKDF2. In pratica: prima il testo diventa un blocco cifrato illeggibile, e solo dopo quel blocco viene scritto nei bit dei pixel.

La differenza è importante. Senza password, chi conosce il metodo LSB può estrarre il testo. Con password, anche estraendo i bit non trova nient’altro che rumore che sembra casuale, e una password sbagliata non rivela niente (il tag di autenticazione di GCM impedisce qualsiasi lettura parziale).

Le due tecniche coprono cose diverse. La steganografia nasconde il fatto che esista un messaggio. La cifratura lo rende illeggibile anche a chi lo trova. Insieme sono molto più solide di ciascuna da sola: prima passa inosservato, e anche se qualcuno intuisce che c’è qualcosa, resta bloccato dalla password.

Limiti ed errori comuni

Vale la pena essere onesti sui limiti, perché è qui che i messaggi si perdono.

  • Funziona solo su PNG senza perdita. Il payload vive nei bit esatti dei pixel: qualsiasi cosa li alteri lo cancella.
  • Ri-salvare come JPEG o fare uno screenshot distrugge il messaggio. Uno screenshot ridisegna l’immagine e spesso la salva in un formato con perdita; il risultato è lo stesso di una ricompressione.
  • Molte app di chat e social ricomprimono le immagini. Se mandi il PNG come “foto” in una chat, spesso arriva ricompresso e vuoto. Condividilo come file allegato, non attraverso un canale che ottimizza le immagini.
  • È steganografia LSB, non un rilevatore universale. Il decoder legge gli schemi LSB, ma non tocca altri metodi, come la steganografia nel dominio DCT usata dentro i JPEG.

Se tieni a mente queste regole, la parte difficile è già risolta: usa un PNG, mantienilo un PNG e trasferiscilo come file.

Domande frequenti

È privato? Sì. Tutto il lavoro avviene in locale nel tuo browser tramite la Canvas API. L’immagine e il messaggio non vengono mai caricati su un server: restano sul tuo dispositivo dall’inizio alla fine.

Posso usare qualsiasi immagine? Puoi partire da qualsiasi immagine, ma il file salvato sarà sempre un PNG, perché è l’unico formato che preserva i bit nascosti. Immagini più grandi offrono più capacità; se il messaggio non entra, usa un’immagine con più pixel oppure passa da Rosso a RGB o RGBA.

L’immagine codificata avrà un aspetto diverso? No, non a occhio nudo. Le modifiche riguardano solo l’ultimo bit di alcuni canali di colore, uno scarto di al massimo una unità su 255. Le dimensioni del file possono cambiare un po’, ma l’immagine appare identica.

Qualcuno può leggerlo senza la password? Se non hai impostato una password, chiunque conosca la steganografia LSB può estrarre il testo. Se invece hai messo una password, il messaggio è cifrato con AES-256-GCM: senza la password corretta si vede solo rumore, e un tentativo errato non rivela niente.

Pronto a provarci? Usa l’Encoder di Steganografia per nascondere il tuo messaggio in un PNG e il Decoder di Steganografia per rileggerlo.

SteganografiaPrivacyImmaginiCifratura
Encoder di Steganografia
Ora provalo tu stesso con lo strumento completo.
Prova ora
Strumenti correlati