Module security_state

Source
Expand description

Security state is a signed object that attests to a user’s (or later an organization’s) security state. The security goal is to prevent downgrades of specific features within the user’s account by the server / a networked attacker with TLS introspection access.

A security state contains a security version. Based on this version, features can be disabled. Since the server cannot sign a security state, it can no longer downgrade the feature, because it cannot produce an arbitrary valid signed security state.

Note: A long-term compromised server can record the security state of a user, and then replay this specific state, or the entire account to downgrade users to previous states. This can be prevented per logged in session by the client, and for bootstrapping a client by using an extended login-with-device protocol.

To utilize the security state to disable a feature the following steps are taken:

  1. Assume: Feature with format version A is insecure, and cannot be changed by simple mutation
  2. A new, safe format version B is introduced, and an upgrade path created
  3. The upgrade path is made mandatory
  4. After upgrades are run, the sdk validates that all items are in format version B, and the security state can be updated to contain the security version N+1
  5. The client, given a security state with security version N+1 will reject all items that are in format version A.

Structs§

SecurityState
The security state is a signed object attesting to the security state of a user.
SignedSecurityState
A signed and serialized SecurityState object.