2013-09-06 3 views
-1

Я разрабатываю приложение для Android, которое позволяет пользователю хранить заметки (например, evernote, keep и т. Д.), Но с возможностью «защищать» (скажем, шифровать) некоторые из эти заметки просматриваются неавторизованными пользователями.Шифрование данных на основе пароля пользователя

Прежде всего, я скажу, что я понятия не имею о шифровании, поэтому любые исправления, предложения, улучшения и т. Д. Действительно приветствуются.

Это сценарий я хочу:

пользователь открывает приложение, войти со своим собственным паролем, а затем он может просматривать эти заметки.

Для всех, что я прочитал о проверке паролей, наилучшим вариантом является его хэш + соль с сильным односторонним шифрованием. Однако, прочитав больше, я нашел алгоритм BCrypt, который, кажется, является лучшим вариантом. Также найдено jBCrypt API для Java, который выглядит очень прост в использовании (я должен проверить интеграцию андроида кстати ...)

Какой из них вы рекомендуете?

Если я использую хеш + соль, где я должен хранить (случайную) соль? Потому что больно нужно добавить его к паролю ввода пользователя в следующий раз, когда пользовательский логин (а затем его хэш) проверит с хэшем, хранящимся в моей БД.

Это одна из проблем, другая - шифрование данных.

Моя идея состояла в том, чтобы использовать пользовательский пароль для шифрования, однако этот пароль будет коротким, так плохо потребность другой соли, чтобы предотвратить BruteForce атаки ...

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

И последний вопрос: безопасно ли хранить пароль в памяти (во время регистрации пользователя для дешифрования данных)? Я читал много вещей, как Keystores и так, но не знаю, как безопасный вариант здесь.

Заранее спасибо

+0

Вы пытались криптать текст? Если вы этого не сделали, вам нужно попробовать. Вы увидите, что выходной текст настолько большой и сложный. Каждый раз, Есть некоторые способы расшифровать ваши данные, но так трудно взломать простой пользователь :) – Tugrul

+0

Вы храните соль вместе с хэшем пароля (возможно, в БД). См. Http://crackstation.net/hashing-security.htm. Вам нужна Соль только для предотвращения атак, если два из ваших пользователей используют один и тот же пароль, тогда они не получат одинаковый хеш. –

+0

i undestand, сохраняющий соль в БД, будет безопасным для сценария Server-Client, где DB его предполагается также «безопасным». Но на андроиде, где БД находится в «клиенте», что держится за хакером, который получает доступ к моему телефону, чтобы получить эту соль из БД и направить мой пароль, добавленный к этой соли? Хорошая ссылка, кстати – nsL

ответ

2

Лучшее решение для вас, чтобы не работать на таком низком уровне. Шифрование: hard, поэтому, если вы не планируете стать экспертом по криптографии, используйте существующие библиотеки с открытым исходным кодом, которые «подойдут вам», и вам не придется потеть все эти детали. SQLCipher for Android для баз данных и IOCipher для BLOB/файлов - два таких примера.