Capire la crittografia: un’analisi approfondita con esempi di codice

La crittografia è il processo di codifica delle informazioni. Questo processo trasforma la rappresentazione originale delle informazioni, nota come testo in chiaro (plaintext), in una forma alternativa chiamata testo cifrato (ciphertext).

L’obiettivo principale della crittografia è garantire che solo le parti autorizzate possano decifrare il testo cifrato (ciphertext) per riportarlo in testo in chiaro (plaintext) e accedere alle informazioni originali. La crittografia non impedisce intrinsecamente le interferenze, ma nega il contenuto intelligibile a potenziali intercettatori.

Per motivi tecnici, uno schema di crittografia utilizza tipicamente una chiave di crittografia pseudocasuale generata da un algoritmo. Sebbene sia teoricamente possibile decifrare un messaggio senza possedere la chiave, un sistema di crittografia ben progettato richiede notevoli risorse computazionali ed esperienza. Un destinatario autorizzato può decifrare facilmente il messaggio utilizzando la chiave fornita dal mittente, assicurando che gli utenti non autorizzati non possano accedere al contenuto.

🔏 Crittografato significa sicuro?

Anche se la crittografia rafforza notevolmente la sicurezza dei dati, non garantisce una sicurezza assoluta.

*️⃣ Metodo di Crittografia

Il metodo o l’algoritmo utilizzato per la crittografia ne determina la forza. Le moderne tecniche di crittografia, come AES (modalità a 256 bit), TwoFish, ChaCha20-Poly1305 e Serpent (configurabile fino a 512 bit), offrono un’elevata sicurezza. Questi metodi sono progettati per resistere agli attacchi brute-force grazie all’enorme numero di combinazioni di chiavi possibili.

🔢 Lunghezza della Chiave

La lunghezza della chiave di crittografia è un indicatore diretto della solidità della crittografia. Ad esempio, DES (Data Encryption Standard) con una chiave da 56 bit è ormai considerato insicuro a causa della vulnerabilità agli attacchi brute-force. Gli standard moderni di crittografia impiegano chiavi più lunghe, solitamente da 128 bit o più, per garantire un livello di sicurezza adeguato.

🛅 Gestione delle Chiavi

La sicurezza dei dati crittografati dipende anche dalla conservazione e gestione sicura delle chiavi di crittografia. Se le chiavi vengono compromesse, i dati crittografati diventano vulnerabili.

⌨️ Integrità del Sistema

Il dispositivo o il sistema utilizzato per la crittografia deve essere privo di vulnerabilità. Qualsiasi compromissione dell’integrità del sistema può consentire la decrittazione da parte di soggetti non autorizzati.

Uno Sguardo più da Vicino ai Tipi di Crittografia con Esempi di Codice

🔑 Crittografia a Chiave Simmetrica

La crittografia a chiave simmetrica utilizza la stessa chiave sia per la crittografia che per la decrittografia. Sia il mittente che il destinatario devono conoscere e utilizzare la stessa chiave segreta. La principale sfida consiste nel distribuire e gestire la chiave in modo sicuro.

Esempio: AES (Advanced Encryption Standard)

AES è un algoritmo di crittografia simmetrica ampiamente utilizzato. Supporta chiavi da 128, 192 o 256 bit.

Esempio di Codice (Python con libreria PyCryptoDome)

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

key = get_random_bytes(16) # chiave a 128 bit
cipher = AES.new(key, AES.MODE_ECB)
plaintext = “Hello, World!”
ciphertext = cipher.encrypt(plaintext.ljust(16))
print(“Encrypted:”, ciphertext)
decrypted = cipher.decrypt(ciphertext).strip()
print(“Decrypted:”, decrypted.decode())

🗝️ Crittografia a Chiave Pubblica (Asimmetrica)

Nella crittografia asimmetrica si utilizzano due chiavi: una chiave pubblica e una chiave privata. La chiave pubblica viene usata per crittografare, mentre quella privata per decrittografare. La chiave pubblica può essere condivisa liberamente, consentendo a chiunque di crittografare un messaggio, ma solo il possessore della chiave privata può decifrarlo.

Esempio: RSA (Rivest–Shamir–Adleman)

RSA è uno dei primi sistemi di crittografia a chiave pubblica pratici.

Esempio di Codice (Python con libreria PyCryptoDome)

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()

recipient_key = RSA.import_key(public_key)
cipher_rsa = PKCS1_OAEP.new(recipient_key)
ciphertext = cipher_rsa.encrypt(b”Hello, World!”)
print(“Encrypted:”, ciphertext)

sender_key = RSA.import_key(private_key)
cipher_rsa = PKCS1_OAEP.new(sender_key)
decrypted = cipher_rsa.decrypt(ciphertext)
print(“Decrypted:”, decrypted.decode())

#️⃣ Funzioni di Hash

Le funzioni di hash prendono un input e restituiscono una stringa di byte di dimensione fissa. L’output, tipicamente chiamato digest, è unico per ogni input fornito. È una funzione unidirezionale, il che significa che non è possibile risalire ai dati originali. Questa proprietà è utile per la verifica dei dati, l’archiviazione di password e altro.

Esempio: SHA-256 (Secure Hash Algorithm 256-bit)

SHA-256 è una funzione di hash crittografica che produce un valore hash di 256 bit (32 byte).

Esempio di Codice (Python)

import hashlib

data = “Hello, World!”
hashed = hashlib.sha256(data.encode()).hexdigest()
print(“Hashed:”, hashed)

♦️ Tokenizzazione

La tokenizzazione sostituisce i dati sensibili con segnaposto o token non sensibili. A differenza della crittografia, dove è possibile recuperare i dati originali, la tokenizzazione non consente la reversibilità senza accedere al sistema di tokenizzazione originale.

Esempio

Tokenizzazione dei numeri di carta di credito in un sistema di pagamento.

Esempio di Codice (Python)

import uuid

class TokenizationSystem:
def __init__(self):
self.data_store = {}

def tokenize(self, data):
token = str(uuid.uuid4())
self.data_store[token] = data
return token

def detokenize(self, token):
return self.data_store.get(token, None)

system = TokenizationSystem()
token = system.tokenize(“1234-5678-9012-3456”)
print(“Token:”, token)
print(“Original Data:”, system.detokenize(token))

🗃️ Crittografia a Riposo vs. in Transito: Un’Analisi Completa

Le due principali forme di crittografia che le organizzazioni dovrebbero conoscere sono la “crittografia a riposo” e la “crittografia in transito”. Comprendere la differenza tra le due è fondamentale per garantire la sicurezza dei dati in vari scenari. Utilizzeremo l’approccio di Google per spiegare la distinzione.

😶 Crittografia a Riposo: Il Guardiano Silenzioso dei Dati Archiviati

Immagina le enormi quantità di dati archiviati su supporti fisici, come dischi rigidi, SSD o nastri di backup. Questi dati, quando statici e conservati, sono vulnerabili a minacce come furto del dispositivo, perdita o accesso fisico non autorizzato. La crittografia a riposo agisce come un guardiano silenzioso. Utilizzando algoritmi di crittografia simmetrica come l’AES (Advanced Encryption Standard), i dati vengono crittografati prima di essere scritti su disco. Quando un’entità autorizzata deve accedervi, i dati vengono decifrati, garantendo che restino protetti da occhi indiscreti.

L’approccio di Google alla Crittografia a Riposo

La strategia di Google per la crittografia a riposo è sia completa che robusta. Nei servizi Google Cloud, i dati vengono crittografati a riposo per impostazione predefinita. Il gigante tecnologico non si limita all’uso di AES: gestisce anche le chiavi crittografiche per conto dei clienti, sia tramite la crittografia predefinita di Google, sia con chiavi fornite dai clienti stessi.

〰️ Crittografia in Transito: Lo Scudo per i Dati in Movimento

Mentre la crittografia a riposo protegge i dati statici, cosa succede ai dati in movimento? Quando i dati vengono trasmessi tra luoghi diversi — ad esempio su Internet o tra data center — sono soggetti a intercettazioni. La crittografia in transito funge da scudo per i dati in movimento. Protocolli come Transport Layer Security (TLS) o Secure/Multipurpose Internet Mail Extensions (S/MIME) per la crittografia delle email vengono comunemente utilizzati per garantire che i dati rimangano sicuri durante il trasferimento.

L’approccio di Google alla Crittografia in Transito

L’approccio di Google alla crittografia in transito dimostra il suo impegno per la sicurezza dei dati. L’azienda garantisce che i dati che si muovono al di fuori dei confini fisici sotto il suo controllo siano crittografati. Le comunicazioni di Google Front End (GFE) con gli utenti sono protette da TLS. Ma gli sforzi di Google non si fermano qui: l’azienda promuove la crittografia in transito anche attraverso progetti open-source come Certificate Transparency e le API di Chrome. All’interno della sua infrastruttura, Google utilizza il proprio Application Layer Transport Security (ALTS) per l’autenticazione, l’integrità e la crittografia delle chiamate RPC. Inoltre, il protocollo di sicurezza PSP viene impiegato per la crittografia di rete, garantendo non solo la sicurezza per connessione ma anche l’offload della crittografia su hardware SmartNIC.

🔣 Perché la Crittografia è Importante per la Conformità al GDPR

Nel contesto della protezione dei dati e della privacy, il Regolamento Generale sulla Protezione dei Dati (GDPR) rappresenta una pietra miliare nell’Unione Europea. Uno dei principi fondamentali del GDPR è garantire la sicurezza e la riservatezza dei dati personali. La crittografia svolge un ruolo essenziale in questo senso. Criptando i dati personali, le organizzazioni possono proteggerli da accessi non autorizzati, violazioni e possibili abusi. In caso di violazione dei dati, le informazioni crittografate rimangono illeggibili e inutili per terzi, riducendo il rischio di compromissione dei dati personali.

Inoltre, il GDPR menziona esplicitamente la crittografia come misura consigliata all’articolo 32, sottolineandone l’importanza nella protezione dei dati. Le organizzazioni che adottano pratiche di crittografia solide non solo rafforzano i propri meccanismi di sicurezza, ma dimostrano anche il proprio impegno verso i principi del GDPR, potenzialmente riducendo sanzioni e responsabilità legali in caso di violazioni. In sostanza, la crittografia agisce sia come scudo che come testimonianza dell’impegno di un’organizzazione verso la privacy e la conformità normativa.

“…la capacità di garantire la riservatezza, l’integrità, la disponibilità e la resilienza dei sistemi e dei servizi di trattamento; la capacità di ripristinare la disponibilità e l’accesso ai dati personali in tempi rapidi in caso di incidente fisico o tecnico; un processo per testare, valutare e verificare regolarmente l’efficacia delle misure tecniche e organizzative per garantire la sicurezza del trattamento. Nel valutare il livello adeguato di sicurezza si devono considerare in particolare i rischi derivanti dal trattamento, in particolare dalla distruzione accidentale o illecita, perdita, alterazione, divulgazione o accesso non autorizzato ai dati personali trasmessi, conservati o altrimenti trattati.”

other stories

See More Articles

Pronti a fare il prossimo passo? Raccontaci il tuo progetto. ➜

La tua sottoscrizione non può essere convalidata.
La tua richiesta è stata inviata con successo.
Il campo SMS deve contenere tra i 6 e i 19 caratteri e includere il prefisso del paese senza usare +/0 (es. 39xxxxxxxxxx per l'Italia)
?