Autor Zpráva
Sweetko
Profil *
Ahojte,
kamarád dělající s bezpečností os a různými šifrovacími algoritmy mi kdysi napsal že hashovací fce jsou odsouzené k prolousknutí. Proto se raději ptám která z následujících fce je nejbezpečnější:
<?php
$rawText = "Hello World"; 
$sha = array(
"sha1" => sha1( $rawText ), 
"sha224" => hash('sha224',$rawText),
"sha256" => hash('sha256',$rawText),
"sha384" => hash('sha384',$rawText),
"sha512" => hash('sha512',$rawText)
);
foreach( $sha as $index => $key )
{
  echo $index . ": " . $key . "</br>\n";
}
?>

Chci použít 128 znakový výstup sha512 do db na hesla, je to bezpečnější jak fce sha1 ?
Děkuji za odpovědi na můj stupidní dotaz, moc toho o haších nevím :-/
ShiraNai7
Profil
Sweetko:
Chci použít 128 znakový výstup sha512 do db na hesla, je to bezpečnější jak fce sha1 ?

Zřejmě.

hashovací fce jsou odsouzené k prolousknutí

To bych nepovažoval za pravdivé. Jedná se jen o to, že pro starší hashovací funkce (md4, md5, sha-0 atd) existují postupy které jsou schopny najít kolizi o několik řádů rychleji než brute-force metoda. Nejedná se o žádné "prolousknutí". To zaprvé. Zadruhé k hashům v tvé databázi máš přístup pouze ty a tvůj systém.
Sweetko
Profil *
ShiraNai7:
Díky za odpověď, samozřejmě že nikdo jiný nemá přístup krom kolegů, hackera a mě. Jen doufám že se bezpečnost zvyšuje a né na opak snižuje.
Sweetko
Profil *
ShiraNai7:
A jeden kamarád mi jednou hodil hash na nějaký server kde mi pár týdnů louskali heslo, tak proto to slovo "louskání", pořádně nevím co to znamená, tedy prolomení?
Sweetko
Profil *
Poslední dotaz :)) Proč se používá base64_encode( $hash ) ?
Děkuju děkuju
ShiraNai7
Profil
Nepoužívá, není k tomu důvod. Jedině v případě, že by $hash byl binární výstup hashovací funkce a ne HEX řetězec.
YoSarin
Profil
Sweetko:
U hashovacích algoritmů to znamená, že když je k dispozici hash hesla, tak jsou schopni najít takovou kombinaci znaků, ze které po opětovném zahashování vznikne původní hash.
Tady máš příklad dvou různých řetězců se stejným MD5.

Co to znamená pro uživatele, jehož heslo bylo 'prolomeno':
Pokud do databáze ukládáš zahasovaná 'čistá' hesla, tak hacker se s nalezeným shodným heslem může teoreticky přihlásit.
Pokud uživatel používá stejné heslo na více webech a všechny ty weby ukládají 'čisté' heslo stejným hashovacím algoritmem, může se hacker přihlásit i na tyhle weby.

Jak tohle riziko snížit:
Heslo nehashuj 'čisté' (tzn. tak, jak ho vložil uživatel), ale přidej k němu nějaký vlastní string (nezapomeň ten string přidávat i při kontrole hesla u přihlašování). I kdyby hacker nakrásno z databáze dostal hash a našel string se stejným hashem, tak se s ním nepřihlásí (kvůli tomu přidanému stringu)
Sweetko
Profil *
YoSarin, ShiraNai7:
Přidávám řetězec login aby nedošlo ke stejnému hashi v tabulce ale když má hacker přístup do té tabulky tak mi to taky nepřijde zrovna bezpečné tak k tomu přidám ještě nějaké heslo a bude to snad ok :))

Díky za osvětu.
Sweetko
Profil *
Tedy nějak takto:
$hashDB = hash( sha512( $_POST[ 'password' ] ) . $_POST[ 'login' ] . "123456789Heslo_-+" ) );

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