Se il tuo sistema utilizza un hash crittografico per memorizzare le password, ad esempio MD5, SHA1, ecc., non vi è alcun limite alla lunghezza della password stessa poiché questi hash possono essere creati con qualsiasi quantità di dati. È possibile creare un hash MD5 o SHA1 per un intero disco rigido e questo viene comunemente fatto per scopi forensi perché se anche un solo bit viene modificato leggermente, si ha un hash molto diverso e quindi è possibile verificare che i dati siano cambiati. Ciò significa che è possibile utilizzare esattamente gli stessi algoritmi per verificare se i dati sono stati manomessi. Linux (almeno l'attuale Linux) utilizza queste stesse funzioni hash. Ti chiederà una password e quindi creerà un hash crittografico della password che hai fornito e vedrà se questo hash corrisponde alla password memorizzata. Ciò significa anche che le tue password non sono memorizzate in testo normale e l'unico modo per recuperare una password persa è eseguire un test di forza bruta che genera l'hash della password dopo l'hash della password finché non ne trova uno che corrisponde all'hash corrente e quindi hai il tuo password.
C'è un leggero svantaggio nell'usare questi hash, ovvero che un hash ha una dimensione finita, ad esempio un hash MD5 è di 128 bit. Ciò significa che un hash MD5 ha solo 2^128
o 340,282,366,920,938,463,463,374,607,431,768,211,456
combinazioni possibili. Ora, sebbene questo sia un numero elevato, ciò significa che puoi avere quella che chiamano una collisione di hash in cui hai due elementi o chiavi diversi che producono lo stesso hash. In teoria, maggiore è la dimensione della chiave, minore è la probabilità di una collisione e maggiore è il tempo necessario per forzare brutamente una password, ma questo sta valutando rigorosamente l'entropia e quanto tempo POSSE take ma c'è anche la possibilità che la prima voce che provano possa essere quella che corrisponde anche se si tratta di una collisione hash. In generale, sei davvero più sicuro usando un hash che ha una dimensione della chiave più grande perché, supponiamo che questo sia MD5, le probabilità che la prima password corrisponda a 340,282,366,920,938,463,463,374,607,431,768,211,456
possibili corrispondenze è estremamente estremamente improbabile. Scegli anche una buona password perché molti cracker cercheranno di utilizzare elenchi di parole, elenchi di nomi e mutazioni di questi elenchi (ad esempio, se la parola è "pesce", proveranno fish1234
, [email protected]#$
ecc.) prima di affidarsi alla forzatura bruta di una password.
Il modo in cui puoi sapere se il tuo sistema utilizza hash crittografici per memorizzare le password è dare un'occhiata al /etc/shadow
file (supponendo che tu abbia accesso root). Ogni riga è formattata come user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved
. Il campo della password può iniziare con $num$
(ad es. un hash md5 nel campo della password assomiglia a $1$01234567$b5lh2mHyD2PdJjFfALlEz1
dove inizia con $1$
). Se inizia con questo, significa che il tuo sistema sta utilizzando un hash crittografico. Il formato del campo password su tutti i sistemi moderni è $id$salt$hash
. L'id specifica il tipo di hash crittografico che stai utilizzando. Il salt è una stringa generata casualmente che viene concatenata con la chiave (password in testo normale) per proteggersi da tabelle precalcolate di hash noti. L'hash è l'hash crittografico creato dal salt e dalla chiave/password. Se il campo della password inizia con $num$
allora stai usando hash crittografici.
Quindi sai, i numeri significano questo:
$1$
significa che stai usando MD5$2$
o$2a$
significa che stai usando il pesce palla$5$
significa che stai utilizzando SHA-256$6$
significa che stai utilizzando SHA-512
SHA-512 è il miglior hash disponibile da utilizzare offerto da glibc. Non so quanto sia forte blowfish ma non fa parte di glibc e quindi è disponibile solo su alcune distribuzioni che lo hanno aggiunto. SHA-512 produce chiavi a 512 bit o 2 ^ 512 combinazioni possibili prima che ci si possa aspettare una collisione e con una password abbastanza complessa, un cluster di computer impiegherebbe molto, molto tempo per trovare la password effettiva o una collisione nell'hash .
Inoltre, se hai un hash che non inizia con $num$
allora stai usando DES e questo è limitato a una lunghezza di 8 caratteri. Credo che i sistemi più vecchi che utilizzano DES, o almeno alcuni di essi, accettano password di qualsiasi dimensione ma utilizzano solo i primi 8 caratteri. Ciò significa che se imposti la tua password su mybigbigapple
e qualcuno usa la password mybigbigcity
quindi saranno ammessi perché DES utilizzerà solo mybigbig
e qualsiasi cosa dopo viene scartata.
Quindi sai, Ubuntu a partire dalla 8.04, che è stato rilasciato nell'aprile 2008, utilizzava gli hash MD5. Ubuntu da 8.10, che è stato rilasciato nell'ottobre 2008, e tutte le versioni da allora utilizzano gli hash SHA-512. Non so fino a che punto prima dell'aprile 2008, ma credo che per diversi anni, se non di più, la maggior parte delle distribuzioni abbia utilizzato gli hash.
Le attuali 12.04 e 14.04 LTS (versioni di supporto a lungo termine) di Ubuntu sembrano utilizzare SHA-512 per impostazione predefinita, come si può vedere con $6$
anteposto all'hash nel file /etc/shadow:
catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
Ora la lunghezza della chiave o della password consentita per qualsiasi algoritmo di hashing non è l'unica cosa per determinare la dimensione della password che puoi avere. L'altro elemento di interesse è come è scritto il programma e quale lunghezza supporterà il programma stesso. Tutti i moderni programmi passwd e probabilmente la maggior parte dei crypt(3)
funzione in Linux. crypt per molto tempo (poiché è stato utilizzato almeno MD5 e probabilmente prima) ha consentito i puntatori di caratteri per la chiave effettiva. Ciò significa che l'unico limite alla durata di una chiave che accetterà è basato sulla quantità di RAM che quel programma ha a sua disposizione, ma con ogni probabilità, questo è probabilmente molto molto più lungo di qualsiasi password che una persona sarebbe mai in grado di ricordare (milioni di caratteri?).
Questo dovrebbe rispondere alla tua domanda su quanto può essere lunga una password. Spero di averti aiutato.
Riferimenti:
-
pagina man di crypt(3) (Ubuntu 14.04)
-
Pagina man di SHADOW(5) (Ubuntu 14.04)
-
en.wikipedia.org/wiki/Crypt_(Unix)
-
en.wikipedia.org/wiki/Password_strength
-
en.wikipedia.org/wiki/Md5
-
en.wikipedia.org/wiki/Blowfish_(cipher)
-
en.wikipedia.org/wiki/SHA-1
Dipende dal modulo di autenticazione utilizzato. Nei moderni sistemi Linux, non esiste un limite massimo per la lunghezza della password. Alcuni sistemi obsoleti potrebbero avere limiti imposti dal loro sistema di archiviazione delle password:i massimi comuni sembrano essere 8, 40 e 255.
A seconda di come viene memorizzata la password, MD5, SHA1, BlowFish ecc., penso che non ci siano limiti alla password impostati dal metodo di archiviazione stesso.
Le implementazioni precedenti potrebbero avere un limite che è probabilmente di 8 o 255 caratteri.
Questa sembra una domanda più adatta per www.serverfault.com però :)