Diskuze: Uložení jména a hesla do DB

PHP PHP Uložení jména a hesla do DB American English version English version

Avatar
Denis Homolík (Alfonz):

Čau,
Chtěl bych se zeptat jestli je správně ukládat do DB jen hash hesla osolené jménem(+ další sůl) nebo je lepší mít uložený hash(jméno + sůl) a jméno?

Odpovědět 31.3.2014 15:24
Vše je možné, dokud si to myslíte!
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:

Ahoj, spíže heslo osol náhodným řetězcem o 40 znacích (čísla a písmena).

Takže ulož osolený hash hesla a i tu sůl..

Nahoru Odpovědět  +1 31.3.2014 18:30
Chybami se člověk učí, běžte se učit jinam!
Avatar
Mark Vajšbejn:

Tady je pak аle problém že nemůže tady Alfonz zkontrolovat to, že se uživatel přihlásil.. protože se za sebou na 99.99 periodických procent nemůže vygenerovat náhodný řetězec stejný..

Já bych to doporučil udělat tak, jak to má dělaný Minecraftový plugin authme, ten udělá to, že vygeneruje náhodný řetězec který do Mysql databáze uloží v takovém formátu: Ten náhodný řetězec. "$" .Heslo osolené náhodným řetězcem. "$" .A dejme tomu jméno s heslem v md5.

Na nějakém takovém principu hashuje tento plugin, a pokud chces data zkontrolovat tak vezme první kus hesla, tedy to před prvním $, a tím to nějak smíchá s heslem a poté jménem(+heslem) a po částech zkontroluje.

Toto je poměrně neprolomitelné, protože náhodný řetězec se stále u každého uživatele mění, a je to lepší než nějaký stálý klíč který hashujes s jménem či heslem a navíc, dá se to bez problémů zkontrolovat kupříkladu v přihlášení.
:)

 
Nahoru Odpovědět 31.3.2014 19:31
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Denis Homolík (Alfonz)
David Čápka:

V PHP se má hashovat funkcí crypt(), v manuálu je example jak se to dělá.

Nahoru Odpovědět  +2 31.3.2014 19:40
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Mark Vajšbejn
Marek Z.:

Nevidím důvod měnit stále sůl, která spíže slouží hlavně k tomu aby nedošlo ke stejným hashům v db s jinými uživateli. Jak zmínil david, stačí Blowfish či sha-512 (crypt http://www.php.net/…on.crypt.php).

Nahoru Odpovědět 31.3.2014 19:45
Chybami se člověk učí, běžte se učit jinam!
Avatar
asanos
Člen
Avatar
asanos:

Já to řeším tak, že mám 3 sloupce:
Jméno, heslo(hash) a salt...
Pro přihlášení si pomocí SELECT salt WHERE jmeno=? vytáhnu salt a udělám otisk zadaného hesla s vytaženým saltem, které pak porovnám s obsahem heslo(hash).
_____________­_________
Na hashování používám:
blowfish $2y$ funkce crypt(), se sílou víc jak 10.
V každém případě mi statický salt připadá jako nesmysl. Útočník nějak zjistí, například 2 hesla a pak si z toho vytáhne salt.
_____________­________
Mimochodem, nikdy nepoužívejte MD5, nebo SHA-1!
Ještě jsem nenarazil na žádný hash z těchhle 2, který by neměl zaindexovaný google...
_____________­________
Slyšel jsem o způsobu, kdy byl ještě ten salt v db zahashovaný statickým hashem, ale asi to nebyl nenávratný hash, ale nějaký dopočitatelný, protože jinak netuším jak to mohlo fungovat... ;)

Nahoru Odpovědět 1.4.2014 15:00
Na světě je 10 typů lidí. Ti, kteří rozumí binárce a ti co nerozumí.
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:

Salt neslouží k tomu aby byl hash bezpečnější, slouží pouze k tomu aby se v databázi nenašli uživatelé se stejnými hashy. Ničemu nevadí, že ten salt je v čitelně podobě. Když heslo zahashuješ SHA-512, tak už to stačí. Osolíš heslo, zahashujes a při přihlášení prostě sůl přiřadíš a otestuješ.

SHA-512 nebo bcrypt (crypt + blowfish) můžeš pouze prolomit hrubou silou, či zkusit štěstí na googlu..

Nahoru Odpovědět 1.4.2014 16:14
Chybami se člověk učí, běžte se učit jinam!
Avatar
asanos
Člen
Avatar
asanos:

Jak píše Marek Z. ....
Hash má sloužit k tomu, aby se nenašli 2 uživatele se stejným hashem...
_____________­____________
hash z textu a statického saltu, bude vždy hash z textu a statického saltu....

Příklad:
Hash md5:
echo md5("TextSalt");
Vrátí:
"50427af1e447­d39c26f4ea36d041e­e71";

Klidně to spusťte 100x, vždy to vrátí to samé..
_____________­____________
Pokud budou mít 2 uživatelé heslo "Text", tak ten hash bude pořád stejný a ničeho jsme tak nedosáhly!

Omlouvám se pokud můj příspěvek tak nevyzněl. ;)

Editováno 1.4.2014 18:24
Nahoru Odpovědět 1.4.2014 18:24
Na světě je 10 typů lidí. Ti, kteří rozumí binárce a ti co nerozumí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na asanos
David Čápka:

To neplatí vždy. Funkce crypt() si přidává sůl přímo do hashe, sůl se generuje třeba randomem, může být vždy úplně jiná. 2 jiné hashe mohou být ze stejného hesla, ověřuje se to potom ne porovnáním, ale zas zahashováním. Na manuál jsem tu už odkazoval :) BTW md5 je už to samé jako plaintext a i od SHA se pomalu opouští.

Nahoru Odpovědět  +1 2.4.2014 12:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
mkub
Redaktor
Avatar
mkub:

MD5 je tak maximalne pouzitelne iba na vytvorenie kontrolneho suctu suboru, nie na na hash hesla...
MD5 je uz niekolko rokov prelomena sifra a ako David pise, nie je problem z toho MD5 hashu dostat spat uplnu informaciu (co sa da zneuzit crackermi a hackermi na lamanie hesiel)

 
Nahoru Odpovědět 3.4.2014 20:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.