2014-09-09 25 views
10

mam kilka problemów dotyczących ochrony danych dla mojej aplikacji:Zabezpieczanie danych przy użyciu danych Core w iOS

1) Potrzebuję zaszyfrować wszystkie dane przechowywać za pomocą Core Data, ale nie znaleźliśmy punkt wyjścia do osiągnięcia tego. W Core Data Programming Guide mówią, że:

Rdzeń danych nie udziela żadnych gwarancji dotyczących bezpieczeństwa trwałych sklepach z niezaufanych źródeł i nie może wykryć, czy pliki zostały złośliwie zmodyfikowany. Sklep SQLite oferuje nieco lepsze zabezpieczenia niż pliki XML i binary, ale nie powinien być uważany za bezpieczny. Pamiętaj, że powinieneś również wziąć pod uwagę bezpieczeństwo metadanych sklepu, ponieważ możliwe jest manipulowanie danymi zarchiwizowanymi w metadanych niezależnie od danych sklepu. Jeśli chcesz zapewnić bezpieczeństwo danych, powinieneś użyć technologii, takiej jak zaszyfrowany obraz dysku.

To nie czyni mnie jasne, co należy zrobić ... Brałem również wygląd Security Overview Jednak dokument ten nie wydaje się, aby radzić sobie z Core Data. Jednak wspominają one o zabezpieczeniach plików Data Protection, ale nie jestem pewien, czy tego właśnie szukam ... czy powinienem użyć pliku Data Protection dla pliku SQLite, z którym pracuje Core Data?

muszę pewne wskazówki o tym, jak mogę szyfrować wszystkie Core Data przechowywanych danych, prosimy

2) W przypadku lepiej byłoby przechowywać hasła użytkownika w pęku kluczy, zamiast szyfrowania i zapisać je za pomocą Core Data?

Dzięki z góry

+0

To [pytanie i odpowiedź] (http://stackoverflow.com/questions/1645007/how-can-i-encrypt-coredata-contents-on-an-iphone) powinno Ci pomóc w zakresie szyfrowania. – trevorj

Odpowiedz

2

można użyć coś podobnego encrypted-core-data który jest accessor owijka bazowa danych SQLite wokół Cipher.

Jest to podklasa NSIncrementalStore, która współdziała z zaszyfrowaną bazą danych.

Jeśli przechowujesz hasła, to lepszym rozwiązaniem jest keychain, ale jeśli chcesz zaszyfrować sklep Core Data, to powyższa opcja jest lepsza.

2

"2. Czy lepiej przechowywać hasła użytkownika w pęku kluczy zamiast szyfrować i przechowywać je przy użyciu danych podstawowych?"

Tak, właśnie do tego służy breloczek. Szansa, że ​​możesz stworzyć bezpieczniejsze miejsce do przechowywania niż pęku kluczy, jest minimalna. Nawet w przypadku systemu iOS z obsługą "Jailbreak" wciąż nie ma czasu na uzyskanie zabezpieczeń, minimalny czas na próbę dostępu:

9

Od czasu iOS 5, magazyny trwałych danych podstawowych używają ochrony danych do domyślnego szyfrowania danych. od iOS 5 release notes:

dla aplikacji zbudowanych dla iOS 5.0 lub nowszym, uporczywe przechowuje teraz domyślnie przechowują dane w postaci zaszyfrowanej na dysku domyślny poziom ochrony uniemożliwia dostęp do danych, aż po tym jak użytkownik odblokuje urządzenie do. za pierwszym razem można zmienić poziom ochrony, przypisując wartość niestandardową kluczowi NSPersistentStoreFileProtectionKey podczas konfigurowania trwałych sklepów. Dodatkowe informacje na temat ochrony danych nowości w iOS 5.0, patrz "Udoskonalenia w zakresie ochrony danych."

Jest to również uwzględnione w sesji WWDC 2011" Co nowego w danych podstawowych ".

Jako najlepsze praktyki nazwy użytkowników i hasła powinny być przechowywane w pęku kluczy. Jeśli przechowujesz nazwę użytkownika i hasło do usługi zdalnej (takiej jak serwer HTTP, serwer FTP itp.), Lepiej użyć pęku kluczy za pośrednictwem interfejsu API NSURLCredentialStorage.

4

Projekt "encrypted-core-data" ma ograniczenia dla średnich i złożonych modeli danych. W mojej aplikacji na iOS mieliśmy pewne relacje wiele do wielu oraz niektóre relacje jeden do wielu pomiędzy niektórymi podmiotami.

Kod mostkowy (kod łączący dane podstawowe z SQLCihper) ma braki, ponieważ nie ma implementacji NSOrderedSet. Modyfikacja kodu mostu była dla nas dużym kosztem.

Postanowiliśmy więc zaszyfrować poufne dane w kolumnie. W tym celu wykorzystaliśmy natywną zdolność do rdzenia danych transformable attributes i używamy biblioteki kryptograficznej do szyfrowania atrybutu jednostki. Ta funkcja szyfruje dane, gdy trafia do kolumny i odszyfrowuje je po odczytaniu. Odbywa się to automatycznie.

Prowadzi nas to do problemów z wydajnością, a następnie do wysyłania zapytań o dane w wielu wierszach, aby wyświetlić widok listy. Aby rozwiązać ten problem, przywróciliśmy typ kolumny do zwykłego typu string, a następnie ręcznie zaszyfrujemy i odszyfrowujemy kod, ale tylko wtedy, gdy jest to wymagane. Używamy również przejściowego atrybutu w modelu do przechowywania odszyfrowanych formularzy. Pomaga nam to przywrócić wydajność do akceptowalnego poziomu.

Wciąż szukam lepszego sposobu szyfrowania całej bazy danych przy użyciu danych podstawowych.