> Bezproblémově rozlousknutelná je podle mě celkem správný výraz.
Není. Hledání "nejkratšího ascii" plaintextu s daným hashem se pořád neumí lépe než bruteforce. A třeba pro heslo s 18 znaky z 64 možných (A-Za-z0-9\-\.) bys tak musel udělat 64**18 = 3e32 operací. Pro srovnání největší známý superpočítač zatím udělal 1e26 operací.
99,9999% uzivatelu rozhodne nepouziva hesla delsi 8 znaku. Takova lze louskat po miliardach behem okamziku.
K tomu si prictete faktum, ze 99% (nejen)webu umozni zadat maximalne alfanumericke znaky.
A to pomijim takovou legracku, jako ze bude mit rekneme 1/2 lidi hesla, ktera se budou vyskytovat vicekrat.
Rainbow tables vám nesnižují složitost na O(1). Ty vám za cenu velkého objemu dat sníží složitost z těch O(n^18) na něco o plno řádů menšího, například O(n^9). Ale to se dá dohnat solí, která vám heslo zase natáhne.
Pokud uživatelé nemají nesolená hesla typu 12345 (to v té rainbow tabulce bude), tak to ani náhodou nebudete louskat v počtu milionů hesel za sekundu.
Jak vygenerujete rainbow tables k jejichž vygenerování je potřeba výkon o několik řádů vyšší než má největší superpočítač? Jaký budou mít kompresní faktor a kde je uložíte?
> Vaše zdůvodnění je vágní a nesmyslné. Pro cracknutí osmnáctiznakového hesla mi klidně stačí jeden pokus, náhoda je blbec.
V tom případě je prolomeno AES-256.
Předpokládáte, že se obě hesla osolí stejnou solí. Ale to se nedělá, pro každý účet se použije sůl jiná. Někdy se generuje náhodně a ukládá, jindy se generuje nějakým algoritmem (např. z uživatelského jména). Požadavkem na sůl není, aby byla tajná, ale aby byla unikátní pro daný účet.
Rainbow tables jsou zjednodušeně řečeno* tabulky "pro heslo XY a sůl ABC je hash KLF". Ale ten údaj tam není uložen přímo, musíte ho vyčíst a složitost čtení závisí na délce hesla a soli. Sůl to tedy celé dost komplikuje. V zásadě si sůl představte jako další znaky přidávané k heslu. Takže i když mají Pepa a Josef oba heslo "a", tak jejich sůl je různá a tudíž i hash.
* Ve skutečnosti je to ale něco jiného, tabulka všech hesel a hashů je mnohem, mnohem větší a počítal byste ji neúměrně dlouho a neměl ji pak kam uložit. Rainbow tabulky neobsahují všechny možnosti, ale jen několik (tisíc) "fragmentů textu". Pomáhají vám hledat rychleji. V duchu "textem X se na hash Y mohlo jít z hashe A nebo B". Zkoušíte různé texty X a hledáte, zda to generuje přímo ten hash (pak X je heslo). Pokud ne, tak sestavíte množinu hashů a X, ze kterých se na Y dostanete, a na ně to rekurzivně opakujete. Není to tedy 1:1. ale také to není tak špatné jako 1:N. Časová náročnost ale stále rychle roste s délkou hesla a soli. Proto je dlouhá sůl zabiják rainbow tables. A i pokud ji zjistíte, tak stejně musíte louskat každý účet zvlášť, protože hashe mají různé.