Filesystem layout

Overview

Cryptohome manages directories as follows:

  • /home/.shadow: Location for the system salt and individual users' salt/key/vault

  • /home/.shadow/<salted_hash_of_username>: Each Chrome OS user gets a directory in the shadow root where their salts, keys, and vault are stored (s_h_o_u).

  • /home/.shadow/<s_h_o_u>/vault: The user's vault (the encrypted version of their home directory)

  • /home/.shadow/<s_h_o_u>/master.0: Vault keyset for the user. The vault keyset contains the encrypted file encryption key and encrypted filename encryption key. It also contains the salt used to convert the user's passkey to an AES key, and may contain the TPM-encrypted intermediate key when TPM protection is enabled (see tpm.h for details).

  • /home/.shadow/<s_h_o_u>/mount: On successful login, the user‘s vault directory is mounted here using the symmetric key decrypted from master.X by the user’s passkey.

  • /home/user/<s_h_o_u>: bind mount of /home/.shadow/<s_h_o_u>/mount/user (applications should prefer this mount point for interacting with cryptohome)

  • /home/root/<s_h_o_u>: bind mount of /home/.shadow/<s_h_o_u>/mount/root

  • /home/chronos/u-<s_h_o_u>: bind mount of /home/.shadow/<s_h_o_u>/mount/user used for multi-user support. (deprecated)

  • /home/chronos/user: bind mount of the active user /home/.shadow/<s_h_o_u>/mount/user, for backward compatibility. (the usage of the mount point is discouraged)

The underlying filesystem mechanisms are using one of the following: ecryptfs (deprecated, used on old kernels), fscrypt (current, v1 is used on 4.x boards and v2 is used on 5.4+ boards) and lvm+dmcrypt (upcoming vault management and encryption mechanism). The filesystem encryption keys are themselves encrypted via various mechanisms (see [vkk.md]).