Memorie e salvataggio

In un computer i dati sono contenuti nelle memorie. Le memorie possono essere volatili (come la RAM, che contiene programmi e dati che si stanno usando, e che si svuota allo spegnimento del computer) oppure non volatili (come l’hard disk, che conserva i dati anche quando il computer è spento).
Quando salviamo i dati, operazione piuttosto frequente, questi passano da una memoria volatile ad una non volatile.
Esistono dei software che salvano autonomamente e automaticamente i dati, altri invece che richiedono un’azione dell’utente.
I dati sono contenuti nelle memorie sotto forma di archivi detti “file”.

File e codifiche

Esistono moltissimi tipi di file, ciascuno di essi caratterizzato da una specifica codifica. Ne abbiamo parlato anche nell’articolo Introduzione al digitale. Altre informazioni sulle codifiche, in particolare sulle codifiche per i file di solo testo, si trovano nell’articolo Tracciati, flussi e file di solo testo.
Il sistema operativo, uno dei cui compiti è semplificare la vita all’utente, riconosce la codifica e associa una immagine al file, la cui icona diventa un facile sistema per l’utente per distinguere visivamente il tipo di file. Nei sistemi Microsoft ciò si ottiene anche attraverso la specifica di una estensione del file come ad esempio “.docx” per Word. Oltre a questo, naturalmente, l’utente deve scegliere un nome per il file.

Nomi dei file

Alcuni sistemi operativi (come Windows) non fanno differenza fra maiuscole e minuscole nei nomi dei file (quindi nella stessa cartella non possono esistere contemporaneamente il file nonna.jpg e il file NonnA.jpg), altri sistemi operativi (come linux) fanno differenza fra maiuscole e minuscole nei nomi dei file e sono detti “case sensitive”.

Non è (più) obbligatorio, ma esistono alcune consuetudini (di noi nerd :-)) riguardo ai nomi dei file:

  • non usare mai spazi nel nome di un file
  • non usare mai le lettere maiuscole
  • scegliere un nome il più breve possibile (i puristi amano ancora i nomi 8.3 ossia otto caratteri per il nome e tre per l’estensione)

File signature (magic number)

Se il sistema operativo non riconoscesse il formato e la codifica di un file, per poterne interpretare il contenuto può essere utile un editor esadecimale. Si tratta di un software in grado di mostrare i singoli byte all’interno del file, trattandolo come un file binario (ossia senza interpretarne o eseguirne il contenuto). Per comodità di lettura, invece di mostrare lunghe sequenze binarie (ricordiamoci che per un solo carattere alfabetico servono ben 8 bit), il contenuto del file viene mostrato in formato esadecimale (impiegando sul nostro monitor solo un quarto dello spazio altrimenti necessario).

Ogni file ha una firma (signature) che si trova nei primi byte. Questa firma permette di riconoscere la codifica utilizzata nel file stesso.
Ad esempio “FF D8” corrisponde ad un file JPEG. Oppure “25 50” ad un file PDF. Una lista di firme per i file più comuni è disponbile all’indirizzo https://en.wikipedia.org/wiki/List_of_file_signatures.

File eseguibili

Un file che contiene istruzioni in linguaggio macchina, ovvero un file che permette di avviare un programma, è detto file eseguibile. Nei sistemi Windows si tratta ad esempio dei file con estensione .exe, .com. Nei sistemi linux invece ogni file può essere eseguibile, dipende dai permessi ad esso associati.

Hash, digest, checksum

Una funzione di hash utilizza un algoritmo (come ad esempio MD5 o SHA-256) che trasforma una stringa, di uno o più caratteri, in una stringa di lunghezza fissa, detta digest. Si dice che il processo

  • è irreversibile, nel senso che non esiste una funzione che permette di tornare alla stringa di partenza;
  • è deterministico, nel senso che la stessa stringa, data in input allo stesso algoritmo, darà sempre il medesimo output.

Per le caratteristiche appena viste, le funzioni di hash vengono utilizzate ad esempio:

  • per salvare le password in un database: le password non saranno salvate in chiaro (altrimenti chi accedesse al database potrebbe leggerle), ma verranno salvate nel formato ottenuto dopo aver applicato la funzione di hash; quando un utente farà login, la password sarà trasformata in maniera da permettere il confronto con quella salvata nel database (che era stata già trasformata);
  • per assicurarsi che non sia stato modificato il contenuto di partenza (inavvertitamente o meno) dopo
    • un salvataggio di dati
    • un download
    • una trasmissione di dati

Le funzioni di hash sono più sicure rispetto al tradizionale checksum, il quale, usato per assicurarsi che non vi siano stati errori di trasmissione dati, è un metodo non adeguato in termini di cybersecurity. Anche nel caso di checksum il valore risultante è detto digest. Uno dei metodi per il calcolo del checksum è il CRC (Cyclic Redundancy Check) e spesso si trova anche l’acronimo CRC per indicare il valore risultante.

Di una applicazione delle funzioni di hash parliamo nel nostro articolo sulla blockchain.

Bibliografia:
– Rossignoli, N., Introduzione all’informatica, Lampidistampa, Milano, 2007
– Rossignoli, N., Aucone, M., Materiali per gli studenti degli Hacker Summer Camp, Verona, 2012

Immagine: Photo by Nicola Rossignoli