Repositorios de claves para la protección de datos
Las claves tanto para la clase de protección de datos de llaveros como la de archivos se recopilan y administran en repositorios de claves en iOS, iPadOS, tvOS y watchOS. Estos sistemas operativos utilizan los siguientes repositorios de claves: usuario, dispositivo, respaldo, custodia y respaldo en iCloud.
Repositorio de claves del usuario
En el repositorio de claves del usuario se almacenan las claves de clase encapsuladas que se utilizan durante el funcionamiento normal del dispositivo. Por ejemplo, cuando se ingresa un código, se carga NSFileProtectionComplete del repositorio de claves del usuario y se desencapsula. Es un archivo binario de lista de propiedades (.plist) almacenado en la clase Sin protección.
Para dispositivos con SoC anteriores al A9, el contenido del archivo .plist se encripta con una clave contenida en Effaceable Storage. Con el propósito 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 los dispositivos con SoC A9 o modelos posteriores, el archivo .plist contiene una clave que indica que el repositorio de claves está almacenado en un locker protegido por el valor de antirreproducción controlado por el Secure Enclave.
El Secure Enclave administra el repositorio de claves del usuario y admite consultas relativas al estado de bloqueo del dispositivo. Indica si el dispositivo está desbloqueado sólo 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 llavero del dispositivo se utiliza para almacenar las claves de clase encapsuladas que se utilizan para operaciones que involucran datos específicos del dispositivo. Los dispositivos iPadOS configurados para el uso compartido a veces necesitan acceso a las credenciales antes de que cualquier usuario haya iniciado sesión y, por lo tanto, se requiere un llavero que no esté protegido por el 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 que significa que el sistema utiliza claves de clase del llavero del dispositivo para encapsular las claves por archivo. Sin embargo, el llavero usa las claves de clase del repositorio de claves del usuario para proteger los elementos que se encuentran en el llavero del usuario. En un dispositivo iPhone o iPad configurado para que lo utilice un único usuario (que es la configuración predeterminada), el repositorio de claves del dispositivo y el repositorio de claves del usuario son el mismo, y están protegidos por el código del usuario.
Repositorio de claves del respaldo
El repositorio de claves de respaldo se crea cuando se realiza un respaldo encriptado desde el Finder (macOS 10.15 o versiones posteriores) o en iTunes (macOS 10.14 o versiones anteriores), y se almacena en la computadora donde se efectúa el respaldo del dispositivo. Se crea un repositorio de claves nuevo con un conjunto de claves nuevo, y los datos del respaldo se vuelven a encriptar en estas claves nuevas. Como se explicó anteriormente, los elementos no migratorios del llavero permanecen encapsulados con la clave derivada del UID, lo que permite su restauración en el dispositivo desde el cual se respaldaron inicialmente, pero se vuelven inaccesibles desde otros dispositivos.
El repositorio de claves, protegido con la contraseña establecida, 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 muchas computadoras tendrían lugar, teóricamente, en el repositorio de claves de respaldo. Esta amenaza se puede mitigar con una contraseña que sea lo suficientemente segura.
Si un usuario opta por no encriptar el respaldo, los archivos del respaldo 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 elementos del llavero sólo migran a un dispositivo nuevo cuando se establece una contraseña de respaldo.
Repositorio de claves de custodia
El repositorio de claves de custodia se utiliza para sincronizar con el Finder (macOS 10.15 o versiones posteriores) o con iTunes (macOS 10.14 o versiones anteriores) mediante USB y una administración de dispositivos móviles (MDM). Este repositorio de claves permite que iTunes o el Finder realicen un respaldo y la sincronización sin necesidad de que el usuario ingrese un código, y permite que una solución MDM borre de forma remota el código de un usuario. Se almacena en la computadora usada para la sincronización con iTunes o el Finder, o en la solución MDM que administra el dispositivo de manera remota.
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 al Finder o a iTunes, el usuario tiene que ingresar un código. A continuación, 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 dividen entre el dispositivo y el host o servidor, y los datos se almacenan en el dispositivo en la clase Protegido hasta la primera autenticación del usuario. Por eso es necesario ingresar el código del dispositivo antes de que el usuario realice el primer respaldo con el Finder o iTunes después de un reinicio.
En caso de una actualización de software de forma inalámbrica (OTA), el usuario tiene que ingresar su código al inicio del proceso. Este se utiliza para crear de forma segura un identificador de desbloqueo de uso único, que desbloquea el repositorio de claves del usuario después de la actualización. Este identificador no se puede generar si no se ingresa 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 uso único 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 del Secure Enclave, el UUID del repositorio de claves y el UID del Secure Enclave.
En los SoC A9 (o modelos posteriores), el identificador de desbloqueo de uso único ya no depende de conteos o de Effaceable Storage; sino que está protegido por un valor de antirreproducción controlado por el Secure Enclave.
El identificador de desbloqueo de uso único para actualizaciones de software con supervisión caduca a los 20 minutos. En iOS 13, iPadOS 13.1 o versiones posteriores, el identificador se almacena en un locker protegido por el Secure Enclave. En sistemas operativos anteriores a iOS 13, este identificador se exportaba desde el Secure Enclave y se escribía en Effaceable Storage o se protegía mediante el mecanismo antirreproducciones del Secure Enclave. Un temporizador de políticas incrementaba el contador si el dispositivo no se había reiniciado en 20 minutos.
Las actualizaciones automáticas se realizan cuando el sistema detecta que hay una actualización disponible y una de las siguientes condiciones es verdadera:
Las actualizaciones automáticas están activadas en iOS 12 o versiones posteriores.
El usuario elige Instalar más tarde cuando se le notifica de la actualización.
Después de que el usuario ingresa su código, se genera un identificador de desbloqueo de uso único que puede permanecer válido en el Secure Enclave hasta por 8 horas. Si aún no se realiza la actualización, este identificador de desbloqueo de uso único se destruye en cada bloqueo y se vuelve a crear en cada desbloqueo posterior. Cada desbloqueo restablece el periodo de 8 horas. Después de 8 horas, el temporizador de la política anula el identificador de desbloqueo de uso único.
Repositorio de claves del respaldo en iCloud
El repositorio de claves del respaldo en iCloud es similar al repositorio de claves de respaldo. 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). Para proteger el llavero respaldado en caso de que se necesite recuperar el llavero de iCloud, también se utiliza un repositorio de claves asimétrico.