Diskuze: Hashovací funkce na hesla
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 13 zpráv z 13.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
SHA256/SHA512. Pokud by jsi chtěl něco exotičtějšího, pak RIPEMD-160 (ne klasický RIPEMD)
Nebo jakýkoliv RIPEMD, přepsal jsem se, chtěl jsem napsat 256.
hash($hash, $password);
první parametr ($hash) je algoritmus, nejčastěji se používá asi sha512 (patří k nejbezpečnějším). Druhý parametr ($password) je textový řetězec, který chceš zahashovat.
Libovolná funkce z rodiny SHA-2 bude stále dobrou volbou, řekl bych. Pro vyšší bezpečnost bys měl heslo posolit (prakticky zmaří útok přes rainbow tabulky, navíc odliší entity se stejnými hesly) a hashovat iterativně (útočníkovi dá velkou práci si nějaké ty hashe předpočítat, to samé platí o útoku hrubou silou). Výhodu ale oceníš hlavně v případě, kdy se ti k hashům hesel dostane někdo nepovolaný.
"solení" znám, jen nevím co znamená to "hashovat iterativně". To je něco několikanásobný hash?
Já používám přímo PHP funkci password_hash().
Můžeš se na ni <a
href="http://php.net/manual/en/function.password-hash.php">podívat</a>.
Většinou sůl dělám proměnnou pomocí nějaké vlastnosti (jméno,
příjmení, ...)
<?php
//Sůl ze tří částí
$salt = parlibovolnychznaku . hash("sha-512", $surname) . parlibovolnychznaku;
//Nastavení hashe
$options = [
'cost' => 12,
'salt' => $salt,
];
//Zahashování hesla
$finalPassword = password_hash($password, PASSWORD_BCRYPT, $options);
solení" znám, jen nevím co znamená to "hashovat iterativně". To je něco několikanásobný hash?
Ano, znamená to aplikovat hashovací funkci na heslo několikanásobně.
hash(hash(...hash($heslo,...)...)
Cílem je ztížit útočníkovi výpočet hashů z hesel (klidně můžeš hashovat třeba 512krát) tak, že pro něj bude časově dost náročné. Jelikož heslo ověřuješ jen při přihlášení uživatele, neznamená pro tebe taková časová náročnost žádný problém (při přihlášení si uživatel počká o trošku déle, ale to by neměl být problém).
Ta funkce password_hash by něco takového možná mohla umět, nevím.
Ahoj,
je dobré používat funkci password_hash s PASSWORD_DEFAULT
konstantou. Dále jako ochranu používám symetrické šifrování pomocí
AES(Rijndael) s 256 bitovým klíčem a CBC modem. Klíč si uchováš někde
mimo databázi, třeba v nějakým konfiguračním souboru u sebe na hostingu,
který poté použiješ jak při vytváření či kontroly hesla. Člověk,
který by se ti náhodou dostal do databáze a nebude mít tento klíč (256
bitový) nemá prakticky šanci zjistit plain text hesel. Na netu určitě
najdeš kód na AES-256-CBC pro PHP.
Možná by na toto stačilo rozšíření mcrypt (mohlo by být
nainstalované na většině hostingů).
http://php.net/…-encrypt.php
Souhlasím s Michal Šmahel jeho řešení je nejideálnější v dnešní době.
Také je dobré ještě výsledný hash zašifrovat jak radí Dominik Klapuch (mcrypt_encrypt), kde použiješ klíč, který bude někde v bezpečí (konfigurační soubor, apod..) nikoliv databázi.
Martin Dráb: Několika násobný hash je naprostá hloupost, pokud to zacyklíš tak si spíže ještě více zavaříš (znehodnotíš samostatný hash). Je to chyba, které se dá předejít tím, že použiješ co použít máš (Password_hash či crypt s algoritmem bcrypt nebo blowfishem).
Sůl, slouží aby hashe stejných hesel nevypadaly stehně (hash ahoj = hash
ahoj), u password_hash mám rád to, že si tato funkce vytvoří sůl sama pro
každého uživatele. Takže se nemusíš starat o tuto drobnost. Je zkrátka
nejlepší nechat vygenerování soli na tom kdo ví jak na to.. 
Martin Dráb: Několika násobný hash je naprostá hloupost, pokud to zacyklíš tak si spíže ještě více zavaříš (znehodnotíš samostatný hash). Je to chyba, které se dá předejít tím, že použiješ co použít máš (Password_hash či crypt s algoritmem bcrypt nebo blowfishem).
Máš nějaký zdroj k tomuto tvrzení? Je pravda, že iterativní hashování zvyšuje pravděpodobnost kolize, ale ne zásadně (zůstane pořád zanedbatelná). Co se týče práce s hesly, během let jsem několikrát četl doporučení pro iterativní hashování (případně v dalších iteracích přidávat ještě nějaký další vstup). Myslím, že existuje i nějaký standard, ale už se napamtuju, jakou má zkdratku a nemůžu to vygooglit.
EDIT: Aha, jedná se o PBKDF-2, i když účel tam přímo není generování jenom hashů z hesel.
V dnešní době to prostě není ani nutné, už máš slušné funkce pro uchování hesel. Stále tvrdím, že cyklení hashů je hloupost, používej to co k tomu je určené, nic jiné..
Kdysi četl já to zase kdysi slyšel na přednášce. Používej si co chceš, ale ostatním to nedoporučuj, protože když i použiješ rychlí hash tak cyklování ti stejně nepomůže..
Zobrazeno 13 zpráv z 13.
