Repositorios de claves para Protección de datos
Las claves de las clases de Protección de datos de archivo y de llavero se recopilan y gestionan en repositorios de claves en iOS, iPadOS, tvOS y watchOS. Estos sistemas operativos usan los siguientes repositorios de claves: usuario, dispositivo, copia de seguridad, custodia y copia de seguridad en iCloud.
Repositorio de claves del usuario
El repositorio de claves del usuario es el lugar en el que se almacenan las claves de clase encapsuladas que se utilizan durante el funcionamiento normal del dispositivo. Por ejemplo, cuando se introduce un código, se carga NSFileProtectionComplete del repositorio de claves del usuario y se desencapsula. Se trata de un archivo de lista de propiedades binario (.plist) almacenado en la clase No Protection.
En el caso de los dispositivos con SoC anteriores al A9, el contenido del archivo .plist está encriptado con una clave que se guarda en el almacenamiento borrable. Con el fin de proporcionar mayor seguridad a los repositorios de claves, esta clave se borra y se vuelve a generar cada vez que un usuario cambia el código.
En el caso de los dispositivos con el SoC A9 y posteriores, el archivo .plist contiene una clave que indica que el repositorio de claves está guardado en un depósito protegido por el valor de antirreproducción controlado por Secure Enclave.
Secure Enclave gestiona el repositorio de claves del usuario y admite consultas relativas al estado de bloqueo del dispositivo. Solo indica que el dispositivo está desbloqueado si se puede acceder a todas las claves de clase del repositorio de claves del usuario y si se han desencapsulado correctamente.
Repositorio de claves del dispositivo
El repositorio de claves del dispositivo sirve para almacenar las claves de clase encapsuladas que se utilizan en operaciones en las que se requieren datos específicos del dispositivo. Los dispositivos iPadOS configurados para un uso compartido necesitan, en algunas ocasiones, acceso a las credenciales antes de que los usuarios hayan iniciado sesión. Así, será necesario un repositorio de claves que no esté protegido con un código del usuario.
iOS y iPadOS no son compatibles con la separación criptográfica del contenido del sistema de archivos por usuario, lo cual significa que el sistema utilizará claves de clase del repositorio de claves del dispositivo para encapsular claves por archivo. Sin embargo, el llavero utiliza claves de clase del repositorio de claves del usuario para proteger los ítems del llavero del usuario. En los dispositivos iPhone y iPad configurados para que solo los utilice un usuario (configuración por defecto), el repositorio de claves del dispositivo y el del usuario son el mismo, y están protegidos mediante el código del usuario.
Repositorio de claves de copia de seguridad
El repositorio de claves de copia de seguridad se crea cuando iTunes (en macOS 10.14 o anterior) o el Finder (en macOS 10.15 o posterior) realiza una copia de seguridad encriptada y la almacena en el ordenador donde se efectúa la copia de seguridad del dispositivo. Se crea un repositorio de claves nuevo con un conjunto de claves nuevo, y los datos de la copia de seguridad se vuelven a encriptar en estas claves nuevas. Tal como se ha explicado anteriormente, los ítems del llavero no migrables permanecen encapsulados con la clave derivada del UID, lo cual hace posible su restauración en el dispositivo en el que se haya realizado la copia de seguridad original, pero impide el acceso a ellos en un dispositivo diferente.
El repositorio de claves (protegido por la contraseña definida) se ejecuta a través de 10 millones de iteraciones de la función de derivación de claves PBKDF2. A pesar de la gran cantidad de iteraciones, no existen vínculos a un dispositivo específico y, por lo tanto, los ataques de fuerza bruta realizados en paralelo en muchos ordenadores tendrían lugar, teóricamente, en el repositorio de claves de copia de seguridad. Esta amenaza se puede mitigar con una contraseña suficientemente segura.
Si un usuario opta por no encriptar la copia de seguridad, los archivos de copia de seguridad no se encriptan, sea cual sea su clase de Protección de datos, pero el llavero sigue estando protegido con una clave derivada del UID. Por este motivo, los ítems del llavero solo migran a un dispositivo nuevo cuando se establece una contraseña de copia de seguridad.
Repositorio de claves de custodia
El repositorio de claves de custodia se usa para la sincronización con el Finder (macOS 10.15 o posterior) o con iTunes (macOS 10.14 o anterior) a través de USB y gestión de dispositivos móviles (MDM). Este repositorio de claves permite que iTunes o el Finder realice una copia de seguridad y la sincronización sin necesidad de que el usuario introduzca un código, y permite que una solución MDM borre de forma remota el código de un usuario. Se almacena en el ordenador utilizado para la sincronización con iTunes o el Finder, o bien en la solución MDM que gestiona de forma remota el dispositivo.
El repositorio de claves de custodia mejora la experiencia del usuario durante la sincronización del dispositivo, que podría requerir el acceso a todas las clases de datos. La primera vez que un dispositivo bloqueado con contraseña se conecta a iTunes o el Finder, el usuario tiene que introducir un código. Entonces, el dispositivo crea un repositorio de claves de custodia que contiene las mismas claves de clase que se utilizan en el dispositivo, y se protege con una clave recién creada. El repositorio de claves de custodia y la clave que lo protege se reparten entre el dispositivo y el host o servidor; los datos almacenados en el dispositivo residen en la clase “Protegido hasta la primera autenticación del usuario”. Por eso, es necesario introducir el código del dispositivo antes de que el usuario realice la primera copia de seguridad con iTunes o el Finder después de un reinicio.
En caso de una actualización de software remota (OTA), el usuario tiene que introducir su código al inicio del proceso. Este se utiliza para crear de forma segura un identificador de desbloqueo de un solo uso, que desbloquea el repositorio de claves del usuario después de la actualización. Este identificador no se puede generar si no se introduce el código de usuario; todos los identificadores generados anteriormente quedan invalidados si se cambia el código de usuario.
Los identificadores de desbloqueo de un solo uso sirven para instalar con o sin supervisión una actualización de software. Se encriptan con una clave derivada del valor actual de un contador monótono de Secure Enclave, el UUID del repositorio de claves y el UID de Secure Enclave.
En el SoC A9 (o posterior), el identificador de desbloqueo puntual ya no se basa en contadores ni en el almacenamiento borrable. En su lugar, se protege mediante el valor de antirreproducción controlado por Secure Enclave.
El identificador de desbloqueo de un solo uso para actualizaciones de software con supervisión caduca a los 20 minutos. En iOS 13 y iPadOS 13.1 o posterior, el identificador se guarda en un depósito protegido por Secure Enclave. Antes de iOS 13, este identificador se exportaba desde Secure Enclave y se escribía en el almacenamiento borrable o se protegía mediante el mecanismo de antirreproducción de Secure Enclave. Un temporizador de políticas incrementaba el contador si el dispositivo no se había reiniciado en 20 minutos.
Las actualizaciones de software automáticas se realizan cuando el sistema detecta que hay disponible una actualización y se dan una de las siguientes situaciones:
Las actualizaciones automáticas están configuradas en iOS 12 o versiones posteriores.
El usuario selecciona “Instalar más tarde” cuando recibe la notificación de la actualización.
Después de que el usuario introduzca su código, se genera un identificador de desbloqueo puntual que puede ser válido en Secure Enclave hasta 8 horas. Si la actualización aún no se ha producido, este identificador de desbloqueo puntual se destruye cada vez que se bloquea el dispositivo y se vuelve a crear con cada desbloqueo posterior. Cada desbloqueo reinicia el límite de 8 horas. Transcurridas 8 horas, un temporizador de política invalida el identificador de desbloqueo puntual.
Repositorio de claves de copia de seguridad de iCloud
El repositorio de claves de copia de seguridad en iCloud es similar al de claves de copia de seguridad. Todas las claves de clase de este repositorio son asimétricas (utilizan Curve25519, como la clase de Protección de datos “Protegido a menos que se abra”). Los repositorios de claves de seguridad asimétricas también se utilizan para proteger la copia de seguridad del llavero de iCloud en caso de recuperación.