Na aplikaci, kterou jsem nedávno vyvíjel, jsem hesla před uložením do databáze na serveru nechal každé jinak náhodně upravit a postup jak je upravit se ukládá vedle hesla v databázi.. Takže i kdyby bylo heslo 'password', tak hash slovníkem nikdo jen tak nerozlouskne.. Samozřejmě se ale nedovím, kolik uživatelů má stejné heslo apod., jako to udělali tito koumáci.
Co píšu je, že v případě, že by člověk měl heslo 'password', tak se před zahashováním upraví na delší směs náhodných znaků. Takže kdyby někdo získal hash, tak stejně potřebuje znát postup jak jej upravit, který je v databázi a ve zdrojáku je, jakým způsobem se s tím postupem pracuje. Nepíšu, že lidé mají mít osmimístné hesla a skutečné slova. Jen že při osmimístném heslu se zahashovává mnohem delší směs různých znaků, takže obyčejnou slovníkovou metodou to člověk nerozlouskne.
Ono to není uložené v plain textu. Normálně se ten plain text upraví tou metodou a hned poté ještě zahashuje. Aplikaci jsem nepustil do světa, jen jsem se zatím učil vyvíjet aplikace na android a server mi běží doma na RPi, kde jsme zatím jediní, kdo tento můj výtvor používá. Bohužel. :D
Tomu se říká security through obscurity a co se bezpečnosti týče, spoléhat se na to je hrdelní zločin.
Tomu se říká „solení“ hesla (přidá se sůl, salt) a považuje se to za základní ochranu hashovaných hesel. Taky je možné hesla „opepřit“ – ke všem heslům se přidá stejný text, který ale není uložený v databázi, ale někde jinde. Pokud pak unikne databáze, útočník nezná pepř a tím pádem nemůže na hashe útočit hrubou silou (pepř samozřejmě musí být dostatečně velký a náhodný, aby ho útočník nemohl uhodnout, pokud by znal nějaké heslo, třeba své, v otevřeném tvaru).
V kryptografii je dost podstatné nevymýšlet vlastní vynálezy a použít něco hotového a ověřeného. Ty vlastní vynálezy mívají dost často ten problém, že mají nějakou triviální díru, které si autor není vědom.
"Pokud pak unikne databáze, útočník nezná pepř a tím pádem nemůže na hashe útočit hrubou silou ..." Hrubou silou útočit může podle libosti, ale nemůže použít předem vytvořenou databázi heslo-hash, a ani pouhý seznam hesel k vyzkoušení mu moc nepomůže. Musí mechanicky vyzkoušet všechny kombinace "pepř"+"heslo", nebo si musí najít jiným cíl, který nepoužívá sůl ani pepř. (Například Windows XP, ten má směšně slabý hash, který ještě před zahešováním heslo rozdělí na dvě sedmimístná hesla a konvertuje do uppercase. Tabulka pro všechna hesla složená z písmen, čísel a 32 dalších znaků má jen 7,5 GB).