![]() |
Secure BCrypt Password Hashing
1 Attachment(s)
This is a 'howto' for using bcrypt for your password hashs, instead of the default vBulletin one, which is highly insecure.
Remember, backup your database before doing this!! Quote:
More information about BCrypt can be found here: http://codahale.com/how-to-safely-store-a-password/ - http://phpmaster.com/why-you-should-...red-passwords/ tl;dr: if you want to be moar secure, use bcrypt. " How much slower is bcrypt than, say, MD5? Depends on the work factor. Using a work factor of 12, bcrypt hashes the password 'password' in about 0.3 seconds on my laptop. MD5, on the other hand, takes less than a nanosecond." BEFORE YOU DO THIS, PLEASE CREATE A .PHP FILE WITH THIS IN IT Code:
<?php /includes/functions.php Add this to the end, just before the footer message. Code:
/** includes/class_dm_user.php Now.. Find this: Code:
if ($password == md5(md5($this->fetch_field('username')) . $salt)) Code:
if ($password == $this->hash_password($this->fetch_field('username'), $salt)) Then, on the same file, replace this: Code:
return md5($password . $salt); Code:
//No need to md5($password), since it is already md5'd above. includes/functions_login.php Find this: Code:
$vbulletin->userinfo['password'] != iif($password AND !$md5password, md5(md5($password) . $vbulletin->userinfo['salt']), '') AND Code:
$vbulletin->userinfo['password'] != iif($password AND !$md5password, hash_password_bcrypt(md5(md5($password) . $vbulletin->userinfo['salt']), $vbulletin->userinfo['salt']), '') AND So effectively, we are hashing the password using the normal vBulletin way of md5(md5($password) . $vbulletin->userinfo['salt']) however after doing that, we then run hash_password_bcrypt() around it. By doing it this way, we can now convert our old hashes to the new bcrypt method. Create a file called "convert.php", with the contents: Code:
<?php |
Thank you for the fast reply! I love you man!
|
After I applied the changes I am unable to login, it says my password is incorrect :(
EDIT Stupid me, there was an extra parenthesis in functions_login.php I will respond if it works in a bit! EDIT No it does not work :( vBulletin v4.2.0 |
excellent.
|
Quote:
|
Since your new algorithm basically encrypts the original hash, I think you could actually write a function to go through and convert all the passwords so that existing members could log in without having to change their pw. But of course when it's uninstalled there's nothing else to be done but have everyone change their pw. Either way you might want to add a warning in the description.
Anyway, nice mod, I was thinking about something like this a while back but never got around to it. |
Quote:
And yeah, it can only go 'one way'. I'll add a disclaimer to the OP |
First off, thanks for trying to make vBulletin more secure. BCrypt is an excellent algorithm and much much better than md5. From my latest research, it's the industry standard.
However - you are going to all this work to properly store the password using BCrypt, but then you md5 it. As soon as you md5 it, you have lost all of that security :(. Second - and this is just a future suggestion, you could have the system detect which password hash they are using, and check accordingly. This way you can update peoples passwords to the new system whenever they change their password (and probably mass-email everyone suggesting they do). but still authenticate the old hashes properly. Unfortunately the way it's implemented, nobody will want to use this except for starting new boards. It is possible. Cheers |
Quote:
I'm currently crteating the 'auto-bcrypt' pwd encrypter for it. it'll be done soon. |
No - once you md5 it, you have lost all of the security. You are still succeptable to md5 collissions which is md5's biggset weakness.
|
Oh. I see what you mean. I thought you were referring to hash cracking.
MD5 collisions aren't such a problem in vBulletin, really. + Also, it would take a lot longer to find a hash collision... |
It has nothing to do with vBulletin.
If someone hacks into your server and gets your database dump, they can brute force that to find other possible passwords for your users. The whole point of BCrypt is to make that impossible by A) being ridiculously slow, and B) being a more crytographically unique hash. |
Quote:
First of all, if they cracked the MD5, what would they get? They would get the bcrypt value. Then what? Then they have to crack that. That's the pointy. |
Quote:
Dictionary Attacks, or Rainbow Tables or hash collisions? Hash collisions aren't useful, afaik.. they just let you login to your account(or NOT your account) with more than just one password. |
NICE :)
this rocks |
I have a feeling that after using this, the forums login/reset wise is actually much slower.
|
Quote:
Note: the slower the algorithm (and amount of iterations/cost), the longer it takes to brute force passwords, which is a good thing. |
Quote:
|
Updated with a method to set passwords :)
|
Great Job and a Very good Idea. I have had my friends vB4.x forums hacked where the hackers later Published all forum Users Usernames, Email, and MD5 Password Hashes out in Public. I know by facts that they hacked their way in by decrypting the Admin Password somehow. And NOT by Brute Forcing their way in. We suspected that they got in because of a Custom Skin installed on the forum that was vulnerable.
I am not saying its not possible to Hack or Decrypt a Password by Brute Forcing, But I would rather Secure my forum and Passwords a bit Extra than just leaving the doors open and Welcome them! At least they would use more time to Crack the Passwords. Thumbs up and Well Done. Ps, I asssume you could use the same method for vB3.8. So I hope you will create a version for vBulletin 3.8 Users too. |
I just wanted to say thank you for creating this. MD5 needs to die a strong death. Do you know how hard it would be to implement on vb3? I have a client that uses it and I would love to get them away from MD5.
|
Quote:
|
Is it me or does it take longer to log in?
|
It's a slower algorithm, but you should definitely not notice it. How slow are we talking about? Any other plugins which could affect it?
|
Quote:
Code:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/site/public_html/includes/functions_login.php on line 167 |
Well my only guess is that you made a mistake somewhere, double check the changes you did and make sure it matches the ones of OP.
|
Quote:
--- I reverted login time gone back to normal. Do not use this if your board is 10k members plus. |
Quote:
|
All times are GMT. The time now is 06:27 PM. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
![]() |
|
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|