-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add password hardness evaluation #9
Comments
I already implement a way that the user can change it? Or it can be just on front-end and the endpoint of creating and update of users? |
A validation logic should exist both in the frontend (for feedback) and backend (for guarantee). Hardness evaluation says to the user how strong the password actually is. The actual logic behind it has not yet been decided and is open for discussion. Any ideas? One that I was thinking is not imposing the existence of certain characters (like so many identity managers do) but rather we should create an entropy heuristics taking in consideration:
These dimensions should then be multiplied by each other and we grade it according to specific thresholds. Example: Say we define a
What do you think, @claudiosegala? |
Applying this heuristic with a hard rule of password size (ex. at least 12 chars), would be enough to add the security one expects from an identity manager, in my opinion. |
@abilioesteves I am worried that making this entropy might not be a good approach. Your proposalAdvantages
Disadvantages
My proposalI am basing my proposal in a discussion I had with Erick and the articles Your Password is Too Damn Short and Password Rules Are Bullshit. In this article, we see that mainly we should be worried about the size of the password and make some recommendations which I agree with.
Advantages
Disadvantages
On this issueIf this approach is chosen, it would be advised to break into three issues. One to check the password with a dataset, another to control login tries and the last for the rest. Observations
|
Considering the directions taken in this issue, I would suggest that to implement the step cited as "Compare password with a dataset of leaked passwords" by @claudiosegala, we should consider the haveibeenpwned API. |
Awesome, @claudiosegala! I agree with you. Have you thought about how we are going to communicate to the user how good/bad is his password, based on your proposal? I can see clearly the difference between valid and invalid passwords, but I don't see clearly how one can understand if his password needs any improvement. @erickmoreno, thanks for your input! |
@erickmoreno, with regards to haveibeenpwned, how exactly would that fit into our password hardness evaluation policy? The way I see, since we are using salts, how exactly would I ever get a match with their password database? Thanks! |
More than salts, we are using different hash algorithms. Considering that, we cannot verify our already saved passwords. The call to this API must be done from the frontend as a step to prevent users from keep using already hacked/public passwords. |
So, after discussing with @erickmoreno, my understanding of this haveibeenpwned proposal is the following:
With that in mind, @erickmoreno, I see that there is a possible problem when the external service is unavailable. Do you have any fallback strategy in mind, in case we cannot communicate with haveibeenpwned? Maybe cache the hashes every time we communicate? Also, I didn't understand why this communication needs to happen in the frontend. Shouldn't we just do it in the backend before password encryption? Thanks! |
The fallback IMO is just let the user go on with the register process. We should never let this be a wall against the user, and we should never store the password either. Regardless the frontend calling haveibeenpwned, I'm just assuming that the process to validate/verify the users password is been done on the frontend and we are not transmitting the plain text password across our services. Te only requirement is that this must be done before any hash/encryption operation over the password, but can be placed where the other validations are been executed. There's one more reason to put the call to any outside API on the backend, avoid possible network restrictions on the client side. |
I think matching the given password with a "password blacklist" of sorts, is imperative to improve our security standards. I would like to see this being done with
This is exactly the reason why I questioned the point of putting this logic on the frontend. Since we cannot make assumptions regarding client network restrictions, we should definitely implement this logic on the backend. That would also be more reasonable given a fallback mechanism needs to be in place - which may require communication with a database and other components. -- I'll open an issue to target this |
With your guys inputs, our first policy should be the following:
At this moment, there will be no feedback of how strong the password actually is, only if the password is strong enough to be acceptable or not. A hover hint should be provided with the 3 rules above and an example of a strong password. To be implemented in other issues:
@claudiosegala, please proceed with the implementation of the first 3 rules for this issue and the frontend details. Thanks! |
@abilioesteves Do I create the issues for topics 4 and 5 you described? |
@claudiosegala, they have already been addressed: #30 and #31 |
No description provided.
The text was updated successfully, but these errors were encountered: