Diskuze: Uložení jména a hesla do DB
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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..
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í.
V PHP se má hashovat funkcí crypt(), v manuálu je example jak se to dělá.
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).
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...
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..
Jak píše Uživatel sítě ....
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í:
"50427af1e447d39c26f4ea36d041ee71";
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.
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í.
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)
Zobrazeno 10 zpráv z 10.