Postgresql e dati criptati
🔐 PostgreSQL e pgcrypto: come proteggere i dati con crittografia
Hai visto il mio video su come crittografare i dati in PostgreSQL (👉 https://youtu.be/hIdiw__UUak) e ora vediamo in dettaglio cosa è pgcrypto, a cosa serve e come usarlo concretamente. PostgreSQL è già un database potente e sicuro di suo, ma per alcune esigenze di sicurezza, come cifrare campi sensibili nel database, l’estensione pgcrypto è uno strumento fondamentale. PostgreSQL
📌 Che cos’è pgcrypto?
pgcrypto è un modulo aggiuntivo di PostgreSQL che fornisce funzioni di crittografia, hashing e generazione di dati casuali direttamente dentro il database. È considerato un’estensione “trusted”, quindi può essere installata anche da utenti non superuser che hanno i permessi per creare oggetti nel database. PostgreSQL
In pratica, con pgcrypto puoi:
✅ Calcolare hash sicuri (SHA-256 e altri algoritmi)
✅ Effettuare crittografia simmetrica e asimmetrica
✅ Generare byte casuali o UUID
✅ Hashare password in modo sicuro
Queste funzionalità permettono di proteggere dati sensibili senza doverli gestire esternamente all’applicazione. PostgreSQL
🛠️ Perché usare pgcrypto?
PostgreSQL di default non cifra automaticamente i dati sensibili (come email, numeri di carta o informazioni private). Se vuoi cifrare solo specifici campi all’interno di una tabella, pgcrypto è uno dei modi più diretti per farlo. timescale.com
Ecco alcune situazioni d’uso tipiche:
- Hashing delle password prima di salvarle
- Cifrare campi PII (Personally Identifiable Information)
- Hashing per verifica di integrità
- Generare valori casuali forti (UUID ecc.)
- Protezione di stringhe sensibili nei log o nei risultati di query
🔐 Funzioni principali
🧩 1. Hashing
La funzione digest() calcola un hash di una stringa o dati binari usando algoritmi come SHA-256, SHA-512 o MD5.
SELECT digest('password123', 'sha256');
Questo restituisce un valore binario che puoi memorizzare o confrontare. PostgreSQL
🔐 2. Crittografia simmetrica
Con pgcrypto puoi cifrare e decifrare dati usando una chiave segreta.
Esempio di cifratura:
SELECT pgp_sym_encrypt('mio dato sensibile', 'mia_chiave_segretissima');
Per decifrare:
SELECT pgp_sym_decrypt(campo_cifrato, 'mia_chiave_segretissima');
Questa funzione è utile quando vuoi memorizzare dati che devono poter essere letti nuovamente solo da chi conosce la chiave. timescale.com
🔑 3. Generare valori casuali o UUID
pgcrypto può generare dati casuali crittograficamente sicuri:
SELECT gen_random_bytes(16);
Oppure un UUID versione 4, utile per identificatori univoci:
SELECT gen_random_uuid();
Queste funzioni sono comode quando vuoi identificatori non prevedibili e sicuri. PostgreSQL
🧠 Alcuni accorgimenti importanti
🔹 pgcrypto richiede che PostgreSQL sia stato compilato con supporto OpenSSL — senza OpenSSL l’estensione non sarà disponibile. PostgreSQL
🔹 Tutte le loro funzioni girano dentro il server database, quindi i dati passano in chiaro tra client e server se la connessione non è cifrata (usa sempre SSL). PostgreSQL
🔹 La crittografia non protegge automaticamente tutto il database, ma solo ciò che tu scegli di cifrare con le funzioni appropriate.
📌 Esempio pratico
Diciamo che hai una tabella utenti con l’email che vuoi proteggere:
ALTER TABLE utenti ADD COLUMN email_cifrata bytea;
UPDATE utenti
SET email_cifrata = pgp_sym_encrypt(email, 'chiave_segretissima');
-- Ora puoi anche rimuovere la colonna email in chiaro se non ti serve più
Per leggere l’email:
SELECT pgp_sym_decrypt(email_cifrata, 'chiave_segretissima') AS email
FROM utenti;
Così i dati sensibili restano protetti nel database anche se qualcuno accede alle tabelle senza autorizzazione.
📹 Guarda il video completo
Se vuoi vedere installazione, esempi reali e script passo-passo, guarda il video associato:
👉 https://youtu.be/hIdiw__UUak
In quel tutorial mostro come:
✔ Installare e attivare pgcrypto
✔ Cifrare e decifrare colonne
✔ Capire quando e perché usarlo
✔ Errori comuni da evitare
📌 Conclusione
pgcrypto è una estensione molto utile per PostgreSQL quando hai bisogno di:
✔ Aggiungere crittografia a livello di colonna
✔ Fare hashing sicuro
✔ Generare valori random crittograficamente forti
Non è una “sicurezza magica”: serve capire cosa crittografare e come gestire le chiavi. Ma se fatto correttamente, può migliorare molto la sicurezza dei dati nel tuo database. PostgreSQL
