Come crittografare e decifrare una email con Kali Linux e Python: guida pratica
La crittografia delle email è una delle tecniche fondamentali per proteggere la comunicazione online. Se utilizzi Kali Linux per attività di sicurezza o test, puoi sfruttare la potenza di Python per creare un semplice flusso di cifratura e decifratura del contenuto di una email.
In questo articolo vediamo un esempio pratico di crittografia e decodifica di una mail usando:
- Kali Linux come sistema operativo
- Python e la libreria cryptography con il sistema Fernet
- una chiave segreta condivisa tra mittente e destinatario
🔒 Perché crittografare le email
Prima dell'esempio tecnico, è utile chiarire perché ha senso crittografare i messaggi email. Le email possono attraversare diversi server e, se non sono cifrate, il contenuto può essere letto in chiaro da terze parti non autorizzate.
Anche quando utilizzi HTTPS per accedere alla tua webmail, il messaggio potrebbe essere comunque memorizzato in chiaro sul server. Crittografare il contenuto della email significa fare in modo che solo chi possiede la chiave corretta possa leggere il messaggio.
- protezione del contenuto da intercettazioni durante il transito
- maggiore privacy rispetto alla semplice connessione HTTPS
- maggiore controllo sulla riservatezza indipendentemente dal provider
In un contesto di sicurezza offensiva e difensiva, tipico di Kali Linux, imparare a crittografare le email è un tassello importante.
💻 Panoramica della soluzione con Python
Nel nostro esempio useremo la crittografia simmetrica tramite la libreria Python cryptography e il modulo Fernet. Questo schema prevede:
- una chiave segreta condivisa tra mittente e destinatario
- uno script per cifrare il testo della email prima dell'invio
- uno script per decifrare il testo sul sistema del destinatario
In uno scenario reale, la chiave dovrebbe essere scambiata in modo sicuro, ad esempio di persona, tramite un canale separato o utilizzando sistemi di crittografia a chiave pubblica. In questo articolo ci concentriamo sul meccanismo di cifratura e decifratura.
⚙ Prerequisiti su Kali Linux
Su Kali Linux è già presente Python 3. Per seguire l'esempio abbiamo solo bisogno di installare la libreria cryptography, che fornisce l'implementazione di Fernet.
Installare la libreria cryptography
Apri un terminale su Kali Linux e installa la libreria con:
pip install cryptography
# oppure, se necessario:
pip3 install cryptography
# oppure:
python3 -m pip install cryptography
Dopo l'installazione, sei pronto per creare gli script Python per la gestione della crittografia della email.
🔑 Passo 1: generare una chiave segreta per la crittografia
Il primo passo consiste nel generare una chiave segreta che verrà utilizzata per cifrare e decifrare i messaggi. Useremo il sistema Fernet, che implementa una crittografia simmetrica autenticata.
Crea un file chiamato ad esempio genera_chiave.py con il seguente contenuto:
from cryptography.fernet import Fernet
def genera_chiave():
# Genera una chiave segreta
chiave = Fernet.generate_key()
# Salva la chiave in un file
with open("chiave_email.key", "wb") as file_chiave:
file_chiave.write(chiave)
print("Chiave generata e salvata in chiave_email.key")
if __name__ == "__main__":
genera_chiave()
Esegui lo script da terminale:
python3 genera_chiave.py
Verrà creato il file chiave_email.key nella stessa cartella. Questa chiave dovrà essere condivisa in modo sicuro tra mittente e destinatario, perché consente sia di cifrare che di decifrare i messaggi.
📧 Passo 2: cifrare il testo della email con Python
Ora possiamo creare uno script che legga la chiave, prenda un testo in chiaro (il contenuto della email), lo cifri e mostri il risultato da inserire nel corpo della mail o in un allegato.
Crea un file chiamato cifra_email.py con il seguente codice:
from cryptography.fernet import Fernet
def carica_chiave():
# Legge la chiave segreta dal file
with open("chiave_email.key", "rb") as file_chiave:
chiave = file_chiave.read()
return chiave
def cifra_messaggio(messaggio):
chiave = carica_chiave()
f = Fernet(chiave)
# Il messaggio deve essere in bytes
messaggio_bytes = messaggio.encode("utf-8")
messaggio_cifrato = f.encrypt(messaggio_bytes)
return messaggio_cifrato
if __name__ == "__main__":
testo = """Ciao,
questo è un messaggio di prova inviato in forma crittografata.
Solo chi possiede la chiave corretta può leggerlo.
Saluti,
Mittente
"""
cifrato = cifra_messaggio(testo)
print("Testo cifrato da inserire nella email:")
print(cifrato.decode("utf-8"))
Lanciando lo script con:
python3 cifra_email.py
otterrai in output una lunga stringa di testo, ad esempio qualcosa come:
gAAAAABk... (ecc.)
Questa stringa rappresenta il messaggio crittografato che potrai copiare e incollare nel corpo della email oppure salvare come file di testo da allegare.
🚀 Passo 3: inviare la email con il testo cifrato
A questo punto puoi usare il tuo normale client di posta elettronica:
- apri il client (Thunderbird, webmail, ecc.)
- incolla il testo cifrato nel corpo del messaggio oppure in un file allegato
- invia la email al destinatario
Per chi intercetta il messaggio, il contenuto apparirà come una stringa priva di significato. Solo chi possiede la chiave corretta potrà decifrarlo.
Esempio facoltativo: invio automatico con Python
Se vuoi gestire anche l'invio in modo automatico, puoi usare il modulo smtplib di Python insieme alla crittografia. Ricorda che per un uso reale dovrai configurare correttamente il server SMTP e non salvare le password in chiaro nel codice.
import smtplib
from email.mime.text import MIMEText
from cryptography.fernet import Fernet
def carica_chiave():
with open("chiave_email.key", "rb") as file_chiave:
return file_chiave.read()
def cifra_messaggio(messaggio):
chiave = carica_chiave()
f = Fernet(chiave)
return f.encrypt(messaggio.encode("utf-8")).decode("utf-8")
if __name__ == "__main__":
testo_chiaro = "Questo è un messaggio segreto inviato da Kali Linux con Python."
testo_cifrato = cifra_messaggio(testo_chiaro)
mittente = "tuo_indirizzo@example.com"
destinatario = "destinatario@example.com"
msg = MIMEText(testo_cifrato)
msg["Subject"] = "Messaggio cifrato con Python e Kali Linux"
msg["From"] = mittente
msg["To"] = destinatario
# ATTENZIONE: esempio didattico, configura il tuo server SMTP reale.
with smtplib.SMTP_SSL("smtp.example.com", 465) as server:
server.login("tuo_indirizzo@example.com", "TUaPASSWORD")
server.send_message(msg)
print("Email cifrata inviata.")
In uno scenario reale, utilizza variabili d'ambiente o sistemi di gestione dei segreti per le password, e verifica le impostazioni di sicurezza del provider di posta.
🔐 Passo 4: decifrare la email sul sistema del destinatario
Il destinatario, una volta ricevuta la email, vedrà il testo cifrato nel corpo del messaggio o in un file allegato. Per decifrarlo, deve disporre della stessa chiave segreta (file chiave_email.key) e di uno script di decifratura.
I passaggi tipici sono:
- copiare il testo cifrato in un file, ad esempio messaggio_cifrato.txt
- salvare il file chiave_email.key nella stessa cartella
- eseguire uno script Python per la decifratura
Script per decifrare il messaggio
Sul sistema del destinatario (può essere anch'esso Kali Linux) crea un file decifra_email.py con il seguente contenuto:
from cryptography.fernet import Fernet
def carica_chiave():
with open("chiave_email.key", "rb") as file_chiave:
return file_chiave.read()
def decifra_messaggio(messaggio_cifrato):
chiave = carica_chiave()
f = Fernet(chiave)
messaggio_bytes = messaggio_cifrato.encode("utf-8")
messaggio_decifrato = f.decrypt(messaggio_bytes)
return messaggio_decifrato.decode("utf-8")
if __name__ == "__main__":
# Legge il testo cifrato da file
with open("messaggio_cifrato.txt", "r", encoding="utf-8") as f:
contenuto_cifrato = f.read().strip()
testo_in_chiaro = decifra_messaggio(contenuto_cifrato)
print("Messaggio decifrato:")
print("---------------------")
print(testo_in_chiaro)
Esegui lo script con:
python3 decifra_email.py
Se la chiave è corretta e il messaggio non è stato alterato, sul terminale verrà mostrato il testo originale in chiaro.
✅ Vantaggi e limiti di questo approccio
L'approccio descritto è ideale per esercitarsi con crittografia e programmazione su Kali Linux, ma è importante comprenderne punti di forza e limiti.
Vantaggi
- semplice da implementare con pochi script Python
- usa crittografia simmetrica robusta fornita da Fernet
- non richiede plugin specifici del client email
- ottimo per esercitazioni e dimostrazioni pratiche di sicurezza
Limiti
- la chiave segreta deve essere condivisa in modo sicuro tra mittente e destinatario
- non sono incluse firme digitali o gestione dell'identità come in sistemi PGP/GPG
- per l'uso in produzione servono log, gestione degli errori e migliore gestione dei segreti
📋 Kali Linux, Python e crittografia: verso flussi più avanzati
L'esempio che abbiamo visto rappresenta un primo passo per comprendere come applicare la crittografia al contenuto delle email. A partire da questa base puoi:
- integrare Python con GnuPG per usare chiavi pubbliche e private in stile PGP
- automatizzare la gestione di allegati cifrati e buste crittografiche
- combinare strumenti difensivi e offensivi tipici di Kali Linux in scenari realistici
Questo approccio ti aiuta a capire come la crittografia si inserisce nei flussi di lavoro quotidiani di sicurezza e come possa essere personalizzata in base alle esigenze.
💡 Conclusioni
In questo articolo abbiamo visto un esempio concreto di crittografia e decodifica di una email utilizzando Kali Linux e Python, passando per:
- generazione di una chiave segreta con Fernet
- cifratura del contenuto della mail
- invio del testo cifrato tramite email
- decifratura lato destinatario con la stessa chiave
Sperimentare questi script ti permette di comprendere meglio la crittografia applicata alle comunicazioni, sviluppare strumenti personalizzati e aumentare la consapevolezza sulla sicurezza delle email.
A partire da questa base puoi evolvere verso soluzioni più avanzate, integrando crittografia a chiave pubblica, firme digitali e automatismi adatti a scenari reali di sicurezza informatica.