Oggi mi sono immersa nel concetto di k-anonymity.
La k-anonymity è una tecnica che permette di proteggere i dati sensibili garantendo che ogni individuo sia indistinguibile da almeno k altre persone. È come nascondersi in una folla: se un dato appare almeno k volte, diventa impossibile identificare chi ci sia dietro.
Immagina un database come una gigantesca illustrazione di "Dov’è Wally?": prima, ogni persona ha dettagli unici che la rendono facilmente riconoscibile. Con la k-anonymity, invece, ogni Wally si confonde tra decine di altri con la stessa maglietta a righe e berretto. Trovarlo diventa praticamente impossibile!
⚙️ Dalle persone alle password:
il ruolo dell’hashing e della k-anonymity
La stessa logica si applica alla protezione delle password. Per verificarne la sicurezza senza inviarla in chiaro, ho creato uno script che utilizza l’API di Have I Been Pwned e il metodo delle prime 5 cifre dell’hash, una pratica che rientra perfettamente nella k-anonymity.
🔑 Come funziona:
1️⃣ La password viene trasformata in un hash SHA-1.
2️⃣ Si inviano solo le prime 5 lettere dell’hash all’API.
3️⃣ L’API restituisce tutti gli hash che iniziano con quella sequenza.
4️⃣ Localmente, si controlla se la parte restante dell’hash corrisponde a uno degli hash compromessi.
💡 Ma cos’è esattamente un hash?
Una funzione hash trasforma un input di qualsiasi lunghezza in una stringa di lunghezza fissa (es. SHA-1 restituisce sempre 40 caratteri esadecimali). Questo processo è irreversibile per design, grazie a una serie di passaggi complessi:
- 🔄 Mescolamento: Ogni bit influisce su molti altri bit del risultato finale.
- 📏 Compressione: L’input viene ridotto a una lunghezza fissa, causando perdita di informazioni.
👉 È come fare una spremuta: puoi spremere l’arancia, ma non puoi ricostruirla dal succo! 🍊
🌪 Effetto valanga:
Anche un singolo cambiamento nell’input genera un hash completamente diverso.
Ad esempio:
`password123 → CBFDAC6008F9CAB4083784CBD1874F76618D2A97`
`password124 → 4B2ADDDCC8993F3BB7244AF7A8C8B44B322B1A84`
🚫 Non esistono chiavi segrete:
A differenza della crittografia, l’hash non usa chiavi. L’unico modo per risalire all’input originale è tentare tutte le combinazioni possibili, come provare ogni pezzo di un puzzle alla cieca.
💪 K-Anonymity e Hashing insieme:
Quando il mio script invia solo le prime 5 lettere dell’hash (CBFDA), sta applicando la stessa logica della k-anonymity: senza la parte restante, è impossibile sapere quale fosse la password originale, perché ogni hash corrisponde a migliaia di possibili input.
Insomma, la prossima volta che cerchi Wally in un mare di dati anonimi, ricordati che non è solo un gioco… è sicurezza! 😉
Qui il link alla mia repository contenente lo script