Immagina di inviare un messaggio segreto nascosto dentro una foto di un gatto. Nessuna crittografia visibile, nessun file allegato. Solo un’immagine apparentemente innocua. Fantascienza? No: è steganografia.
Benvenuti nel mondo affascinante della steganografia digitale, dove i pixel diventano messaggeri silenziosi.
Cos’è la Steganografia?
La steganografia è l’arte di nascondere informazioni all’interno di altri contenuti. A differenza della crittografia, che rende i dati illeggibili, la steganografia nasconde l’esistenza stessa del messaggio.
Nel mondo digitale, il mezzo più comune per nascondere dati è un file immagine. Perché? Perché un’immagine contiene milioni di pixel, e ognuno può essere leggermente modificato senza che l’occhio umano se ne accorga.
Origini della Steganografia
La steganografia affonda le sue radici nell’antichità, molto prima dell’era digitale. Il termine deriva dal greco steganos (“coperto”) e graphein (“scrivere”), cioè “scrivere nascosto”. Le prime forme documentate risalgono all’antica Grecia: Erodoto racconta di messaggi incisi su tavolette di legno poi ricoperte di cera, così da apparire completamente vuote. Nel Medioevo si usavano inchiostri invisibili ricavati da sostanze naturali, mentre durante le guerre mondiali venivano nascosti messaggi in microfilm, ricami, fotografie o persino all’interno di lettere apparentemente innocue. Con l’avvento dell’informatica, la steganografia si è trasformata: non più parole celate sotto la cera, ma bit nascosti dentro immagini, audio, video o altri file digitali. L’obiettivo, però, è rimasto identico nei secoli: non proteggere il contenuto del messaggio, ma nasconderne l’esistenza stessa, rendendo la comunicazione invisibile agli occhi di chi non sa cosa cercare.
Come Funziona: Il Potere dei Bit Invisibili
Ogni pixel in un’immagine RGB è composto da tre valori: Rosso, Verde e Blu (RGB). Ognuno di questi è rappresentato da 8 bit (valori da 0 a 255). La tecnica più usata per la steganografia è la Least Significant Bit (LSB), ovvero la modifica del bit meno significativo.
Esempio:
Un valore di rosso puro:
R = 11111111 (255)
Cambiare l’ultimo bit:
R = 11111110 (254)
La differenza è invisibile, ma quel singolo bit può contenere un frammento di messaggio.
Ripetendo questo processo su migliaia di pixel, è possibile nascondere interi testi, file, o persino altri media.
Strumenti per Nascondere Dati nelle Immagini
1. Steghide
Un classico della steganografia da terminale. Supporta file JPEG e BMP, compressione e password.
steghide embed -cf immagine.jpg -ef segreto.txt -p password123
steghide extract -sf immagine.jpg -p password123
2. OpenStego
Interfaccia grafica semplice, perfetta per chi non ama la riga di comando. Supporta watermarking e file nascosti.
3. zsteg
Strumento avanzato per PNG e BMP, molto usato nei CTF (Capture The Flag) e nell’analisi forense.
zsteg immagine.png
4. Python + PIL
Per i più smanettoni, è possibile scrivere uno script in Python che codifica un messaggio nei bit LSB di ogni pixel. Vuoi un esempio? Te lo preparo volentieri.
import sys
import os
from PIL import Image
END_MARKER = "§" # carattere di fine messaggio
# ------------------------------------------------------------
# 1. Se l'immagine è JPG, convertila in PNG per evitare perdita dati
# ------------------------------------------------------------
def ensure_png(image_path):
ext = os.path.splitext(image_path)[1].lower()
if ext in [".jpg", ".jpeg"]:
img = Image.open(image_path).convert("RGB")
png_path = "converted_input.png"
img.save(png_path)
print(f"[INFO] Convertito {image_path} in {png_path}")
return png_path
return image_path
# ------------------------------------------------------------
# 2. Codifica LSB (solo canale R per semplicità e stabilità)
# ------------------------------------------------------------
def encode_message(image_path, message, output_path="stego_output.png"):
img = Image.open(image_path).convert("RGB")
encoded = img.copy()
width, height = img.size
# prepara messaggio + marcatore
message += END_MARKER
bits = ''.join(format(ord(c), '08b') for c in message)
capacity = width * height # 1 bit per pixel
if len(bits) > capacity:
raise ValueError(
f"Messaggio troppo lungo ({len(bits)} bit). "
f"L'immagine può contenere solo {capacity} bit."
)
data_index = 0
for y in range(height):
for x in range(width):
if data_index >= len(bits):
break
r, g, b = encoded.getpixel((x, y))
r = (r & ~1) | int(bits[data_index])
encoded.putpixel((x, y), (r, g, b))
data_index += 1
if data_index >= len(bits):
break
encoded.save(output_path)
print(f"[OK] Messaggio nascosto in {output_path}")
# ------------------------------------------------------------
# 3. Decodifica LSB
# ------------------------------------------------------------
def decode_message(image_path):
img = Image.open(image_path).convert("RGB")
width, height = img.size
bits = []
for y in range(height):
for x in range(width):
r, g, b = img.getpixel((x, y))
bits.append(str(r & 1))
message = ""
for i in range(0, len(bits), 8):
byte = bits[i:i+8]
if len(byte) < 8:
break
char = chr(int("".join(byte), 2))
if char == END_MARKER:
break
message += char
print("[OK] Messaggio estratto:")
print(message)
# ------------------------------------------------------------
# 4. Main
# ------------------------------------------------------------
def main():
if len(sys.argv) < 2:
print("Uso:")
print(" python stego.py immagine.png \"messaggio da inserire\"")
print(" python stego.py immagine_stego.png")
return
image_path = ensure_png(sys.argv[1])
if len(sys.argv) == 3:
message = sys.argv[2]
encode_message(image_path, message)
else:
decode_message(image_path)
if __name__ == "__main__":
main()
Salva il codice sopra scritto col nome stego.py ed usalo in questo modo:
# python3 -m venv .venv
# . .venv/bin/activate
# pip install pillow
#
# python stego.py gatto.png "Questo è un messaggio segreto"
# python stego.py stego_output.png
Il risultato è il messaggio nascosto dentro l’immagine gatto.png.
Quando Usarla (Legalmente)
- Attivismo digitale: comunicazioni sicure in contesti oppressivi
- Puzzle e giochi: sfide hacker e CTF
- Arte concettuale: messaggi nascosti in opere digitali
- Didattica: quiz o indizi nascosti per studenti
Attenzione: Etica e Limiti
Come ogni tecnologia potente, la steganografia può essere usata per il bene o per il male. È importante ricordare che:
- I file compressi (come JPEG) possono danneggiare i dati nascosti
- I sistemi di steganalisi possono rilevare anomalie statistiche
- L’uso improprio può avere implicazioni legali
Conclusione

Prova a trovare il codice nascosto dentro l’immagine in copertina!
La prossima volta che guarderai una foto online, chiediti:
Cosa c’è davvero dentro quei pixel?
Forse un messaggio. Forse un segreto. O forse solo un tramonto… con qualcosa in più.










Lascia un commento