Replies: 2 comments 2 replies
-
|
Thought about something like that, but quickly threw that idea away. It does not bring any real advantage or improvement, while only coming with quite a few drawbacks. It makes sense for situations with unencrypted connections, but for Rauthy I don't see any real advantage.
This leaves an attacker with only a single attack vector: Gaining full The problems that come with something like OPAQUE though are things like a lot more complicated password registration + login ceremony, afaik not even being able to rotate your backend secret if it leaks, because you would not be able to validate all already registered passwords anymore, it's not standardized in any way and does not bring native browser support. It would also make any custom implementations for Rauthy way harder, when it would not accept plain passwords. On top of it the already mentioned degradation of security because you would not be able to apply a password policy to make sure the user uses actually secure passwords. OPAQUE allows a user to set Using OPAQUE though has the exact same attack vectors as the current approach has, with the exception that an attacker theoretically could not read a plain password from a randomized memory location while being So in the end, the only difference is, that Rauthy would not see your password. That's it. But here is the thing: If Rauthy (or any other application) would have malicious intent, it doesn't even need to know your password. It has the JWKS to generate as many tokens as it wants and use them to authenticate against downstream clients until end of time. SolutionThe solution to all of this is super easy and exists already: Webauthn Just use a passkey, and maybe even remove the password completely from your account, or don't register one in the first place. This brings only advantages without any downsides. Why trying to fix passwords and make them a lot more complicated, when we already have a way better, standardized solution with browser-native support in every way? |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for the detailed response!
This is prone to a developer mistake. Nobody intentionally does such silly things, but in practice this still might happen, and OPAQUE protects from such mistakes.
You can implement this policy on a client side, you don't really need to enforce it in the server. And if users intentionally decide to bypass it manipulating requests, well, that's their decision and their responsibility.
Recently there were a lot of hardware vulnerabilities that allowed to read arbitrary memory locations. Also who knows who can read memory of your virtual machine if you are hosting on VPS. OPAQUE protects against passive attacks which are theoretically easier to perform than active attacks.
You should still be able to validate it, clients don't persist any secret values besides passwords on their side, so knowing a leaked password you can check if it matches stored by server secrets.
Is there a goal to make it easy? Rauthy already has custom proof of work implementation anyway.
Not everyone might want to use it. There are people who might prefer using stateless hashing password manager like LessPass, or not use password manager and physical keys at all. And I don't think enforcing everyone to use passkeys is the way to go. So making passwords more secure is still a good thing, considering that Rauthy allows to use only passwords. The only real drawback of OPAQUE is that as a user you don't really have a good way to make sure it's actually used, so you can't really rely on the fact that server will never get your password without inspecting the client code that you get from the server each time you log in. I think OPAQUE is still an improvement over a traditional schema, but I guess it's fine if you already considered it and decided it's not worth to be implemented. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I see that rauthy is accepting passwords in a plaintext form and then stores their hashes. It's possible to improve it using zero-knowledge proofs instead. Have you considered using OPAQUE? As an example it's implemented in lldap.
Beta Was this translation helpful? Give feedback.
All reactions