Как безопасно хранить личный файл на iOS

на Android я могу хранить файлы в достаточно защищенном файле, используя Context.openfileoutput. он будет сохранен на внутреннем диске, специфичном для моего приложения, который недоступен для других приложений, и единственный способ получить это - подключить отладчик/устройство рутирования. это не 100% защита от взлома, но этого достаточно.

Это то, что существует на iOS?

я прочитал https://developer.apple.com/library/content/qa/qa1699/_index.html, но безопасно ли это? как я догадываюсь, это выглядит примерно так

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
                           NSString *librariesDirectory = [paths objectAtIndex:0];
                           NSLog(@"%@", librariesDirectory);
                           NSString *filePath = [NSString stringWithFormat:@"%@/%@/%@", librariesDirectory,@"Private", @"internal_image.jpg"];

Будет ли этот файл чем-то, что

  • другие приложения не могут получить доступ
  • не делает резервную копию в icloud
  • хорошо виден приложению, но НЕ конечному пользователю

?


person David T.    schedule 19.01.2017    source источник
comment
Да. На самом деле iOS работает так. Каждое приложение имеет свою песочницу. Есть 2 основных места, где вы храните материалы — папка Doc и Temp (эти две находятся в песочнице приложения).   -  person GeneCode    schedule 19.01.2017
comment
Дополнительное примечание: хотя эти файлы скрыты от обычного пользователя, это не мешает человеку видеть эти файлы на взломанном устройстве.   -  person GeneCode    schedule 19.01.2017


Ответы (2)


Если у вас есть конфиденциальная информация для хранения, то единственное действительно безопасное место для ее хранения — это цепочка ключей. Очевидно, вы не хотите вставлять все свои данные в цепочку ключей, поэтому вместо этого просто сохраните там ключ шифрования, зашифруйте свою информацию и сохраните ее в каталоге документов. Если кто-то получит доступ к каталогу документов, например, из резервной копии iCloud, он не сможет прочитать содержимое файла без его расшифровки.

person Josh Homann    schedule 19.01.2017
comment
есть ли место, куда я могу вставить его, чтобы он НЕ проходил через резервную копию iCloud? - person David T.; 19.01.2017

1) Создайте файл с вашими данными

2) Сгенерируйте ключ шифрования с высокой энтропией и зашифруйте файл

3) Сохраните ключ шифрования на свой сервер

4) Сохраните зашифрованный файл в папке библиотеки и установите для флага NSURLIsExcludedFromBackupKey значение true.

•) Теперь файл находится в месте, резервная копия которого не будет сохранена в iCloud, он недоступен другим приложениям, доступен пользователю, но зашифрован, поэтому с ним ничего нельзя сделать.


Хорошая информация о NSURLIsExcludedFromBackupKey: https://stackoverflow.com/questions/27216189/files-disappearing-from-nslibrarydirectory/27309392#27309392

person Albert Renshaw    schedule 08.06.2020