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)
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.