Crittografia per neofiti: capire le basi
La crittografia è la tecnica per proteggere le informazioni trasformandole in un formato sicuro, noto come “cifratura”, che nasconde il vero significato dei dati crittografati. Il processo inverso, noto come “decifratura”, rende le informazioni di nuovo leggibili. Questa pratica è fondamentale nella protezione delle comunicazioni digitali e nella salvaguardia dei dati.
I principi della crittografia
La crittografia si basa su due concetti chiave: la chiave di cifratura e la chiave di decifratura. Nella crittografia simmetrica, la stessa chiave viene utilizzata sia per cifrare che per decifrare i dati. Nella crittografia asimmetrica, invece, vengono utilizzate due chiavi diverse: una pubblica per cifrare e una privata per decifrare.
Esempi di codice in Python
Vediamo un semplice esempio di crittografia simmetrica in Python:
from Crypto.Cipher import AES
import base64
# Key and data to encrypt
key = 'ThisIsAKey12345'
data = 'Secret Message'
# Create an AES cipher object
cipher = AES.new(key, AES.MODE_CBC, '16charInitVector')
# Encrypt and encode in base64
encrypted_data = base64.b64encode(cipher.encrypt(data))
print(f'Encrypted data: {encrypted_data}')
# Decryption
decryptor = AES.new(key, AES.MODE_CBC, '16charInitVector')
decrypted_data = decryptor.decrypt(base64.b64decode(encrypted_data)).strip()
print(f'Decrypted data: {decrypted_data}')
In questo esempio abbiamo prima di tutto importato le librerie necessarie, poi definito una chiave (key) e un messaggio (data). AES (Advanced Encryption Standard) è l’algoritmo che abbiamo utilizzato per cifrare il messaggio per poi codificarlo in base64 rendendolo sicuro per la trasmissione o la memorizzazione.
Trattandosi di crittografia simmetrica abbiamo utilizzato la stessa chiave anche per decifrare i dati.
Esempio di codice in PHP
La stessa cosa può essere fatta anche in PHP, vediamo come:
// Key and data to encrypt
$key = 'ThisIsAKey12345';
$data = 'Secret Message';
// Pad the data to be a multiple of AES block size
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $blockSize - (strlen($data) % $blockSize);
$data .= str_repeat(chr($pad), $pad);
// Create an AES cipher object with CBC mode
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
// Initialize encryption
mcrypt_generic_init($cipher, $key, '16charInitVector');
// Encrypt and encode in base64
$encryptedData = base64_encode(mcrypt_generic($cipher, $data));
echo 'Encrypted data: ' . $encryptedData . "\n";
// Initialize decryption
mcrypt_generic_init($cipher, $key, '16charInitVector');
// Decrypt and decode from base64
$decryptedData = mdecrypt_generic($cipher, base64_decode($encryptedData));
// Unpad the data
$pad = ord($decryptedData[strlen($decryptedData) - 1]);
$decryptedData = substr($decryptedData, 0, -1 * $pad);
echo 'Decrypted data: ' . $decryptedData;
Nel codice PHP iniziamo definendo la chiave e i dati da cifrare, come fatto con Python. Successivamente, per assicurarci che la lunghezza dei dati sia un multiplo della dimensione del blocco AES, eseguiamo un “padding” dei dati. Questo è necessario perché AES è un algoritmo a blocchi e richiede dati di dimensioni fisse.
Il codice utilizza varie funzioni (mcrypt_get_block_size, mcrypt_module_open, mcrypt_generic_init e mcrypt_generic) per creare e inizializzare l’oggetto in modalità CBC (Cipher Block Chaining), e poi per cifrare i dati. Dopo la cifratura, i dati vengono codificati in base64 per renderli sicuri per la trasmissione o la memorizzazione.
Per la decifratura, lo stesso processo viene ripetuto al contrario. I dati cifrati vengono prima decodificati dalla loro forma base64, e poi decifrati usando le stesse funzioni mcrypt. Infine, viene rimosso il padding per ottenere il messaggio originale.
Questi esempi in Python e PHP dimostrano quanto sia relativamente semplice implementare tecniche di crittografia di base. Tuttavia, è fondamentale ricordare che la sicurezza dei dati non si limita alla sola crittografia. Una buona pratica di sicurezza include la gestione adeguata delle chiavi, la comprensione delle minacce e l’uso di protocolli di sicurezza aggiornati.
More from Guide alla sicurezza
Cos’è il Cross-Site Scripting (XSS), quali tipi esistono e come proteggersi?
il cross-site scripting (XSS) è una grave vulnerabilità che permette agli hacker di iniettare script dannosi nelle applicazioni web. copre …
Scegliere un nome utente sicuro
Un nome utente sicuro è vitale per la protezione online. Evitare informazioni personali, separare l'username dall'indirizzo email, e garantire unicità …