Пароли приложений и безопасность SQLite - PullRequest
6 голосов
/ 23 апреля 2010

Я некоторое время искал в Google информацию о паролях приложений и безопасности SQLite, и ничего из того, что я нашел, действительно не ответило на мои вопросы.

Вот что я пытаюсь выяснить:

1) У моего приложения будет дополнительная операция с паролем, которая будет вызываться при первом открытии приложения.У меня есть следующие вопросы: а) Если я сохраню пароль через настройки Android или базу данных SQLite, как я могу обеспечить безопасность и конфиденциальность пароля, и б) как будет осуществляться восстановление пароля?

Относительно б) изВыше я думал о том, чтобы запросить адрес электронной почты при включенной функции пароля, а также вопрос о подсказке пароля для использования при запросе восстановления пароля.После успешного ответа на вопрос с подсказкой, пароль отправляется по электронной почте на адрес электронной почты, который был представлен.Я не совсем уверен в безопасности и конфиденциальности метода электронной почты, особенно если электронное письмо отправляется, когда пользователь подключен к открытой общедоступной беспроводной сети.

2) Мое приложение будет использовать базу данных SQLite, который будет храниться на SD-карте, если она есть у пользователя.Независимо от того, хранится ли он на телефоне или на SD-карте, какие варианты у меня есть для шифрования данных и как это влияет на производительность приложения?

Заранее благодарим за потраченное время на ответы на эти вопросы.Я думаю, что могут быть другие разработчики, борющиеся с теми же проблемами.

1 Ответ

4 голосов
/ 23 апреля 2010

1) Восстановление пароля опасно. Надежность пароля подрывается ответом на вопрос, это принцип самой слабой ссылки. Взлом электронной почты Сары Пэйлин стал возможен из-за этой (очень) небезопасной функции. Кроме того, если вы храните пароль в «восстанавливаемом формате», как в блочном шифре, таком как AES, или потоковом шифре, таком как RC4, или асимметричном шифре, таком как RSA, то вы явно нарушаете CWE-257 . Если вам действительно нужна эта функция, вы должны потребовать, чтобы пользователь сбросил свой пароль, если он его не знает, то зачем вам нужно было сообщить ему?

Пароли всегда должны хешироваться с использованием безопасного дайджеста сообщений. В настоящее время многие функции дайджеста сообщений небезопасны, md4, md5, sha0 и sha1 все очень повреждены и никогда не должны использоваться для паролей. На данный момент лучше всего использовать любой член семейства sha2, я рекомендую SHA-256. В настоящее время NIST проводит конкурс на sha3, и он не будет завершен до 2012 года.

Пароли также должны быть «засолены» с большим случайным значением. Это может быть еще один столбец в вашей базе данных, который затем добавляется к простому текстовому паролю перед передачей его в функцию дайджеста сообщения. Это делает невозможными атаки по словарю, если злоумышленник не может получить соль, а также делает предварительные вычисления гораздо более ресурсоемкими для успешного проведения. Несмотря на общеизвестные знания, засолка не останавливает радужные столы, это просто означает, что вам нужен НАМНОГО БОЛЬШЕ набор радужных столов.

2) Где вы собираетесь поместить ключ для вашей зашифрованной базы данных? Sqlite - это просто файл, который вы можете зашифровать, а затем расшифровать при запуске приложения, это просто добавляет время загрузки, но во время выполнения оно будет таким же быстрым. Реальная проблема в том, что там абсолютно нет места , вы можете поместить на устройство секрет, который злоумышленник не сможет получить. Злоумышленник имеет на больший контроль над устройством, чем вы, злоумышленник может сделать джейлбрейк устройства и делать все, что ему захочется. Даже если ключ передан во время выполнения, его все равно можно получить, посмотрев на память устройства. Любые попытки зашифровать базу данных могут быть подорваны, это может усложнить задачу, но не остановит опытного хакера.

...