martedì 15 marzo 2016

Basi Di Crittografia #3 - Criptare Un File

Eccoci con un fresco articolo sulla crittografia. Questa parte sarà molto pratica e per niente noiosa, vedremo infatti in maniera approfondita come criptare un file con una nostra funzione personalizzata.

Criptare un file

Perché è importante criptare un file? Perché se esso contiene informazioni sensibili (come ad esempio la tua email e la tua password) allora deve essere reso più sicuro e magari illegibile per chi mette le mani sul file.

Ipotizziamo che sul tuo PC ci sia il file "varie.txt", il suo contenuto è il seguente:
Email: mia-email@email.it
Password: 123password123
Questo file sarà una delizia per chi lo aprirà e lo leggerà, infatti egli avrà accesso alla tua email visto che ora conosce le tue credenziali di login. In che modo avrà accesso al file non è interesse di questa guida, infatti ci sono tantissimi metodi per farlo: con un RAT, oppure semplicemente avendo accesso fisico al tuo PC (se te lo rubano, ad esempio).

Questo è uno dei tanti motivi per cui è buona cosa criptare un file che contiene dati sensibili.

Ovviamente, in questa guida scriveremo una funzione semplice ed elementare per criptare un file, esistono tantissime altre funzioni più affidabili. Basta googlare.

Esempio in Python

Cosa dovrà fare il nostro codice:

  1. Impostare la chiave con cui cripteremo e quella con cui decripteremo i file (le memorizziamo nelle variabili "chiaveDiCifratura" e "chiavePerDecriptare" rispettivamente). La nostra chiave di cifratura potrà essere qualsiasi vettore numerico, nel nostro esempio sarà (2, 8, -1, 4). La chiave per decriptare sarà, quindi, la sua inversa ovvero (-2, -8, 1, -4).
  2. Aprire il file da criptare (o decriptare) in modalità lettura.
  3. Leggere il suo contenuto e memorizzarlo in una variabile (che chiameremo "contenuto").
  4. Chiudere il file.
  5. Criptare la variabile "contenuto" (che altro non è che una stringa, ed è proprio il contenuto del file letto) con la chiave memorizzata nella variabile "chiaveDiCifratura". Il contenuto verrà criptato una con la funzione creata nella parte precedente modificata in modo da poter criptare non solo lettere minuscole ma anche le maiuscole e i caratteri speciali (come lo spazio, @, =, !, ecc...). Ecco la nuova funzione: link al codice. Non dovrebbero esserci problemi nel comprenderla.
  6. Memorizzare il contenuto criptato nella variabile "contenutoCriptato".
  7. Aprire il file in modalità scrittura.
  8. Scrivere nel file il "contenutoCriptato".
  9. Chiudere il file.
Ecco il codice completo che ne risulta:

chiaveDiCifratura = (2, 8, -1, 4)
chiavePerDecriptare = (-2, -8, 1, -4)
def cripta(stringa, chiave):
    stringaCifrata = ""
    i = 0
    for lettera in stringa:
        stringaCifrata += chr((ord(lettera) + chiave[i]) % 128)
        i += 1
        if i >= len(chiave):
            i = 0
    return stringaCifrata

def criptaFile(nomeFile):
    f = open(nomeFile, "r")
    contenuto = f.read()
    f.close()
    contenutoCriptato = cripta(contenuto, chiaveDiCifratura)
    f = open(nomeFile, "w")
    f.write(contenutoCriptato)
    f.close()

def decriptaFile(nomeFile):
    f = open(nomeFile, "r")
    contenuto = f.read()
    f.close()
    contenutoCriptato = cripta(contenuto, chiavePerDecriptare)
    f = open(nomeFile, "w")
    f.write(contenutoCriptato)
    f.close()
Link al codice.

Nota: l'unica differenza tra la funzione criptaFile() e decriptaFile() è che la prima cripta con la "chiaveDiCifratura" mentre la seconda cripta con la "chiavePerDecriptare".

Ora, se vuoi criptare un file (nel nostro esempio il file si chiama "varie.txt") ti basta inserire in fondo al codice:
criptaFile("varie.txt")
ed avviare lo script.

Mentre se vuoi decriptare un file che hai già criptato in precedenza ti basterà aggiungere:
decriptaFile("varie.txt")
ed avviare lo script.

Conclusioni

Questa parte della guida sulla crittografia è stata prevalentemente pratica, la prossima, invece, sarà più teorica. Il mio consiglio è quello di non saltare la teoria perché è utile tanto quanto la pratica.

Nella prossima parte vedremo come creare funzioni di cifratura non reversibili.

Se hai dubbi, domande o problemi col codice non esitare a scrivere nei commenti.

< Parte 2  |  Parte 4 (non ancora disponibile) >

3 commenti:

  1. Complimenti bellissima guida.

    Ti volevo chiedere che ne pensi del programma di compressione 7zip che permette di proteggere un file con la pass ???
    Mi piacerebbe sapere la tua opinione
    Ti ringrazio e buon lavoro :)

    RispondiElimina
    Risposte
    1. Buono, come qualsiasi altro programma di compressione zip (tipo winZip).

      Elimina
  2. Ciao, una domanda. Ho lanciato lo script nella parte per criptare, ma non succede niente, il file txt rimane inalterato. Volevo sapere se dobbiamo dichiarare il percorso dove si trova il file, e nel caso vada fatto qual'è la giusta sintassi?
    Grazie :)

    RispondiElimina