In our company we're thinking about a new auth scheme (not a 2FA!) where vault is secured by secret. User should be able to access the vault just by typing the One-Time-Password (OTP) into the webform.
Here is the theory as I understand the normal OTP works:
- generated secret is stored on both the server and user's auth app
- some function now accept time and secret and generate OTP (6 digits)
- server verify if the OTP entered by the user matches the server generated OTP in the same time slot
`
client server
====== ======
+------+ +------+
time --> | | <-- time
| fn +--> OTP OTP <--+ fn |
secret --> | | <-- secret
+------+ ^ ^ +------+
| |
+- matches? -+
I was thinking if this scheme can be anyhow turned around like this:
`
client server
====== ======
+------+ +------+
time --> | time --> |
| fn +--> OTP -----+ | fn' +--> secret
secret --> | +----------> |
+------+ +------+
That way our server application will not store the secret anyhow and we get nice familiar UX for users to unlock the vault. Is it possible to reverse the OTP algorithm like this?