Autor Zpráva
TomasJ
Profil
Zdravím, mohl by mi někdo z vás poradit, jaký je nejlepší způsob zahashování hesla při registraci uživatele na web?
Myslíte, že sha1() je lepší jak md5()? Nebo třeba zahashovat heslo oběma způsoby? Nebo snad base64_encode() a pak sha1() nebo md5()? Poradíte mi? Děkuji.
Radek9
Profil
TomasJ:
Úplně podle mě stačí sha1(). Ale pokud jsi hodně paranoidní, můžeš zkusit něco jako Lopíkův řádek 8, to ale moc nedoporučuji.
1Pupik1989
Profil
Já to dělám klasikou md5() a jsem spokojen :)
TomasJ
Profil
Někde jsem se dočetl, že z výstupu md5() (možná i sha1()) už se nedá sestavit původní text. Myslíte, že by to někdo dokázal?
Radek9:
Tohle je už opravdu zbytečné na web, který nebude sociální síť s návštěvami 400 000 000 návštěvníků za den :D.

Děkuji, rozhodl jsem se pro sha1(); :)
Radek9
Profil
1Pupik1989:
Já vím, že jsem na tohle možná taky trochu paranoidní, ale existuje spousta md5 сrасkerů, takže je podle mě bezpečenější používat sha1.

Hmm, možná bych ze zakázaných slov vyhodil сrасk, zrovna v tomhle kontextu to s nelegalitou nemá nic společného. Musel jsem použít znaky z azbuky.
TomasJ
Profil
Tak nakonec udělám sha1(md5("tajné heslo")); a bude to nejlepší varianta, kterou nebude snadné odhalit :)
1Pupik1989
Profil
Radek9:
Existuje spoustu, ale nevím, že by nějaký fungoval. Ani nevím, jestli někdo vymyslel algoritmus na md5. Vždycky má řetězec stejnou délku a to je ta krása :D
snake.aas
Profil
md5 decryptery existují, ale nedekryptují tak jak by někteří mohli čekat... prostě mají určitý wordlist a k tomu hashe. mimoto jsou i stejne decryptery na sha1... osobně používám saltování a kombinaci md5 a sha1
TomasJ
Profil
Vyřešil jsem to kombinací
md5();
a
sha1();
a myslím, že to nikdo nerozluští, navíc to nebude na stránce s obrovskou prioritou.
Darker
Profil
TomasJ:
Po kombinaci to skuteně asi nepůjde rozluštit, ale nevím proč možnost volby končí u sha1 a md5...
Jsou další metody hashování.
TomášK
Profil
TomasJ:
Myslíte, že by to někdo dokázal?
Ano, dokážu že text není možné z hashe jednoznačně nalézt. Jediné, co teoreticky lze, je nalézt text, který má stejný hash (může to být i přesně ten, ze kterého vznikl, ale nejde to nejdnozačně rozhodnout). Důkaz je jednoduchý - hash má konečný počet znaků a konstantní délku, existuje tedy jen omezený počet hashů. Řetězců je naopak neomezeně mnoho - můžou být libovolně dlouhé. Pokud tedy je hashovací funkce dobrá a rozděluje náhodně, připadá na každý hash nekonečně mnoho řetězců.

md5 už není doporučovaný - v posledních letech vznikají algoritmy, které dokážou hledat kolize, současné výsledky neznám, něco o tom je třeba na wikipedii.
TomasJ
Profil
Darker:
To je s tím PECLem ne? Myslíš snad, že na wz.cz to půjde? Já musím brát to co jde, jelikož zadavatel má už známý web pod hostingem od wz.cz a nijak neuvažuje o placeném hostingu. Proto sha1 a md5...

TomášK:
Já to nechám takto, jelikož, jak už jsem psal, není to web o denní návštěvnosti 400 000 000 návštěvníků. Přijde tam tak 10 - 15 návštěvníků za den a i kdyby se to někomu podařilo rozluštit, v profilech nebudou tak citlivé informace. Jen email, jméno, přezdívka možná ještě pohlaví a to je vše.
Darker
Profil
TomasJ:
Jo to máš pravdu. Proto jsem přešel na sha, která je delší a není pro ni tolik ********.
Však vy víte čeho

Jen email, jméno, přezdívka možná ještě pohlaví a to je vše.
Jde o to, že pokud si dá uživatel stejné heslo jako na mail, pěkně mu hacker zatopí.
Bývalý spolužák někde na webovce prolomil databázi a nějakému chudákovi zabordelil facebook a kdoví co ještě...
TomasJ
Profil
Darker:
Víme čeho. Dnes jsem to tu někde četl, že dotyčný použil na sestavení slova písmena z azbuky.
Ano ovšem, akorát nemyslím, že by někdo např. 16-ti letý lezl na web o kapele, která hraje od 1884 ...
A když, tak určitě ne proto, aby udělal peklo nějakému registrovanému uživateli :)
Darker
Profil
TomasJ:
písmena z azbuky.
Na to zapomeň, mám na práci zajímavější věci.
G3n3sis19
Profil
tomas, kompletně jasné to máš, když uděláš

md5(md5(md5(md5(md5(md5("heslo"))))));

//EDIT: nevšiml jsem si toho lopíkovo řádku, tak nic :D
Tori
Profil
TomasJ:
web o kapele, která hraje od 1884
...a pořád jim to šlape jak zamlada. (Nedělal jim jeden čas basáka Cimrman?) ;)
meris
Profil
Myslím, že nezáleží tak moc na algoritmu, který pro hash hesla použijete. Spíše je důležitější postup sestavení hashe, kdy je snaha utajit původní hesla uživatele při prolomení jak databáze hesel.
Pokud bude utočník vědět, že na hash jste použili jen md5(heslo), tak neni problém vyzkoušet, kteroukoli z databází pro MD5. A odhadem tak polovinu hesel odhalí a dostane se tak na další služby pro uživatele. SHA není v tomto směru o tolik bezpečnější, je jen otázka času kdy začnou vznikat podobné služby i pro tento algoritmus.
Kombinace sha(md5(heslo)) bezpečnost hesla zvyšuje pouze na první pohled. Utočník pak musí vyzkoušet jak db pro MD5 a pak pro SHA, a v případě nalezení kolizního řetezce se za použití tohoto řetezce přihlasí na všechny služby, které hashují hesla pomocí MD5.
Z tohoto důvodu se hesla "solí", tedy k nim přidavají další řetězce a hashují se například takto:
$sul = "sfdj$%&*Vtsfdaa9 frads 57689cads$%^&*hjsacbFwef7";

$hash = sha1 ( $sul . $heslo . sha1($login));


Při takovém použití má sice útočník k dispozici hash hesla i algoritmus k získání hashe, nicméně je velice obtížné získat původní heslo. Použití již zmíněných databází je v tomto případě vyloučeno, protože útočník v nich pravděpodobně nenajde řetězce začínající na paznaky v soli, a končící na hash loginu, stejně tak matematické postupy na hledání kolizních řetězců mají menší šanci na úspěch než při hashi čistého hesla. V podstatě jediné co útočníkovi zbývá je brutal force zkusit vygenerovat všechny možná hesla. Nicméně tato možnost zůstává útočníkovi vždy.
puzzle
Profil
Měl bych k tomu jenom takový postřech, pokud se ti útočník dostane do databáze, asi už pro něho nebude problém se dostat i ke zdrojákům s PHP kde má ten algoritmus jako na dlani ne?
jenikkozak
Profil
puzzle:
To, že se útočník dostane do databáze, nemusí znamenat, že má přístup i ke zdrojům PHP, neboť k databázím bývá externí přístup, který je chráněn heslem, které stačí uhodnout/prolomit. Na rozdíl od získání přístupu k PHP kódům, kde je heslo do databáze uvedeno, případně se tyto kódy dají předělat.
Vtip hesla se solí spočívá v tom, že i v případě, že znáš hash hesla i algoritmus, kterým se generuje, nemůžeš použít databáze na „prolamování“ šifrovacích algoritmů, tudíž zjištění řetězce, který má stejný hash (bez ohledu na to, zda se jedná o původní heslo) je mnohem náročnější.

G3n3sis19:
md5(md5(md5(md5(md5(md5("heslo"))))));
Jakou má výhodu šestinásobné použití totožné funkce oproti například trojnásobnému?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0