Blowfish encryptie
Is Blowfish een goede encryptie? Ik las op sommige plekken dat het langzaam is, klopt dat in de praktijk? En is het veilig?
Gr
hallo?
encryptie IS NIET hashing
Bcrypt is een traag hashing algoritme omdat het ontworpen is voor het hashen van wachtwoorden. Bij het hashing van wachtwoorden wil je een traag algoritme gebruiken.
Hoe snel of traag Blowfish is weet ik niet.
Heb het over Bcrypt ja, het encrypten van passwords daarmee. Viel me op dat de strings ook van een random lengte zijn dus dat lijkt me ook veiliger als Sha1. Voor mijn wachtwoorden staat $2y$ voor die strings, dat schijnt de laatste versie te zijn. Maar het is dus wel een goede methode? Of raad je wat anders aan.
Telkens wanneer je naar een andere server verhuist zul je moeten bepalen of de cost nog goed ingesteld staat.
Een te lage cost en je hebt weer een snel algoritme, wat je niet wilt wanneer je wachtwoorden wilt hashen.
Een te hoge cost en mensen kunnen je site plat gooien door je login formulier te spammen omdat het hashen te veel tijd en rekenkracht kost.
Bebruik de PHP functie password_hash() om makkelijk wachtwoorden te hashen met Bcrypt.
password_verify() gebruik je dan om een wachtwoord met de hash die in de database opgeslagen staat te vergelijken.
Gewijzigd op 01/04/2014 12:35:44 door Dos Moonen
Oke ik gebruik de functie crypt en password verify gebruik ik inderdaad al. Workload staat op 12 bij mij. Kwam alleen wel laatst tegen een foutmelding aan dat een oudere php versie dit niet ondersteund, is dan wel weer jammer. Volgens mij echt pas vanaf php 5.5+
Dos, wat zou jij ervan zeggen als je die kosten dan deels in eigen hand neemt, bijvoorbeeld door een variant van usleep(300) of sleep(1) in de login te zetten? Die kost wel een PHP-proces en RAM-geheugen, maar nauwelijks CPU-tijd. Dan zou dat efficiënter zijn dan een CPU-tijd vretend algoritme, maar is het effect hetzelfde.
Word mn topic gewoon ffe gekaapt 0.0
@Ward, dan vertraag je alleen online attacks. Door een traag algoritme te nemen vertraag je online EN offline attacks.
Hackers hebben van Adobe, LinkedIn en nog andere grote bedrijven de weten te hacken de database met versleutelde/gehashde wachtwoorden weten te bemachtigen. Wees niet naïef door te denken dat online attacks vertragen voldoende is als je serieus bent over de wachtwoorden van je gebruikers veilig opslaan.
Ga gerust verder over blowfish :p Voor mij is het al wel duidelijk, sowieso is het beter dan sha1.
Hoezo begin je nou weer over blowfish? Hoe zou ik daar verder over door moeten gaan?
Gewijzigd op 01/04/2014 15:57:31 door Snelle Jaap
Snelle Jaap op 24/03/2014 15:24:58:
Is Blowfish een goede encryptie? Ik las op sommige plekken dat het langzaam is, klopt dat in de praktijk? En is het veilig?
Blowfish is snel. De veiligheid hangt er een beetje vanaf; bepaalde soorten keys zijn erg zwak en dus eenvoudig te kraken.
Als alternatief zou ik AES of Twofish aanraden; die zijn iets beter.
Hoe ziet je huidige code er uit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
/* Create a new class called Bcrypt */
class Bcrypt {
private $rounds;
public function __construct($rounds = 12) {
if(CRYPT_BLOWFISH != 1) {
throw new Exception("Bcrypt is not supported on this server, please see the following to learn more: http://php.net/crypt");
}
$this->rounds = $rounds;
}
/* Gen Salt */
private function genSalt() {
$string = str_shuffle(mt_rand());// generating a random string
$salt = uniqid($string ,true);// generating a random and unique string
/* Return */
return $salt;
}
/* Gen Hash */
public function genHash($password) {
/* 2y selects bcrypt algorithm */
/* $this->rounds is the workload factor, which is kept usually from 12 to 15 */
$hash = crypt($password, '$2y$' . $this->rounds . '$' . $this->genSalt());
/* Return */
return $hash;
}
/* Verify Password */
public function verify($password, $existingHash) {
/* Hash new password with old hash */
$hash = crypt($password, $existingHash);
/* Do Hashs match? */
if($hash === $existingHash) {
return true;
} else {
return false;
}
}
}
?>
/* Create a new class called Bcrypt */
class Bcrypt {
private $rounds;
public function __construct($rounds = 12) {
if(CRYPT_BLOWFISH != 1) {
throw new Exception("Bcrypt is not supported on this server, please see the following to learn more: http://php.net/crypt");
}
$this->rounds = $rounds;
}
/* Gen Salt */
private function genSalt() {
$string = str_shuffle(mt_rand());// generating a random string
$salt = uniqid($string ,true);// generating a random and unique string
/* Return */
return $salt;
}
/* Gen Hash */
public function genHash($password) {
/* 2y selects bcrypt algorithm */
/* $this->rounds is the workload factor, which is kept usually from 12 to 15 */
$hash = crypt($password, '$2y$' . $this->rounds . '$' . $this->genSalt());
/* Return */
return $hash;
}
/* Verify Password */
public function verify($password, $existingHash) {
/* Hash new password with old hash */
$hash = crypt($password, $existingHash);
/* Do Hashs match? */
if($hash === $existingHash) {
return true;
} else {
return false;
}
}
}
?>
Gewijzigd op 01/04/2014 16:24:38 door Snelle Jaap
Toevoeging op 01/04/2014 21:57:10:
Ik vraag dat omdat er een PHP implementatie te vinden is van password_hash()
Onder "See Also" op http://www.php.net/manual/en/function.password-hash.php wordt gelinkt naar https://github.com/ircmaxell/password_compat
Dat kun je gebruiken voor PHP 5.3.7 en hoger. Als je het op PHP 5.5 en hoger include zal het geen fouten opleveren.
Ik had hem getest op wamp dat ging prima, daarna overgezet op een testhost die blijkbaar nog een te oude versie had dus had maar weer sha1 gebruikt voor de passwords. Ga is kijken of ik het werkend kan krijgen op een oudere versie, thx.