I'm currently learning about Time-based One-Time Password implementations (see RFC6283). I see that a shared secret is part of the algorithm.
This shared secret is exposed to the user (see example with Google Authenticator).
So I'd like to ask:
- Why is this okay? Is this not risky in that the secret key can be inadvertently shared from there and end up in the wrong hands?
- Would the secret key be per user, or for all users of the backend application (I suppose the latter is the case as I've see it as a configuration setting in implementations)?
- What steps are recommended to ensure that this secret key does not fall into the wrong hands?