Quali sono le differenze tra encoding, encryption e hashing?

quali sono le differenze tra encoding, encryption e hashing?

Esiste spesso molta confusione riguardo le differenze tra encoding, encryption e hashing. Approfondiamo innanzitutto ciascun concetto per poi analizzare in seguito in cosa si differenziano l’uno dall’altro.

Nonostante infatti siano tutte tecniche per convertire dati da una forma ad un’altra, esse possiedono differenze sostanziali e, nello specifico, non possono essere equivalentemente utilizzate nel caso in cui siano necessari particolari requisiti di sicurezza all’interno del vostro sistema o applicazione.

ENCODING

Lo scopo dell’encoding è quello di trasformare un dato in modo che possa essere consumato in modo appropriato e sicuro da un differente tipo di sistema.

Tale tecnica è principalmente usata nei sistemi di data storage o nei casi in cui debbano essere inviati dati in forma di testo, ad esempio via e-mail, oppure per la visualizzazione di caratteri speciali su una pagina web.

Lo scopo non è quello di mantenere l’informazione segreta, bensì che possa essere utilizzata da sistemi differenti!

L’encoding trasforma i dati in forme diverse utilizzando uno schema che è disponibile a tutti al fine di poter facilmente ricavare il valore originale. Per ottenere il valore iniziale non è necessaria una chiave ma è sufficiente soltanto conoscere l’algoritmo che è stato utilizzato per encodare il dato.

Esempi: URL Encoding, JSON Encoding, Base64, ASCII, UNICODE

Esempio di Base64 Encoding:

Per ottenere il valore originale a partire dalla stringa encodata è sufficiente utilizzare ad esempio un qualunque servizio online che effettui il Base64 Decoding, come https://www.base64decode.org/:

Base64 Decoding

ENCRYPTION

Lo scopo della cifratura è quello di trasformare un dato in modo che il suo contenuto venga reso segreto per tutti ad eccezione del destinatario previsto.

Il dato soggetto a cifratura viene chiamato plaintext, mentre il risultato generato in seguito ad algoritmo di cifratura viene definito ciphertext.

L’operazione di cifratura viene effettuata tramite l’utilizzo di una chiave che deve essere tenuta segreta.

Sulla base della chiave utilizzata, possono essere individuati due tipi di cifratura:

  • A chiave simmetrica
  • A chiave asimmetrica

Cifratura a chiave simmetrica

La cifratura a chiave simmetrica rappresenta un metodo semplice per cifrare testo in chiaro dove la chiave di cifratura è la stessa utilizzata per la fase di decifratura, rendendo l’algoritmo molto performante e semplice da implementare.

Lo scambio della chiave deve avvenire tuttavia attraverso algoritmi a chiave asimmetrica, più complessi da implementare e da eseguire, ma che consentono questo tipo di scambio in modo sicuro.

Cifratura a chiave simmetrica

Esempi: AES, DES (Obsoleto), 3DES (Obsoleto)

Cifratura a chiave asimmetrica

La cifratura asimmetrica è un tipo di crittografia dove ad ogni attore coinvolto nella comunicazione è associata una coppia di chiavi:

  • la chiave pubblica, che deve essere distribuita;
  • la chiave privata, appunto personale e segreta;

Il meccanismo si basa sul fatto che, se con una delle due chiavi si cifra un messaggio, allora quest’ultimo sarà decifrato solo con l’altra.

Cifratura a chiave asimmetrica

Esempi: RSA, Diffie-Hellman, ElGamal

HASHING

Lo scopo dell’hashing è quello di assicurare l’integrità del dato, in modo da avere la garanzia che qualunque modifica effettuata al dato originale possa essere facilmente individuata.

Tecnicamente, l’hashing prende un input arbitrario e produce una stringa di lunghezza fissa avente i seguenti attributi:

  • Lo stesso input produce sempre lo stesso output
  • Molteplici input differenti non dovrebbero produrre lo stesso output
  • Non deve essere possibile ottenere l’input a partire dal dato di output
  • Qualunque modifica effettuata sul dato in input dovrebbe risultare in un cambiamento sostanziale dell’hash risultante ottenuto

L’hashing è tipicamente utilizzato insieme a meccanismi di autenticazione in modo da fornire prove concrete che il messaggio non sia stato modificato e, inoltre, che sia stato inviato dalla persona corretta (firma digitale).

Ciò avviene prendendo un input, effettuandone l’hash e quindi firmando l’hash con la chiave privata del mittente.

Quando il destinatario apre il messaggio, può validare la firma dell’hash tramite la chiave pubblica del mittente, quindi effettuare egli stesso l’hash della stringa in modo da confrontarlo con quello firmato dal mittente. Se corrispondono significa che il messaggio non è stato modificato ed è stato inviato dalla persona corretta.

Esempi: SHA-512, MD5 (Obsoleto)

Firma digitale
Verifica firma digitale

CONCLUSIONI

Encoding, encryption e hashing, pur avendo come caratteristica comune quella di trasformare i dati da una forma ad un’altra, devono essere utilizzati avendo bene in mente i loro differenti scopi.

Nello specifico:

  • Encoding: ha lo scopo di trasformare un dato in una forma che possa essere utilizzata facilmente anche da altri sistemi; non possiede alcuna caratteristica di sicurezza in quanto è possibile ricavare facilmente il valore relativo originale;
  • Cifratura: ha lo scopo di assicurare la segretezza di un messaggio in modo che esso possa essere decifrato solo dal destinatario previsto;
  • Hashing: ha lo scopo di verificare l’integrità di un messaggio, in modo che qualunque modifica effettuata su di esso sia facilmente individuabile; può essere inoltre utilizzato insieme a meccanismi di autenticazione per la realizzazione di una firma digitale.

QUANTO NE SAI SULLA SICUREZZA INFORMATICA?
Metti alla prova la tua conoscenza per non cadere nelle trappole dei cyber criminali!