Il tipo di password che dovresti creare ha molto a che fare con il modo in cui viene memorizzata la password.
Anni fa, le password casuali di otto caratteri costituite da lettere maiuscole e minuscole, simboli e numeri erano davvero difficili da decifrare. In alcuni casi, ci sono voluti anni per decifrare una password di questo tipo.
Grazie alla tecnologia in evoluzione di oggi e alle macchine noleggiabili, questo tempo è stato ridotto a ore. Ma come vengono memorizzate queste password in primo luogo?
Come vengono memorizzate le password online
I sistemi non memorizzano le password degli utenti direttamente in file o database, poiché gli aggressori possono impossessarsi del database in cui i sistemi conservano le password. Invece, i sistemi crittografano le password degli utenti e gli aggressori incontrano una versione crittografata di ciascuna password.
Esistono alcuni algoritmi utilizzati dai sistemi per crittografare le password. Uno di questi algoritmi è l'algoritmo simmetrico. L'algoritmo simmetrico è un tipo di crittografia
dove è possibile utilizzare la stessa chiave sia per la crittografia che per la decrittografia. La chiave che utilizzerai per crittografare i dati è la stessa sia per la crittografia che per la decrittografia. La sicurezza degli algoritmi simmetrici comporta alcuni rischi poiché esiste una sola chiave per la decrittazione. Per questo motivo, i sistemi generalmente non utilizzano algoritmi simmetrici per la crittografia delle password.In generale, il metodo utilizzato dai sistemi per la crittografia è l'algoritmo hash. Gli algoritmi hash servono a verificare e rappresentare l'integrità dei dati, non a crittografarli. Gli algoritmi hash convertono i dati in un hash di dimensioni fisse. Questi hash di solito rappresentano un hash univoco di dati.
Grazie all'algoritmo hash, se un utente malintenzionato ha preso il controllo del database delle password, l'attaccante non può accedere alla password all'indietro da qui. C'è una sfumatura molto importante a cui dovresti prestare attenzione qui. Teoricamente, un utente malintenzionato che compromette un sistema che utilizza lo stesso algoritmo di hash per tutte le combinazioni di password può confrontare i risultati ottenuti. Se l'attaccante produce lo stesso valore come risultato di questi confronti, ha scoperto qual è la versione aperta della password. Questo metodo si basa su tentativi ed errori, e questa forma di attacco lo è generalmente chiamato attacco di forza bruta.
All'inizio degli anni 2000, potrebbero essere necessari centinaia di anni per provare tutte le combinazioni per password di 8 caratteri crittografate con i popolari algoritmi di hashing. Naturalmente, questo non include combinazioni molto semplici come "123456" o "mypassword" in questo set. Con lo sviluppo delle odierne tecnologie software e hardware, anche il metodo per decifrare le password è cambiato molto.
L'impatto delle GPU emergenti
Le capacità di elaborazione parallela dei dati dei processori grafici (GPU) sono migliorate nel tempo. Le GPU non sono in grado di eseguire operazioni versatili come le CPU generiche. Quindi, anche se ci sono così tanti core e potenza di elaborazione parallela, non ha senso usarli per quasi tutti i problemi come PROCESSORE.
Eppure è possibile eseguire alcuni algoritmi di hash utilizzati per le password in modo abbastanza efficiente sulla GPU. Gli hash calcolabili al secondo che puoi ottenere con le CPU tradizionali sono cresciuti enormemente con le nuove piattaforme GPU.
Per avere un'idea, esamina i numeri di hashing al secondo di algoritmi hash come NTLM, MD5 e SHA1 nella tabella seguente. È sufficiente, per ora, sapere che questi algoritmi sono solo un algoritmo di hash. Per creare questa tabella, ho utilizzato un sistema cluster composto da 25 GPU AMD Radeon.
Algoritmo |
Hashing al secondo |
NTLM |
350.000.000.000 |
MD5 |
180.000.000.000 |
SHA1 |
63.000.000.000 |
SHA512Cripta |
364.000 |
Bcrypt |
71.000 |
Scritta |
33.000 |
Come puoi vedere, con un tale sistema, puoi generare hash NTLM 350 miliardi di volte al secondo. Ciò significa che puoi provare tutte le combinazioni di una password di 8 caratteri in meno di 6 ore. Inoltre, l'hardware in questo esempio appartiene a anni fa. Immagina il potere di cracking delle password di oggi.
Cosa dovrebbero fare gli sviluppatori di software?
Il modo in cui i programmatori dovrebbero procedere è abbastanza semplice: dovrebbero preferire algoritmi che impiegano più tempo a calcolare i valori hash durante la crittografia delle password. Gli sviluppatori devono conoscere non solo le prestazioni dell'algoritmo che stanno utilizzando sulla CPU, ma anche quanto sia resistente rispetto al mondo della GPU.
Se gli sviluppatori stanno lavorando con un framework software che affronta anche i processi di crittografia delle password come Django, Ruby on Rails e Spring Security dovrebbero verificare se sono state prese le giuste decisioni all'interno del framework in termini di sicurezza.
Per esempio, Ideare, una delle librerie più utilizzate per le operazioni utente in Ruby on Rails, utilizza Bcrypt come algoritmo hash predefinito. Consente inoltre di utilizzare un altro metodo come algoritmo hash. L'algoritmo Bcrypt è affidabile in quanto impiega ancora molto tempo prima che la GPU si rompa.
In sintesi, più tempo impiega il calcolo del valore hash, più sei sicuro.
Quanti caratteri deve avere la tua password?
Ogni carattere in più che usi aumenterà geometricamente il numero di tentativi ed errori necessari per decifrare la tua password e renderla più sicura.
Consideriamo questa situazione attraverso due diversi scenari. Considera i valori nella tabella sopra per l'algoritmo hash NTLM e immagina che proverai a decifrare la password. Immagina di prendere di mira password di otto o più caratteri.
Numero di caratteri |
Lettere e numeri maiuscoli/minuscoli |
Lettere maiuscole/minuscole, numeri e simboli speciali |
8 |
meno di 1 minuto |
2 minuti |
9 |
2 minuti |
2 ore |
10 |
2 ore |
1 settimana |
11 |
6 giorni |
2 anni |
12 |
1 anno |
200 anni |
13 |
più di 100 anni |
più di 1000 anni |
Quando si esamina la tabella, è possibile vedere che l'uso di una password di almeno 12 caratteri è sicuro quando si utilizzano tutte le combinazioni di lettere maiuscole/minuscole, numeri e simboli speciali. Se non si utilizzano simboli speciali, risulta che è necessario utilizzare 13 caratteri come lunghezza sicura della password. Se hai utilizzato il metodo hash Bcrypt invece dell'hash NTLM in questo sistema, sarebbero sufficienti 8 caratteri. Tuttavia, non hai la possibilità di sapere con quale metodo hash un sistema a cui accedi sul web conserva la tua password. Ecco perché dovresti considerare tutte le possibilità.
Il problema principale per gli sviluppatori di software è che è quasi impossibile convincere gli utenti ad avere una password di almeno 12 caratteri. Oggi è possibile affermare che il tasso di utilizzo di password di questa lunghezza è basso. Pertanto, in base allo scenario di utilizzo del sistema sviluppato, sarà necessario trovare una via di mezzo che venga accettata dagli utenti per migliorare la sicurezza della loro password.
un ultimo suggerimento per gli sviluppatori è quello di verificare non solo la lunghezza minima ma anche la lunghezza massima degli input provenienti dai form che avete presentato all'utente. Soprattutto quando abiliti l'uso di un algoritmo hash lento da calcolare come Bcrypt per la sicurezza scopi, potresti incontrare alcuni rischi se non controlli la lunghezza massima della password inserita da l'utente. Ad esempio, gli aggressori possono eseguire attacchi provando contemporaneamente decine di password di 100mila caratteri con alcune richieste appositamente predisposte. In tal caso, è molto probabile che il tuo sistema non risponda agli altri utenti.
Consiglio agli utenti finali
Fai in modo che la lunghezza della tua password sia di almeno 12 caratteri e assicurati di includere combinazioni di lettere maiuscole e minuscole, numeri e simboli. Non dimenticare mai che i sistemi che memorizzano la tua password possono essere violati e le tue informazioni possono essere violate. Non puoi sapere quali algoritmi utilizza un sistema per crittografare la tua password, quindi spetta interamente a te prendere precauzioni e creare password complesse.