Как защитить (зашифровать) данные, хранящиеся в webkit/local store

Я разрабатываю приложение, использующее инфраструктуру PhoneGap, и, следовательно, это просто веб-приложение, использующее HTML5. Как и во многих веб-приложениях, мой клиент также хочет, чтобы данные были доступны, когда устройство находится в автономном режиме. Для таких ситуаций я хочу хранить данные в локальном хранилище браузера.

Однако заказчик также хочет, чтобы данные были зашифрованы, чтобы в случае потери устройства конфиденциальные данные не попали в чужие руки. Мое текущее исследование выявило 2 возможных подхода:

1) Зашифруйте любые данные с помощью среды шифрования JS перед сохранением в локальном хранилище. Поскольку для моего приложения требуется логин пользователя, я могу использовать пароль пользователя для получения ключей шифрования (пароль пользователя хранится в цепочке ключей iOS).

2) Механизмы защиты данных пользователей iOS https://www.apple.com/business/docs/iOS_Security_Guide.pdf

Что касается 2), правильно ли, что включение защиты данных на портале разработчика (раздел App ID) ничего на самом деле не шифрует, а скорее позволяет шифровать определенные файлы, используя соответствующие операции NSData или NSFileManager? Или можно ли зашифровать всю песочницу (включая локальное хранилище браузера!), включив защиту данных на уровне идентификатора приложения/профиля подготовки?

Есть ли какой-либо другой рекомендуемый подход для защиты сохраненных данных в локальном хранилище браузера?


person user826955    schedule 11.04.2013    source источник
comment
Получите ключ из пароля пользователя (используя правильный KDF и соль). Требовать от пользователя ввода пароля при запуске приложения. Но очевидно, что это безопасно только в том случае, если пароль пользователя надежный.   -  person CodesInChaos    schedule 11.04.2013


Ответы (1)


Первый вариант работает кросс-девайсно.

Два надежных фреймворка JS Encryption, которые я нашел в своем исследовании:

Что бы вы ни делали, убедитесь, что возможные данные, используемые для получения ключа шифрования (пароль в вашем примере), хранятся в безопасности.

person Andrea M    schedule 11.04.2013
comment
Использование связки ключей iOS должно быть безопасным, верно? Я нашел примеры кода, которые дополнительно шифруют пароли перед сохранением в связке ключей. Это необходимо? Я думал, что цель цепочки для ключей уже заключается в том, чтобы иметь безопасное место для хранения конфиденциальных вещей ... ? Кроме того, может ли кто-нибудь просветить меня по 2) выше, пожалуйста? - person user826955; 15.04.2013
comment
Цитата из библиотеки разработчиков Mac: связка ключей — это зашифрованный контейнер, в котором хранятся пароли для нескольких приложений и безопасных служб. Связки ключей — это безопасные контейнеры для хранения, а это означает, что когда связка ключей заблокирована, никто не может получить доступ к ее защищенному содержимому. Так что нет необходимости дополнительно шифровать пароли, если только вы не очень параноик;) источник: developer.apple.com/library/mac/#documentation/security/ - person Andrea M; 16.04.2013
comment
Ах, спасибо за информацию. 2) мне пока непонятно. Можно ли глобально зашифровать изолированную программную среду приложения (например, локальное хранилище браузера), включив защиту данных в профиле обеспечения? - person user826955; 16.04.2013
comment
Понятно, взгляните на этот вопрос, так как он решает некоторые из ваших проблем: stackoverflow.com/questions/4595955/защита-песочницы-приложения - person Andrea M; 16.04.2013
comment
К сожалению, эта страница не объясняет, что делает опция профиля подготовки. - person user826955; 22.04.2013