Jump to content
php.lv forumi

Paroļu droša hashoshana


007007

Recommended Posts

Tā kā esmu galīgs iesācējs, vēlos precizēt drošas hashoshanas noteikumus. Vai tā tik tiešām ir, kā vēsta šis raksts:

http://phpacademy.org/forum/viewtopic.php?f=8&t=15356

 

Kā dažādu algoritmu palaišana ķēdē, piem, sha512 un sha256 var padarīt paroli vājāku nekā lietojot tikai vienu algoritmu? Pēc manas saprašanas ķēdes lietošana to nepadarīs īpaši spēcīgāku, bet tā taču to nevar padarīt vājāku, ne tā?

 

Un vēl apgalvots, ka drošai sha512 lietošanai tas jāieliek loop'ā, kas hashos doto paroli vismaz 5000 reižu, lai procesu padarītu sarežģītāku un lēnāku. Izklausās saprātīgi.. Ko sakāt?

 

Un visbeidzot kādas atsauksmes par šajā forumā Dieva vietā nostādīto Bcrypt ?

 

Paldies.

Link to comment
Share on other sites

hešošanu pirmkārt lieto kā papildus aizsardzības līdzekli, gadījumiem, ja datubāzi iegūst kāds cits un lai viņam nebūtu pieejamas lietotāju paroles. Ja papildus tam viņš arī iegūst hašošanas algoritmu (metodi, saltus, utt.), tad viņš var veikt pilnu pārlasi parolēm un mēģināt atrast lietotāju paroles, tāpēc, lai viņš nevarētu veikt 100`000 pārlases sekundē, tiek izmantotas laikietilpīgākas metodes heša iegūšanai (cikliska hešošana, bcrypt, utt.), tādā veidā uzbrucējs var, piemēram, veikt 100 pārlases sekundē un viņam vajag 1000x vairāk laiku, lai atrastu heš vērtībām atbilstošās paroles.

Edited by codez
Link to comment
Share on other sites

Pirmais un pats svarīgākais ir nodrošināt to, lai db neviens nepiekļūst, tad vispār nebūs jāuztraucās kā tiek glabātas paroles.

Bet, ja grib tiešām taisīt kaut ko mega drošu, tad vari padomāt par paroles hašošanu javascriptā jau klienta pusē un jau haša sūtīšanu caur tīklu, protams, servera pusē vēl nohašojot.

Link to comment
Share on other sites

Tas raksts ir ļoti labs, taču, manuprāt, runa ir vairāk par teorētiski drošāko modeli, nevis praksi. Praksē, kā jau minēts, svarīgi ir nepieļaut datu noplūdi pirmkārt, nepieļaut muļķīgas kļūdas kodā un pēc vairākām nesekmīgām paroles ievadēm uz laiku bloķēt iespēju pieslēgties.

 

Man pašam patīk šī metode:

return $salt . hash($salt . $plainText);

 

Kur $salt ir random salts (tā, kā tajā rakstā) un hash() ir "sha kaut kas", atkarībā no paranojas līmeņa.

Edited by Mr.Key
Link to comment
Share on other sites

Par bcrypt atsauksmes labas, arī par scrypt labas. Scrypt, gan neesmu PHP vidē redzējis. Arī bcrypt var nebūt pieejams.

Ja grib izmantot standarta hešošanas algoritmus, tad labāk sāli piesaistīt ar hash_hmac().

 

Reiz biju uztaisījis paraugu bezsesiju autentificēšanas mehānismam, kas izmantoja vairākkārtēju hashoshanu: http://php.lv/f/topic/11116-lietotaju-autentificesana/ taču šķiet, ka paste.php.lv pazaudējusi to saturu (Ja kādu interesē, tad lūk pēdējā atrastā publikācija par šo tēmu: http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf ).

 

Jebkurā gadījumā, bez pašas hashošanas ir vēl citi mehānismi, kā DB pusē nodrošināt paroļu aizsardzību.

Labs un gana autoritatīvs resurss:

https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

Link to comment
Share on other sites

Var iztikt arī ar kaut ko šādu.

 

// $salt glabājams kopā ar paroli DB. Salt ir katram lietotājam unikāls.
$multi = 23479.32454522499345;
$salt = base_convert(mt_rand(mt_rand(1111,9999),mt_getrandmax())*$multi,10,16);


$k = sha1($salt);
$t = 'Manaparole';
$buffer = null;
for($i=0;$i<strlen($t);)
{
for($ii=0;$ii<strlen($k);$ii++,$i++)
{
		$buffer .= ($t{$i} ^ $k{$ii}) . ((int)$t{$i} ^ (int)$k{$ii});
}
}

$p = hash('sha256',($k.$buffer.$salt));
echo ($k.$buffer.$salt) . ' - ' .$p;

 

Parasti, lielākā daļa defeisu kompromitē pašu datu bāzi. Šāds neliels scenārijs var palīdzēt pret defeisotām DB, kur nav zināms šifrēšanas algoritms.

Bonusam, pašam algoritmam var pielietot piemēram, http://pecl.php.net/package/bcompiler

Edited by F3llony
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...