Защита мастер-пароля для шифрования в Android

#android #encryption

#Android #шифрование

Вопрос:

Я использую общую библиотеку шифрования для Android, как указано в этой ссылке:http://www.androidsnippets.com/encryptdecrypt-strings

Как мне зашифровать «мастер-пароль», в настоящее время я жестко кодирую свой «мастер-пароль» в коде. Я боюсь, что кто-нибудь может перепроектировать мой код и найти «Мастер-пароль». С помощью этого они могут находить защищенные строки.

Пожалуйста, дайте мне знать, есть ли какой-либо стандартный обходной путь.

Комментарии:

1. «Фрагмент», который вы используете, сломан и может работать не на всех версиях Android, в частности на части генерации ключей. Используйте функцию получения ключа, чтобы получить ключ из пароля.

2. То, что я написал менее часа назад: «Это ужасные примеры, в них даже не указан полный алгоритм (и, вероятно, по умолчанию используется ECB, а не то, что вы хотите для файлов). Кроме того, он использует кодировку платформы вместо указанной кодировки для строки (.getBytes()). setSeed() НЕ генерирует один и тот же ключ каждый раз, он добавляет начальные байты в случайный пул. В довершение всего, они используют lingua, далекий от стандартного lingua, поэтому вы не можете ничего найти («ясно» вместо «просто»).»

Ответ №1:

Вы не должны жестко кодировать пароль, мастер он или нет, если система не предоставляет какой-либо защищенный контейнер.

Вы должны либо запрашивать мастер-пароль у пользователя при каждом запуске вашего приложения, либо вы можете временно кэшировать пароль в памяти.

Вы можете заставить приложение удалить пароль из памяти после того, как приложение простаивает в течение заранее определенного времени.

Кроме того, используйте функцию получения ключа, например PBKDF2 , для получения криптографически защищенного ключа из обычного текстового пароля.

Комментарии:

1. Существует ли обходной путь, позволяющий пользователям не вводить свой мастер-пароль каждый раз? Как приложение Twitter, Facebook или Gmail работает с OAUTH?

2. Я полагаю, что обходного пути нет. Пароль / ключ ДОЛЖЕН быть там для расшифровки. Если вы не хотите, чтобы пользователь вводил его каждый раз, я боюсь, вам нужно будет где-нибудь его сохранить. Что касается Twitter / GMail, я не совсем уверен, но AFAIK, они предоставляют какой-то токен стороннему приложению, который приложение может использовать для доступа к данным пользователя. Токен не содержит пароля пользователя. Единственный способ получить токен — попросить пользователя авторизовать приложение, которое в конечном итоге требует от пользователя входа в Gmail / Twitter, для которого, очевидно, нужен пароль.