2014-09-09 2 views
10

Ich habe ein paar Fragen Schutz der Daten für meine Anwendung in Bezug auf:Daten sichern mit Core Data in iOS

1) Ich brauche mittels Core Data alle Daten speichere ich zu verschlüsseln, aber ich finde nicht, ein Ausgangspunkt, um das zu erreichen. In Core Data Programming Guide sie sagen, dass:

Core Data keine Garantie in Bezug auf die Sicherheit von persistent speichert aus nicht vertrauenswürdigen Quellen macht und erkennt nicht, ob Dateien in böswilliger Absicht verändert wurden. Der SQLite-Speicher bietet eine etwas bessere Sicherheit als die XML- und Binärspeicher, sollte jedoch nicht als inhärent sicher betrachtet werden. Beachten Sie, dass Sie auch die Sicherheit von Geschäftsmetadaten berücksichtigen sollten, da Daten, die in den Metadaten archiviert werden, unabhängig von den Geschäftsdaten manipuliert werden können. Wenn Sie die Datensicherheit sicherstellen möchten, sollten Sie eine Technologie wie ein verschlüsseltes Disk-Image verwenden.

Das ist nicht mir klar macht, was ich tun soll ... Ich habe auch einen Blick auf Security Overview Aber dieses Dokument scheint mit Core Data zu beschäftigen nicht genommen haben. Allerdings erwähnen sie Dateien zu sichern, aber ich bin mir nicht sicher, ob das ist, was ich wirklich suche ich sollte für die SQLite Datei, die Core Data arbeitet mit?

Ich brauche einige Hinweise darüber, wie könnte ich verschlüsseln alle Core Data gespeicherten Daten, bitte

2) Sollte es besser sein, Benutzer-Passwörter im Schlüsselbund zu speichern, statt verschlüsseln und speichern sie durch Core Data mit?

Vielen Dank im Voraus

+0

Diese [Frage und Antwort] (http://stackoverflow.com/questions/1645007/how-can-i-encrypt-coredata-contents-on-an-iphone) sollte Ihnen soweit zur Verschlüsselung helfen. – trevorj

Antwort

2

Sie so etwas wie encrypted-core-data verwenden können, die um SQLite Cipher ein Core Data Accessor-Wrapper ist.

Dies ist eine Unterklasse von NSIncrementalStore, die mit einer verschlüsselten Datenbank interagiert.

Wenn Sie nur Passwörter speichern, dann ist der Schlüsselbund eine bessere Option, aber wenn Sie den Core Data Store verschlüsseln möchten, dann ist das obige die bessere Option.

2

"2. Sollte es besser sein, Benutzerkennwörter im Schlüsselbund zu speichern, anstatt sie zu verschlüsseln und mit Core Data zu speichern?"

Ja, dafür ist der Schlüsselbund gedacht. Die Wahrscheinlichkeit, dass Sie einen sichereren Speicher als den Schlüsselbund erstellen können, ist minimal. Selbst im Falle eines "Jailbroken" iOS gibt es immer noch Sicherheitszeiten, die nicht erreichbar sind, minimale Zeit pro Zugriffsversuch.

9

Seit iOS 5 haben Core Data Persistent Stores Data Protection verwendet, um Daten standardmäßig zu verschlüsseln. von der iOS 5 release notes:

für für iOS gebaut Apps 5.0 oder höher, persistent speichert jetzt speichern Daten standardmäßig in einem verschlüsselten Format auf dem Datenträger der Standardschutzstufe verhindert den Zugriff auf die Daten, bis, nachdem der Benutzer das Gerät entsperrt für. Das erste Mal. Sie können die Schutzstufe ändern, indem Sie dem Schlüssel NSPersistentStoreFileProtectionKey einen benutzerdefinierten Wert zuweisen, wenn Sie Ihre persistenten Speicher konfigurieren die in iOS 5.0 neu sind, siehe "Datenschutzverbesserungen"."

Dies wird auch in der WWDC 2011-Sitzung behandelt" Was ist neu in Core Data ".

Als Best Practices sollten Benutzernamen und Passwörter im Schlüsselbund gespeichert werden. Wenn Sie einen Benutzernamen und ein Kennwort für einen Remote-Dienst (z. B. einen HTTP-Server, FTP-Server usw.) speichern, sollten Sie den Schlüsselbund über die API NSURLCredentialStorage verwenden.

4

Das Projekt "encrypted-core-data" weist Einschränkungen für durchschnittliche bis komplexe Datenmodelle auf. In meiner iOS-App hatten wir einige Viele-zu-Viele-Beziehungen und einige Eins-zu-Viele-Beziehungen zwischen bestimmten Entitäten.

Der Bridge-Code (Code, der Core-Daten an SQLCihper überbrückt) hat Mängel, wie es die NSOrderedSet Implementierung nicht hat. Das Ändern des Bridge-Codes war ein hoher Kostenaufwand für uns.

Also entschieden wir uns stattdessen die sensiblen Daten in der Spalte zu verschlüsseln. Daher haben wir dafür die native Kerndaten-Fähigkeit transformable attributes verwendet und verwenden cryptobibliothek, um das Attribut einer Entität zu verschlüsseln. Diese Funktion verschlüsselt die Daten, wenn sie in die Spalte gelangen, und entschlüsselt sie, wenn sie gelesen werden. Dies geschieht automatisch.

Dies führt uns zu Leistungsproblemen dann, wenn wir Daten über mehrere Zeilen abfragen, um in einer Listenansicht anzuzeigen. Um dieses Problem zu beheben, stellen wir dann den Spaltentyp auf den normalen Typ string zurück und führen dann die Verschlüsselung und Entschlüsselung manuell im Code durch, jedoch nur bei Bedarf. Wir verwenden auch ein transientes Attribut im Modell, um die entschlüsselte Form zu speichern. Dies hilft uns bei der Wiederherstellung der Leistung auf das akzeptable Niveau.

Ich bin immer noch auf der Suche nach einer besseren Möglichkeit zur Verschlüsselung der gesamten Datenbank bei der Verwendung von Kerndaten.