Autor | Zpráva | ||
---|---|---|---|
Milan1236000 Profil |
#1 · Zasláno: 5. 2. 2016, 15:41:29
Zdravím,
slyšel jsem, že md5 už není bezpečný. Je ale zatím bezpečný sha1? $hash=SHA1("heslo"."sůl"); $hash=password_hash("heslo", PASSWORD_BCRYPT, ['cost' => 14]); $hash=password_hash("heslo", PASSWORD_DEFAULT, ['cost' => 14]); password_hash() již "solí" a "kostuje" automaticky, že? Mimochodem, proč musí mít sůl víc než 22 znaků (jinak mi to hází chybu)?
Je bezpečnější hash funkce password_hash() , nebo (existuje?) sha512() ?
|
||
lionel messi Profil |
Milan1236000:
„Je ale zatím bezpečný sha1?“ Nie, je to len drobné vylepšenie md5. „Funkce password_hash() již "solí" a "kostuje" automaticky, že?“
Áno. „Je bezpečnější hash funkce password_hash() , nebo (existuje?) sha512() ?“
Funkcia sha512 neexistuje. Dodatok: Existuje funkcia hash umožňujúca použiť algoritumus SHA-512, ale password_hash je jednoznačne lepšou voľbou. |
||
Martin2 Profil * |
#3 · Zasláno: 5. 2. 2016, 16:05:18
Použij
password_hash bez jakýchkoliv parametrů (v PHP7 už salt ručně zadat nejde, vygeneruje se náhodně)
|
||
RastyAmateur Profil |
#4 · Zasláno: 5. 2. 2016, 16:16:44
lionel messi:
Chtěl jsem na to založit téma, ale byl jsem moc líný. Stále to tu čtu - "sha1() není dobrá". Z jakého důvodu? |
||
lionel messi Profil |
#5 · Zasláno: 5. 2. 2016, 16:28:06
RastyAmateur:
„Stále to tu čtu - "sha1() není dobrá". Z jakého důvodu?“ V podstate z rovnakého, z akého je nevhodná jej pokrvná príbuzná md5 (len tá je na prelomenie /nájdenie kolízneho reťazce/ ešte triviálnejšia). Vlastnosťou dobrej hashovacej funkcie je náročnosť nájdenia kolízneho reťazca (keďže jej výsledok má bez ohľadu na dĺžku vstupu rovnaký počet bajtov /znakov/, musí niekde existovať kolízia — počet všetkých existujúcich vstupov je oveľa väčší než výstupov). Funkcia MD5 už bola prelomená do takej miery, že príslušný kolízny reťazec k ľubovoľnému hashu možno nájsť v podstate okamžite. SHA1 bola na tom dosiaľ aspoň z hľadiska praktického úspechu o povestný chlp lepšie (bolo zrejmé, že raz dopadne ako md5, išlo len o otázku času), lenže prvá kolízia bola odhalená už v októbri 2015. V prvom rade, funkcie SHA1 či MD5 neboli vytvorené s cieľom zabezpečovať heslá. Password_hash navyše heslo aj automaticky osolí (to, že Joker v odkázanom vlákne vysvetľuje princíp soli v kombinácii s md5 si nevšímaj). |
||
RastyAmateur Profil |
#6 · Zasláno: 5. 2. 2016, 16:34:30
lionel messi:
„V podstate z rovnakého, z akého je nevhodná jej pokrvná príbuzná md5“ md5() jsem nikdy nepoužíval... V první řadě děkuji za reakci. Moc jsem to nepochopil, ale už částečně vím, o co jde. Solení používám ještě s kombinací ID uživatele (což mi přijde lepší) - bohužel i s funkcí sha1()... |
||
Martin2 Profil * |
#7 · Zasláno: 5. 2. 2016, 16:45:33
RastyAmateur:
„Solení používám ještě s kombinací ID uživatele (což mi přijde lepší) - bohužel i s funkcí sha1()...“ Salt by měl být náhodný. Čím víc náhodný, tím líp. ID uživatele tam vcelku nemá co dělat. SHA se na zabezpečení hesel nehodí, jak už bylo zmíněno. V podstatě jediný správný způsob je password_hash nebo (ve starších verzích PHP) funkce crypt , pomocí které lze Blowfish hash vygenerovat taky.
|
||
Timy Profil |
#8 · Zasláno: 5. 2. 2016, 18:29:34
lionel messi:
„Funkcia MD5 už bola prelomená do takej miery, že príslušný kolízny reťazec k ľubovoľnému hashu možno nájsť v podstate okamžite.“ To už se s tím posunuli tak daleko? Jaké jsou kolizní řetězce pro tento hash? 90444aa7da7b7f3c5768623ee17b1397 |
||
Martin2 Profil * |
#9 · Zasláno: 5. 2. 2016, 18:37:30
Timy:
„reťazec k ľubovoľnému hashu možno nájsť v podstate okamžite.“ Myslím, že se uvádí aktuálně desítky minut na běžném hardwaru. Takže ne okamžitě, ale celkem dost rychle. |
||
Zechy Profil |
#10 · Zasláno: 5. 2. 2016, 18:42:20
A vzhledem k tomu, že běžný BFU si dá heslo typu "12345", tak během chvilky je možné najít řetězec i v rainbow tables.
|
||
Martin2 Profil * |
#11 · Zasláno: 5. 2. 2016, 18:44:03
Což o to – na kratší vstupy ti najde řetězec pro MD5 hash i Google ;)
|
||
RastyAmateur Profil |
#12 · Zasláno: 5. 2. 2016, 18:47:47
Martin2:
Tam jde ale o to, že když 2 uživatelé budou mít stejné heslo, tak to nezjistíš... |
||
Timy Profil |
#13 · Zasláno: 5. 2. 2016, 18:51:15
Martin2:
„Myslím, že se uvádí aktuálně desítky minut na běžném hardwaru. Takže ne okamžitě, ale celkem dost rychle.“ A kde se to uvádí? |
||
Lonanek Profil |
#14 · Zasláno: 5. 2. 2016, 18:51:38
Proč chcete zjišťovat, zda již někdo stejné heslo používá?
Hesla mohou mít klidně všichni uživatelé stejné, podstatné je přeci jméno (nick, login, ...) uživatele, popřípadě email ale rozhodně ne heslo, navíc pokud je hašované. |
||
RastyAmateur Profil |
#15 · Zasláno: 5. 2. 2016, 19:27:44
Lonanek:
V případě, že se někdo nabourá do databáze, mohlo by to být nebezpečné... |
||
Milan1236000 Profil |
#16 · Zasláno: 5. 2. 2016, 20:14:03
Díky všem za reakce. Zarazila mě jedna z nejhlavnějších věcí.
Když uživatel při registraci napíše, jaké chce používat heslo, funkce password_hash() z něho udělá hash (bez jakékoli další úpravy) a ten se uloží do databáze.
Když se chce ale uživatel přihlásit, problém je na světě. Když zadá to samé heslo jako při registraci, tak se z něho vytvoří hash, který se porovná s tím v databázi. Ten problém je v tom, že funkce password_hash() pokaždé ze stejného zadaného řetězce vytvoří jiný hash, takže to se pak uživatel nepřihlásí, ne?
Metody sha1 a md5 pokaždé vytvoří ten samý hash, tam je to jasné. echo password_hash("heslo", PASSWORD_BCRYPT); //pokaždé vytvoří jiný hash echo sha1("heslo"); echo md5("heslo"); |
||
Fisir Profil |
#17 · Zasláno: 5. 2. 2016, 20:24:41
Reaguji na Milana1236000:
„problém je v tom, že funkce password_hash() pokaždé ze stejného zadaného řetězce vytvoří jiný hash, takže to se pak uživatel nepřihlásí“
No a proto máme funkci password_verify() ;-)
|
||
Milan1236000 Profil |
#18 · Zasláno: 5. 2. 2016, 21:04:05
Fisir:
Jasně, díky. |
||
Martin2 Profil * |
#19 · Zasláno: 6. 2. 2016, 11:21:17
Timy:
„A kde se to uvádí?“ Tady. Vyzkoušeno nemám. Milan1236000: „Ten problém je v tom, že funkce password_hash() pokaždé ze stejného zadaného řetězce vytvoří jiný hash“
To je účel, ne? Proto se dává náhodný salt do bezpečnostních hashů. Když se podíváš na výstup z té funkce, tak obsahuje tři části. Parametry určující typ a nastavení algoritmu, 22 znakový salt a samotný hash. $2y$10$4sstcsIE7pJT7KHlyTu0VOYlh48VyW1btMjC75BgwcqbUrLMROTXW |
||
Timy Profil |
#20 · Zasláno: 6. 2. 2016, 14:01:23
Martin2:
„Tady. Vyzkoušeno nemám.“ To by ale dle popisu měl být program, který nalezne dva, v podstatě náhodné, řetězce, které mají stejnou hash. Tj. nefunguje tak, že se mu předhodí hash a on vrátí nějaké řetězce, které mají danou hash. |
||
Milan1236000 Profil |
#21 · Zasláno: 7. 2. 2016, 20:30:21
Jen ještě malý dotaz. Do databáze tedy stačí ukládat jen samotný hash? Původní nezahashovaný řetězec není potřeba někam ukládat?
|
||
lionel messi Profil |
#22 · Zasláno: 7. 2. 2016, 20:39:08
Milan1236000:
„Původní nezahashovaný řetězec není potřeba někam ukládat?“ Nielenže netreba, ale bolo by to dokonca maximálne nebezpečné (útočník by mohol získať heslo v surovej podobe veľmi jednoducho). |
||
Milan1236000 Profil |
#23 · Zasláno: 8. 2. 2016, 01:03:55
lionel messi:
Ok, díky. |
||
Časová prodleva: 9 let
|
0