Pokud váš systém používá k ukládání hesel kryptografický hash, např. MD5, SHA1 atd., pak není délka samotného hesla nijak omezena, protože tyto hash lze vytvořit s libovolným množstvím dat. Hash MD5 nebo SHA1 lze vytvořit pro celý pevný disk a to se běžně provádí pro forenzní účely, protože pokud se byť jen jeden bit změní jen nepatrně, máte velmi odlišný hash, a proto můžete ověřit, že se data změnila. To znamená, že můžete použít tyto přesně stejné algoritmy k testování, zda s daty nebylo manipulováno. Linux (alespoň současný Linux) používá stejné hashovací funkce. Požádá vás o heslo a poté vytvoří kryptografický hash hesla, které jste zadali, a zjistí, zda se tento hash shoduje s uloženým heslem. To také znamená, že vaše hesla nejsou uložena v prostém textu a jediný způsob, jak obnovit ztracené heslo, je spustit test hrubou silou, který generuje hash hesla za heslem, dokud nenajde heslo, které odpovídá aktuálnímu hashu, a pak budete mít svůj heslo.
Použití těchto hashů má mírnou nevýhodu, která spočívá v tom, že hash má konečnou velikost, například hash MD5 je 128 bitů. To znamená, že hash MD5 má pouze 2^128
nebo 340,282,366,920,938,463,463,374,607,431,768,211,456
možné kombinace. I když je to velké číslo, znamená to, že můžete mít to, čemu říkají hašovací kolize, kde máte dvě různé položky nebo klíče, které vytvářejí stejný hash. Teoreticky platí, že čím větší je velikost klíče, tím nižší je pravděpodobnost kolize a tím déle by mělo trvat hrubé vynucení hesla, ale to je striktní hodnocení entropie a toho, jak dlouho MŮŽE vzít, ale je tu také šance, že první záznam, který zkusí, může být ten, který se shoduje, i když jde o kolizi hash. Obecně řečeno, opravdu je bezpečnější používat hash, který má větší velikost klíče, protože předpokládejme, že se jedná o MD5, pravděpodobnost, že se první heslo shoduje z 340,282,366,920,938,463,463,374,607,431,768,211,456
možné shody jsou extrémně extrémně nepravděpodobné. Vyberte si také dobré heslo, protože mnoho crackerů se bude snažit používat seznamy slov, seznamy jmen a mutace těchto seznamů (tj. pokud je slovo „ryba“, zkusí fish1234
, [email protected]#$
atd.), než se spoléhají na hrubé vynucení hesla.
Způsob, jak zjistit, zda váš systém používá k ukládání hesel kryptografické hash, je podívat se na /etc/shadow
soubor (za předpokladu, že máte přístup root). Každý řádek má formát user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved
. Pole hesla může začínat $num$
(tj. md5 hash v poli hesla vypadá jako $1$01234567$b5lh2mHyD2PdJjFfALlEz1
kde začíná $1$
). Pokud to začíná tímto, znamená to, že váš systém používá kryptografický hash. Formát pole hesla na všech moderních systémech je $id$salt$hash
. ID určuje, jaký typ kryptografického hashe používáte. Sůl je náhodně generovaný řetězec, který je zřetězen s klíčem (heslo ve formátu prostého textu), aby byl chráněn před předem vypočítanými tabulkami známých hashů. Hash je kryptografický hash vytvořený ze soli a klíče/hesla. Pokud pole hesla začíná $num$
pak používáte kryptografické hash.
Takže víte, čísla znamenají toto:
$1$
znamená, že používáte MD5$2$
nebo$2a$
znamená, že používáte blowfish$5$
znamená, že používáte SHA-256$6$
znamená, že používáte SHA-512
SHA-512 je nejlepší dostupný hash, který glibc nabízí. Nevím, jak silný je blowfish, ale není součástí glibc, a proto je dostupný pouze u určitých distribucí, které jej přidaly. SHA-512 vytváří 512bitové klíče nebo 2^512 možných kombinací, než lze očekávat kolizi, a s dostatečně komplexním heslem by shluku počítačů trvalo velmi dlouho, než by nalezlo skutečné heslo nebo kolizi v hash. .
Také, pokud máte hash, který nezačíná $num$
pak používáte DES a to je omezeno na 8 znaků. Věřím, že starší systémy, které používají DES, nebo alespoň některé z nich, vezmou heslo jakékoli velikosti, ale použijí pouze prvních 8 znaků. To znamená, že pokud si nastavíte heslo na mybigbigapple
a někdo používá heslo mybigbigcity
pak budou povoleni, protože DES bude používat pouze mybigbig
a cokoli poté je zahozeno.
Takže víte, Ubuntu od 8.04, které bylo vydáno v dubnu 2008, používalo MD5 hash. Ubuntu z 8.10, které vyšlo v říjnu 2008, a všechny verze od té doby používají hash SHA-512. Nevím, jak daleko před dubnem 2008, ale věřím, že několik let, ne-li více, většina všech distribucí používala hash.
Zdá se, že aktuální verze 12.04 a 14.04 LTS (vydání s dlouhodobou podporou) Ubuntu standardně používají SHA-512, jak lze vidět u $6$
předřazený hash v souboru /etc/shadow:
catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
Délka klíče nebo hesla povolená pro jakýkoli hashovací algoritmus není jediná věc, která určuje, jakou velikost hesla smíte mít. Další zajímavostí je, jak je program napsán a jakou délku bude samotný program podporovat. Všechny moderní programy passwd a pravděpodobně většina crypt(3)
funkce v Linuxu. crypt na dlouhou dobu (od té doby, co byl použit alespoň MD5 a pravděpodobně i předtím) umožnil znakové ukazatele pro skutečný klíč. To znamená, že jediné omezení délky klíče, které bude akceptovat, je založeno na tom, kolik RAM má daný program k dispozici, ale se vší pravděpodobností je to pravděpodobně mnohem mnohem delší, než jakékoli heslo, které by si kdokoli dokázal zapamatovat. (miliony znaků?).
To by mělo odpovědět na vaši otázku, jak dlouhé může být heslo. Doufám, že jsem pomohl.
Reference:
-
crypt(3) manuálová stránka (Ubuntu 14.04)
-
Manuová stránka 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
Záleží na tom, jaký autentizační modul je použit. V moderních systémech Linux neexistuje maximální omezení délky hesla. Některé zastaralé systémy mohou mít limity dané jejich systémem ukládání hesel – populární maxima se zdají být 8, 40 a 255.
V závislosti na tom, jak je heslo uloženo, MD5, SHA1, BlowFish atd. si myslím, že neexistuje žádné omezení hesla nastavené samotnou metodou ukládání.
Starší implementace mohou mít limit, který je pravděpodobně 8 nebo 255 znaků.
Zdá se však, že tato otázka je vhodnější pro www.serverfault.com :)