Postgresql e dati criptati

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