Diseño de privacidad primero: compromiso paranoico con las aplicaciones de notas
Esta página es una traducción automática del original en japonés. Leer el original en japonés
1. Por qué la privacidad es importante en las aplicaciones de notas
Ideas de trabajo, borradores personales, registros diarios. La aplicación de notas recopila información antes de mostrarla a la gente. Tan importante como poder escribir rápidamente, es importante entender dónde se almacena y dónde se envía.
Este artículo explica el cifrado, la caché de comunicación, la pantalla, el registro de diagnóstico y el análisis de uso en el terminal por separado. Una protección no garantiza la protección de otras rutas.
2. La capacidad de ocultar automáticamente las notas en el conmutador de aplicaciones no está habilitada
iOS utiliza la pantalla como instantánea después de que la aplicación se mueva al fondo. Apple te guía para eliminar información confidencial de la pantalla cuando te mueves al fondo.
En la fuente del 5.8.17 confirmado, sceneWillResignActive y sceneDidEnterBackground guardan el borrador y no llaman al proceso de visualización de superposición de privacidad. La función de visualización anterior permanece, pero no es una ruta que funcione como una protección válida.
Las notas que se muestran pueden permanecer en la imagen del conmutador de aplicaciones. El cifrado de la Outbox no oculta la imagen de la pantalla. Corrija la explicación de "siempre ocultar el contenido de la nota" en la versión anterior de este artículo.
3. URLSession efímera: Reducir el almacenamiento en disco en la caché de comunicación
El estándar URLSession almacena cachés, cookies e información de autenticación en el disco. Esta es una función útil para las aplicaciones generales, pero no es necesaria para las aplicaciones de notas y puede ser un riesgo.
El hecho de que la caché de comunicación permanezca en el terminal significa que los rastros de los cuales se accedió a URL y cuándo existen en el disco. Si se guarda una cookie, significa que la información de la sesión permanecerá en el terminal.
Esta aplicación utiliza URLSessionConfiguration.ephemeral.
private let session: URLSession = {
let config = URLSessionConfiguration.ephemeral
config.httpCookieAcceptPolicy = .never
config.httpShouldSetCookies = false
config.urlCache = nil
return URLSession(configuration: config)
}()
- Sin caché de disco:No guarde la caché de esta URLSession en el disco
- Desactivar el uso de cookies:Esta URLSession no acepta cookies y no establece la solicitud
- Caché URL desactivado:Establezca el almacenamiento de caché en
nil - Configuración que no utiliza almacenamiento persistente:No guarda la información de sesión de URLSession en el disco
Esta es una protección relacionada con la caché de URLSession, etc., y no es una función que elimine los eventos de uso que la aplicación almacena y transmite por separado o los registros de transmisión en el lado del servidor. La asociación por el identificador del análisis de uso también se lleva a cabo por separado de esta configuración.
4. Rango de salida de registros de medición de rendimiento
La salida de registro de PerformanceLogger está rodeada por #if DEBUG. En las compilaciones donde DEBUG no está definido, el procesamiento de salida de registro de este registrador no está incluido.
El logError de este registrador registra el tipo en lugar de los detalles del error. Por ejemplo, use el tipo URLError y no libere localizedDescription tal cual, que puede contener rutas de archivo y entrada de usuario.
Por otro lado, no es un mecanismo que automáticamente hace inofensivos todos los nombres de eventos y cadenas adicionales pasadas a logEvent. Es necesario no pasar la dirección de correo electrónico, el cuerpo de la nota o la información de autenticación a la que llama.
Esta explicación no se extiende a la garantía de "registro cero" para toda la aplicación, el SDK externo y el sistema operativo. La transmisión de eventos de uso interno y AppsFlyer están habilitadas como mecanismos separados. El alcance de la adquisición se explicará en las preguntas frecuentes sobre el análisis de uso de este artículo y Política de privacidad.
5. Alcance de la protección de Outbox con cifrado AES-GCM
Las notas que esperan ser enviadas se gestionan en la cola llamada Outbox en la terminal. Al guardar, use CryptoKit de Apple para cifrar con AES-GCM. La nueva clave de cifrado se genera con 256 bits.
Mantén la llave en el llavero y usa kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. Con esta configuración, puede acceder desde el primer desbloqueo después del reinicio hasta el siguiente reinicio, y la clave no se transferirá al restaurar la copia de seguridad a otro terminal. La aplicación lee la clave para el cifrado y el descifrado.
Esta es la protección de los datos almacenados, no para ocultar la pantalla que se muestra o garantizar la seguridad de todas las infracciones del terminal. Antes de cambiar el modelo, asegúrese de que las notas necesarias hayan llegado a la dirección de almacenamiento.
Cuando se utiliza el envío por correo, el contenido se procesa en nuestra Relay API y en la infraestructura de entrega, y permanece como correo en la bandeja de entrada. El cifrado dentro del dispositivo no implica cifrado de extremo a extremo (E2EE) durante la entrega del correo. Encontrarás los detalles en la política de privacidad y en el recorrido de los datos.
Para las colas de espera para la transmisión, consulte Explicación de la arquitectura de la Outbox.
6. Protección del cuerpo de la nota y el papel del SDK externo
En la aplicación iOS, use CryptoKit para cifrar el cuerpo de la nota, Keychain para almacenar la clave y URLSession para enviar el texto. Network.framework monitorea el estado de la conexión, y BackgroundTasks es responsable de programar la transmisión en segundo plano.
Por otro lado, la aplicación también utiliza un SDK externo. GoogleSignIn y Firebase Authentication se utilizan para introducir automáticamente correos electrónicos arbitrarios con la cuenta Google, y la comprobación de la aplicación de Firebase se inicializa al inicio para proteger el backend API. AppsFlyer se utiliza para el análisis de adquisición y uso, y establece un identificador de instalación que es común a su propio análisis.
Incluso si el diseño no incluye el cuerpo de la nota en el elemento del evento, la asociación de identificadores y registros de transmisión permanece. El alcance del análisis de uso, incluido el SDK, debe confirmarse por separado del cifrado del texto. Los artículos y usos se describen en Política de privacidad.
7 Especifique el alcance de la protección
El cifrado, el manejo de caché de comunicación y el análisis de utilización en el terminal tienen diferentes funciones. Incluso con el cifrado de Outbox y la URLSession efímera, no significa que se elimine la recopilación de eventos de uso.
Valora tanto poder dejar notas rápidamente como poder entender la información que se va a adquirir. Explica el destino, el identificador y el alcance de la asociación del análisis de uso, y revísalo de acuerdo con los cambios en la aplicación.
Preguntas frecuentes
Referencias
- Desarrollador Apple — Documentación de CryptoKit — Utilizado para implementar la protección de datos de Outbox con cifrado AES-GCM
- Apple Desarrollador — Documentación de URLSession — Privacidad segura con comunicación de red a través de sesión efímera (temporal)
- Apple Desarrollador — Prevención de conexiones de red inseguras (seguridad de transporte de aplicaciones) — TLS Garantizar la seguridad durante la transferencia de datos forzando la comunicación
- Apple Desarrollador — Generación de mensajes de registro a partir de su código — Alcance del almacenamiento de registro y manejo de información confidencial
- Apple Desarrollador — Preparando su interfaz de usuario para que se ejecute en segundo plano — Instantáneas e información en pantalla para conmutadores de aplicaciones
- Apple Desarrollador — Acceso al llavero después del primer desbloqueo, solo este dispositivo — Condiciones clave de acceso y restricciones de migración a otros terminales