El principio general utilizado por FileVault es el mismo que el de cualquier esquema de cifrado que permita más de una contraseña para acceder a los datos (como LUKS, que se utiliza habitualmente en entornos Linux). En resumen:
- Para cifrar y descifrar los datos se utiliza una clave llamada MEK (media encryption key).
- Una clave llamada KEK (key encryption key) se utiliza para generar una versión de texto cifrado del MEK, que llamaremos X. El valor de X se almacena junto a los datos, por ejemplo, en una cabecera del sistema de archivos.
- Una serie de contraseñas (como tu contraseña de usuario y una contraseña de recuperación), por ejemplo P₁ y P₂, se pasan a una función estandarizada de derivación de claves para generar las correspondientes claves de cifrado que se utilizan para generar versiones de texto cifrado de la KEK. Digamos que la versión de texto cifrado de la KEK generada con P₁ es C₁, y de la misma manera, P₂ produce C₂. Los valores C₁ y C₂ se almacenan junto a X.
Ahora, si conoces una de las contraseñas, puedes proporcionarla para descifrar los datos. Por ejemplo, si conoces P₂, puedes descifrar C₂ para averiguar la KEK. Una vez que conozcas la KEK, puedes desencriptar X para averiguar la MEK. Una vez que conoces el MEK, puedes desencriptar los datos.
Este esquema permite añadir, eliminar y alterar fácilmente las contraseñas utilizadas para acceder a los datos, ya que para ello basta con alterar el conjunto de valores Cᵢ almacenados. No es necesario volver a cifrar los datos en sí, ya que el MEK utilizado no cambia.
En LUKS, estos lugares para almacenar un valor Cᵢ se llaman "keyslots", y LUKS proporciona ocho de estos keyslots.
En APFS, todos estos valores Cᵢ se almacenan juntos en un bloque de datos llamado "keybag" - en principio, el tamaño de este keybag es ilimitado, pero en la práctica actual, suele ser lo suficientemente grande para 7 claves. Al configurar los usuarios y las contraseñas autorizadas en las preferencias de FileVault, una de estas ranuras se utiliza para almacenar una Cᵢ que se puede descifrar utilizando la contraseña de recuperación que se le muestra.