Autor Zpráva
one
Profil
Čau,
jak si tak pročítám tady na fóru nějaké články o bezpečném přihlášení, tak jsem narazil na pojem salted hash neboli solený hash. Něco jsem si o něm přečetl a zjistil jsem, že je to další krůček k lepší ochraně, oproti samotnému hash.

Můžete mi prosím vás, napsat nějaký praktický příklad na salted hash?

díky ;)
Peca
Profil
Např. do databáze budeš hesla ukládat ve tvaru md5('salted'.$heslo.'hash');
Když někdo vykrade databázi, tak mu to stejně bude k ničemu, pokud nezná tu "sůl". Teda pokud jsem to správně pochopil... :-)
DJ Miky
Profil
Peca
md5('salted'.$heslo.'hash');

Myslím, že to bude asi tak stejně účinné jako bez něho.

Pokud z hashe někdo najde původní řetězec, tak mu snad dojde původní heslo třeba z řetězce „saltedmojeheslohash“, navíc když to bude obsahovat každý hash...

Když se vám někdo dostane do DB, tak vám hash hesla moc nepomůže.
Peca
Profil
DJ Miky
Samozřejmě tam bude nějaký nesmyslný string místo "saltedhash". A vzhledem k tomu, že MD5 je jednosměrná hashovací funkce, tak je naprosto nemožné tento původní string dostat.
bukaj
Profil
Když se vám někdo dostane do DB, tak vám hash hesla moc nepomůže.
fakt? to je pro mě novinka... vždyť jsou hashovací funkce jednostranné
DJ Miky
Profil
Peca
Jde to pomocí rainbow tables...

Třeba http://passcracking.ru/
Peca
Profil
DJ Miky
Nejde. Všechy hashe (kterých je téměř nekonečně mnoho) tam být nemůžou. Jsou tam především kratší a slovníkové řetězce.
djlj
Profil
bukaj
Když se ti někdo dostane do databáze, tak ho třeba spíš než hesla budou zajímat třeba emaily (pro rozesílání spamu), máš-li například nějaké zaregistrované uživatele. To by se fakt muselo hashovat všechno…
Alphard
Profil
kterých je téměř nekonečně mnoho
proč mít téměř nekonečno (btw: co to je?), když není problém to spočítat, hash má konstantní délku a skládá se z určitých znaků, které lze také spočítat, zbytek je jen matematika

md5('salted'.$heslo.'hash');
Myslím, že to bude asi tak stejně účinné jako bez něho.
Pokud z hashe někdo najde původní řetězec, tak mu snad dojde původní heslo třeba z řetězce „saltedmojeheslohash“, navíc když to bude obsahovat každý hash


najde pouze kolizní klíč, může to být zrovna saltedheslohash, ze kterého to snadno odstraní, ale také to může být něco jiného, např. jldgfGjs....khk, a z tohodle to těžko odstraní :-)
bukaj
Profil
djlj
to je sice pravda, ale já se bavil o hesle. a to, když je zahashované je mu k ničemu.
*edit: mu == případnému útočníkovi
Peca
Profil
OK. S tou databází to byl špatný příklad. Ale třeba, když se odchytí hash někde na cestě mezi klientem a serverem. Heslo se dá zašifrovat JavaScriptem a poslat POSTem jenom jeho hash. Běžně je heslo posíláno v naprosto nezašifrované podobě (u obyčejných stránek, ne https).
téměř nekonečně mnoho :-) No dobrá. Příliš hodně na to, aby se daly prozkoumat všechny možné kombinace v přijatelném čase. Konstantní délku sice mají, ale řekl bych, že ne všechny kombinace jsou dosažitelné. Jde o přepis 128bitů do hexadecimální podoby.
DoubleThink
Profil *
md5('salted'.$heslo.'hash');
Takový salt jde použít, ale musí být podstatně složitější. Častěji se vstupní řetězce "solí" celé nějakou deformační (klidně jednosměrnou, ale opakovatelnou) metodou.

Ale třeba, když se odchytí hash někde na cestě mezi klientem a serverem
Hashovat heslo ještě před odesláním nedává smysl. Hashuje se proto, aby to, co vypadne z databáze, nešlo nacpat do přihlašovací rutiny.
zero0x
Profil
myslim, ze jednoducha ochrana proti ********* hesiel, je taketo kodovanie:

md5 hash: abcdefghijkl

prekodovany hash: acegik-bdfhjl

to sa da jednoducho naprogramovat aj v php
one
Profil
nečekal jsem, že se diskuse takto rozvine, žel nedošel jsem k zdárnému závěru.

Je tedy lepší přidávat "sůl" a nebo nechat jen samotný hash? tzn. že případnému útočníkovi práci moc nestížim.
mila
Profil
Sůl si můžeš klidně uložit viditelně do dalšího sloupce, důležité je, že bude pro každé heslo různé.
Pokud se do databáze někdo dostane, tak bude řádově složitější hash prolomit:
- Hash pravděpodobně nebude v rainbow tables, tzn. ho bude muset počítat.
- Útočník bude muset zkoušet každé heslo zvlášt
- Nelze poznat, která dvě hesla jsou stejná
- ...

djlj
Když se ti někdo dostane do databáze, tak ho třeba spíš než hesla budou zajímat třeba emaily (pro rozesílání spamu), máš-li například nějaké zaregistrované uživatele. To by se fakt muselo hashovat všechno…
Nedávno jsem se (jen tak cvičně:)) do jedné databáze dostal, a hesla (hash) bylo, co jsem hledal. Umožnila mi totiž přihlásit se do administrace a z read-only přístupu byl najednou prakticky neomezený... Mimochodem šest písmen na heslo je opravdu málo.
DJ Miky
Profil
mila
Když se ti někdo dostane do databáze, tak ho nemusí zajímat hashe hesel, stačí, aby si třeba změnil status na administrátora...
Toto téma je uzamčeno. Odpověď nelze zaslat.