Protección de datos del llavero
Muchas apps necesitan administrar contraseñas y otros datos pequeños pero confidenciales, como las claves o los identificadores de inicio de sesión, y el llavero constituye un sistema seguro para almacenar estos elementos. Los diversos sistemas operativos de Apple utilizan diferentes mecanismos para aplicar las garantías asociadas con las diferentes clases de protección de llaveros. En macOS (incluidas las computadoras Mac con Apple Chip), la protección de datos no se utiliza directamente para aplicar estas garantías.
Descripción general
Los elementos del llavero se encriptan usando dos claves AES-256-GCM diferentes: una clave de tabla (metadatos) y una clave por fila (clave secreta). Los metadatos del llavero (todos los atributos que no sean kSecValue) se encriptan usando la clave de metadatos con el fin de acelerar las búsquedas; mientras que el valor secreto (kSecValueData) se encripta usando la clave secreta. La clave de metadatos está protegida por el Secure Enclave, pero se almacena en la caché del procesador de aplicaciones para permitir solicitudes rápidas del llavero. La clave secreta siempre requiere un ciclo entero a través del Secure Enclave.
El llavero se implementa como una base de datos SQLite almacenada en el sistema de archivos. Sólo hay una base de datos, y el daemon securityd
determina a qué elementos del llavero puede acceder cada proceso o app. Las API de Acceso a Llaveros generan llamadas al daemon, que envía una consulta a las autorizaciones “keychain‑access‑groups”, “application‑identifier” y “application‑group” de la app. En lugar de limitar el acceso a un solo proceso, los grupos de acceso permiten que los elementos del llavero se compartan entre apps.
Los elementos del llavero sólo se pueden compartir entre las apps de un mismo desarrollador. Para compartir elementos del llavero, las apps de terceros usan grupos de acceso con un prefijo asignado a través del programa para desarrolladores de Apple en sus grupos de aplicaciones. El requisito de prefijo y la exclusividad del grupo de aplicaciones se aplican mediante la firma de código, perfiles de datos y el programa para desarrolladores de Apple.
Los datos del llavero se protegen con una estructura de clases similar a la utilizada en la protección de datos de archivo. Estas clases tienen comportamientos equivalentes a las clases de protección de datos de archivo, pero utilizan funciones y claves distintas.
Disponibilidad | Protección de datos de archivo | Protección de datos del llavero | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Cuando está desbloqueado | NSFileProtectionComplete | kSecAttrAccessibleWhenUnlocked | |||||||||
Cuando está bloqueado | NSFileProtectionComplete UnlessOpen | ||||||||||
Después del primer desbloqueo | NSFileProtectionComplete UntilFirstUserAuthentication | kSecAttrAccessibleAfterFirstUnlock | |||||||||
Siempre | NSFileProtectionNone | kSecAttrAccessibleAlways | |||||||||
Código activado | kSecAttrAccessibleWhen PasscodeSetThisDeviceOnly |
Las apps que utilizan servicios de actualización en segundo plano pueden usar kSecAttrAccessibleAfterFirstUnlock para los elementos del llavero a los que sea necesario acceder durante este tipo de actualizaciones.
La clase kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly muestra el mismo comportamiento que kSecAttrAccessibleWhenUnlocked; sin embargo, está disponible sólo cuando el dispositivo está configurado con un código. Esta clase existe únicamente en el repositorio de claves del sistema, el cual:
No se sincroniza con el llavero de iCloud;
No se respalda;
No se incluye en el repositorio de claves de custodia.
Si se elimina o restablece el código, se descartan las claves de clase y los elementos dejan de ser útiles.
Otras clases de llavero tienen un equivalente a Sólo este dispositivo que siempre está protegido con el UID cuando se copia de un dispositivo durante un respaldo, de modo que deja de ser útil si se restaura en otro dispositivo. Apple ha equilibrado la seguridad y la capacidad de uso cuidadosamente mediante la selección de clases de llavero que varían en función del tipo de información que se esté protegiendo y de cuándo la necesite iOS y iPadOS.
Protecciones de las clases de datos del llavero
Las protecciones de clase que se enumeran a continuación se aplican a los elementos del llavero.
Elemento | Accesible |
---|---|
Contraseñas de Wi‑Fi | Después del primer desbloqueo |
Cuentas de Mail | Después del primer desbloqueo |
Cuentas de Exchange ActiveSync de Microsoft | Después del primer desbloqueo |
Contraseñas de VPN | Después del primer desbloqueo |
LDAP, CalDAV y CardDAV | Después del primer desbloqueo |
Identificadores de cuentas de redes sociales | Después del primer desbloqueo |
Claves de encriptación de anuncios de Handoff | Después del primer desbloqueo |
Identificador de iCloud | Después del primer desbloqueo |
Claves de iMessage | Después del primer desbloqueo |
Contraseña de Compartir en casa | Cuando está desbloqueado |
Contraseñas de Safari | Cuando está desbloqueado |
Marcadores de Safari | Cuando está desbloqueado |
Respaldo de iTunes/Finder | Cuando está desbloqueado; no migratorio |
Certificados VPN | Después del primer desbloqueo; no migratorio |
Claves de Bluetooth® | Siempre; no migratorio |
Identificador de servicio de notificaciones push de Apple (APNs) | Siempre; no migratorio |
Clave privada y certificados de iCloud | Siempre; no migratorio |
PIN de la SIM | Siempre; no migratorio |
Identificador de Encontrar | Siempre |
Buzón de voz | Siempre |
En macOS, todos los elementos del llavero instalados por los perfiles de configuración están siempre disponibles. En iOS y iPadOS, los elementos del llavero instalados por un perfil de configuración tienen una accesibilidad diferente según su tipo, cómo se hace referencia a ellos y cuándo se instalaron. De forma predeterminada, los elementos del llavero instalados mediante perfiles de configuración están disponibles después del primer desbloqueo y no son migratorios. Sin embargo, un elemento del llavero instalado mediante un perfil de configuración está siempre disponible si cuenta con estas características:
Se instaló antes de actualizar a iOS 15, iPadOS 15 o versiones posteriores
Es un certificado (no una identidad)
Es una identidad referenciada por
IdentityCertificateUUID
en una carga útilcom.apple.mdm
Control de acceso al llavero
Los llaveros pueden utilizar listas de control de acceso (ACL) para establecer políticas de accesibilidad y requisitos de autenticación. Los elementos pueden establecer condiciones que requieran la presencia del usuario al especificar que no se puede acceder a ellos a menos que se lleve a cabo una autenticación con Face ID, Touch ID o que se ingrese el código o la contraseña del dispositivo. De igual manera, se puede limitar el acceso a los elementos al especificar que el registro de Face ID o Touch ID no puede haber cambiado desde que el elemento se agregó. Esta limitación ayuda a prevenir que un atacante agregue su propia huella digital para acceder al elemento de llavero. Las ACL se evalúan en el Secure Enclave y sólo se desbloquean en el kernel si se cumplen las restricciones especificadas.
Arquitectura del llavero en macOS
macOS también ofrece acceso al llavero para almacenar de forma segura y conveniente nombres de usuario y contraseñas, identidades digitales, claves de encriptación y notas seguras. Se puede acceder al abrir la app Acceso a Llaveros en Aplicaciones/Utilidades/. Al usar el llavero, se elimina la necesidad de ingresar (o incluso recordar) las credenciales de cada recurso. Se crea un llavero inicial predeterminado para cada usuario de la Mac, pero los usuarios pueden crear otros llaveros para fines específicos.
Además de depender de los llaveros del usuario, macOS se basa en diversos llaveros a nivel del sistema que mantienen los recursos de autenticación que no son específicos para el usuario, como las credenciales de la red y las identidades de la infraestructura de la clave pública (PKI). Uno de estos llaveros, System Roots, es inmutable y almacena los certificados de la autoridad certificadora (CA) de la raíz del PKI de Internet para facilitar tareas comunes como usar la banca en línea y el comercio electrónico. El usuario puede implementar internamente de forma similar los certificados de CA provistos para las computadoras Mac administradas, para ayudar a validar sitios y servicios internos.