2012-03-13 42 views
6

Solo necesito una confirmación al respecto.Cifrado de datos con Core Data en iOS

¿Es correcto decir que, con el iPhone 3GS y superior, todos los datos escritos en el sistema de archivos se cifran mediante el cifrado de hardware? Simplemente al crear el archivo XXX.sqlite en el sistema de archivos, los datos almacenados en él ya están encriptados.

¿Se proporciona también para mayor seguridad NSFileProtectionComplete?

Gracias.

+0

AFAIK ese es el caso solo si el teléfono tiene un código de acceso y está bloqueado. – Rog

+0

También eche un vistazo a esta sesión WWDC https://developer.apple.com/itunes/?destination=adc.apple.com.4088379409.04088379411.4092394151?i=1595505280 – Rog

Respuesta

7

No, eso no es correcto. Deberá habilitar el cifrado en el archivo sqlite. Agregue el siguiente después de crear su persistentStoreCoordinator:

// Make sure the database is encrypted when the device is locked 
NSDictionary *fileAttributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey]; 
if (![[NSFileManager defaultManager] setAttributes:fileAttributes ofItemAtPath:[storeURL path] error:&error]) { 
    // Deal with the error 
} 
+0

si hago esto mi sqlite no puede acceder .. – Jitendra

+1

Creo que esto no cifrará el archivo de registro de escritura anticipada (WAL), que contiene datos de la aplicación. Esto tiene que ver con el modo diario utilizado para sqlite, pero por defecto está ahora activado. Consulte el comentario a continuación por Mike Rose y esta publicación en el blog para obtener más información: http://www.hopelessgeek.com/2014/10/10/core-data-and-data-protection/ – jeffmax

+2

@edsko ¿Es obligatorio encenderlo? ¿Protección de datos también en capacidades para completar el cifrado del archivo de datos centrales? – RandomGuy

3

No, su suposición no es correcta.

A partir de la documentación de la clase NSPersistentStoreCoordinator:

The default value is NSFileProtectionCompleteUntilFirstUserAuthentication for all applications built on or after iOS v5.0. The default value for all older applications is NSFileProtectionNone.

Para habilitar NSFileProtectionComplete, habría que añadir el NSPersistentStoreFileProtectionKey con NSFileProtectionComplete a las opciones NSDictionary al llamar al addPersistentStoreWithType: configuración: URL: Opciones: Error: el método.

Tenga en cuenta que este cifrado de archivos solo se habilita cuando el usuario ha establecido una contraseña.

7
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{ NSPersistentStoreFileProtectionKey : NSFileProtectionComplete } error:&error] 
+1

Esta es la forma correcta de hacerlo. – augustzf

+0

Esto parece estar funcionando para mí: por curiosidad, ¿alguien piensa que la documentación de Apple para esto es incorrecta? La única mención que veo de este valor de opción es https://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSPersistentStoreCoordinator_Class/#//apple_ref/doc/constant_group/Spotlight_External_Record_Elements que no parece correcto – jeffmax

Cuestiones relacionadas