Matteo Vignoli

Sviluppatore Web Full-Stack autodidatta, curioso per natura,
attualmente impiegato a Milano in ContactLab

E' ora di smetterla di salvare le password in chiaro

  Tempo di lettura:

Niente, ci risiamo.
Anno Domini 2019, ma questa cosa delle password in chiaro alcuni proprio non la riescono a capire.

Oggi stavo cercando dei coupon sconto di un noto produttore di latticini ma, non ricordando la password, ho usato la funzionalità di recupero disponibile sul loro sito.
Pochi secondi dopo ricevo questa mail:

galbani

Eccola lì, la mia bella password 😡.

Lo so, non sono certo gli unici, ne ho visti tanti che fanno orrori di questo tipo, tant'è che esiste pure un sito che li espone senza remore al pubblico ludibrio (http://plaintextoffenders.com/).

Diciamo che è questo è un casus belli, è capitato fresco fresco e non stiamo neanche parlando del sitarello che t'ha fatto tuo cugggino ma di un grande nome - anche se famoso in un altro ambito invece che quello tecnologico.

I problemi qui sono almeno due.

Primo, l'email non è un mezzo sicuro.
Non mandate password o altri dati sensibili: basta una password rubata, un occhio indiscreto alle vostre spalle, o Google che vi legge i messaggi per perfezionare i propri annunci ed ecco che la sicurezza se ne va in fumo.

Secondo, ed è quello più grave, è che se riesci a mandarmi la password che sto usando, perfettamente leggibile ed in chiaro, significa solo due cose:

  1. la password è salvata così com'è nei vostri database, magari nella stessa fila in cui c'è anche la mia email. Così se qualcuno riesce a rubarvi i dati non deve neanche fare lo sforzo di associare, che so, un ID numerico con una password - sono tutti lì pronti e belli formattati.
  2. la password è criptata in maniera reversibile. Tralasciamo per un secondo il fatto che questa soluzione, anche se all'apparenza soddisfacente, non è affatto sicura. Vediamo piuttosto gli scenari che si aprono:
  • la criptazione è solo un banale offuscamento, con vari gradi di complessità. Se fatte l'encoding in Base64 è come non farlo, lo stile si riconosce subito e lo decodifica anche il mio gatto (pace all'anima sua)
  • la criptazione è effettuata con una chiave privata. La chiave può stare sui vostri server (livello sicurezza "porta chiusa a 4 mandate") oppure è una stringa buttata lì nella stessa riga in cui c'è la password (livello sicurezza "porta spalancata") Senza ora voler vedere il male dappertutto, ma basta che fate incazzare un sistemista che sa dov'è la chiave, o uno sviluppatore che conosce quella parte di codice in cui viene effettuata la decriptazione (per l'invio all'utente) e siamo punto e a capo.
  • la criptazione è effettuata con un sistema "custom", di cui solo voi conoscete l'algoritmo, e che quindi non può essere decriptata con i sistemi attualmente presenti. Questo è quello che di solito viene chiamato "security through obscurity", ossia la falsa convinzione che se nessuno sa come avete nascosto una cosa è come se fosse impossibile trovarla. Il che è sbagliato per diverse ragioni, ma principalmente: a) i bug sono presenti nei sistemi più rodati, figuriamoci in uno custom e b) il fatto che non si capisca come è stato messo in sicurezza ha alla base, comunque, qualcuno che ha sviluppato il sistema o l'algoritmo (e che quindi SA) o qualcuno - qualche povero disgraziato - che dovrà in futuro (e che quindi SAPRA') mettere mano al suddetto sistema per effettuare modifiche/verifiche/fix o qualsiasi altra cosa.

Spero che sia un pochino più chiaro, adesso, il perchè una password criptata non sia un criterio di sicurezza sufficiente.

Ma poi, direte, che è tutto sto accanimento? Che me ne faccio io dei tuoi dati, mi scarico i coupon per la mozzarella a nome tuo?
No, il punto non è quello.
Il punto è che molte persone usano la stessa password per più sistemi, quindi se ne vedo una qui posso provarla da altre parti (per la posta, ad esempio) ed è anche probabile che mi vada bene.
Entrare nella posta di un'altra persona rende meglio la gravità del pericolo, che ne dite?

Non ricordo adesso la fonte, ma ho letto da qualche parte che oggi un utente ha a che fare con una media di almeno 200 password diverse che deve ricordare, e a meno di non usare un password manager (e stiamo della fetta più "tecnologicamente cosciente" degli utenti) andrà a finire che molte di queste password saranno uguali, o la stessa con un numero sequenziale dopo (pippo, pippo1, pippo2) o comunque parole semplici da ricordare - e quindi semplici anche da indovinare con un poco di psicologia (data di nascita? il nome della dolce metà?)

E tutto questo soltanto perchè non hai voluto spendere qualche euro in più per mettere su un sistema che mi permette di rigenerare la password, che tecnicamente è poco complesso e porta via una frazione di tempo in più per l'utente - ma ne guadagna infinitamente in sicurezza.
Poi oh, tutti d'accordo sul fatto che se l'utente usa "qwerty2" come password nuova la sicurezza rimane a livello "cancello alto mezzo metro", ma almeno spostiamo la responsabilità, in parte, sull'utente (qui ci sarebbe poi tutto il discorso sull'imposizione di un controllo sulla forza delle password ecc. ma esula dal post)

Ah, per chi se lo domanda, lo dico in due parole semplici: le password vanno salvate con un hash, perchè è una combinazione irreversibile ed univoca(1) - ogni stringa genera uno ed un solo hash, ma da quell'hash non si può risalire alla stringa originale. Si verifica se una password è uguale a quella inserita semplicemente rifacendo l'hashing e confrontandolo con quello salvato. Anche la discussione su quale algoritmo usare è molto lunga, in breve comunque md5 è un NO grande come una casa, sha-1 grande quasi altrettanto (2).

Insomma, fatemi/ci un favore: mettete un semplice recupero password, o meglio ancora delegate l'autenticazione ad un provider esterno come Google o Facebook: avrete il duplice vantaggio di non dover costringere l'utente a creare un'altra password che scorderà presto e vi risparmierà un bel po' di rotture di balle in ambito sicurezza e privacy.

Grazie.

(1) C'è la questione delle "collision", ossia due stringhe che generano un hash uguale. Alcuni algoritmi (fra cui md5 e sha, ad esempio) hanno delle collision dimostrate, e quindi non sono più considerati sicuri
(2) Collision e complessità a parte, c'è anche il problema per cui si trovano abbastanza facilmente su internet delle Rainbow Table contenenti gli hash in md5 (e non solo) di un'infinità di parole, combinazioni e password trafugate.
Avete la password "nutella22" (md5: dfc6bc570335243534e568440ef0d66b)? Cambiatela).

Foto copertina di Matthew Brodeur su Unsplash

Creare un blog gratuito con Jekyll e Netlify in pochi minuti - parte 2

Nella prima parte di questo articolo ho speso due righe su Jekyll e i generatori di siti statici, sull'onda dell'entusiasmo per aver aperto un blog gratuito...

E tu, sei sicuro di pronunciare correttamente questi termini informatici?

L'informatica è uno degli ambiti in cui l'inglese, e in particolar modo la variante americana, la fa da padrone quasi assoluto - che si tratti di...

MatteoVignoli.it   Non perderti nulla da MatteoVignoli.it, ricevi aggiornamenti via mail.