Хранение пароля - PullRequest
14 голосов
/ 19 марта 2011

Я создаю приложение для хранения зашифрованных данных.

В этом вопросе OP рекомендовал хранить учетные данные пользователя в открытом виде.

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

Так что я могу его сохранить и получить.

Примечание: я не спрашиваю, как сохранить настройки, только если мое понимание того, как SecretKeySpecработает и как, сортировать, сериализовать и получать зашифрованный пароль.

РЕДАКТИРОВАТЬ : Извините, я забыл указать, что он должен быть совместим с API уровня 4.

Ответы [ 3 ]

11 голосов
/ 12 марта 2012

Прямо с сайта разработчика .

Будь умным о безопасности!

Важно понимать, что AccountManager не является сервисом шифрования или связкой ключей. Он хранит учетные данные, как вы передаете их, в виде простого текста. На большинстве устройств это не вызывает особого беспокойства, поскольку он хранит их в базе данных, доступной только для пользователя root. Но на рутованном устройстве учетные данные будут доступны для чтения любому пользователю, имеющему доступ к устройству с помощью adb.

Учитывая это, вы не должны передавать действительный пароль пользователя AccountManager.addAccountExplicitly (). Вместо этого вы должны хранить криптографически безопасный токен, который будет иметь ограниченное применение для злоумышленника. Если ваши учетные данные защищают что-то ценное, вы должны тщательно продумать что-то подобное.

Помните: что касается кода безопасности, следуйте правилу «Разрушители легенд»: не пытайтесь делать это дома! Проконсультируйтесь со специалистом по безопасности, прежде чем применять какой-либо пользовательский код учетной записи.

Теперь, когда заявления об отказе от защиты уже не используются, пришло время вернуться к работе. Вы уже реализовали основную часть своего пользовательского кода учетной записи; что осталось, это сантехника.

6 голосов
/ 19 марта 2011

Ничего себе. Я действительно не думаю, что хранить пароль пользователя в открытом виде - это серьезный вариант.

Проверьте AccountManager , который был разработан для этой цели. Хотя в вопросе, на который вы ссылаетесь, он получил отрицательную оценку, SampleSyncAdapter действительно является хорошим ресурсом для примера AccountManager, и единственный, который я знаю, включен в SDK.

Edit - о javax.crypto, я думаю, что это API более низкого уровня, чем AccountManager. Из документов:

Многие серверы поддерживают некоторые понятия токен аутентификации, который может быть используется для проверки подлинности запроса к сервер без отправки пользователя фактический пароль. (Токены авторизации обычно создается с отдельным запрос, который включает в себя пользователя учетные данные.) AccountManager может генерировать токены аутентификации для приложений, поэтому приложение не должно обрабатывать пароли напрямую. Аутентификаторы обычно можно использовать повторно и кэшировать AccountManager, но должен быть обновлен периодически. Это ответственность приложений для аннулирования аутентификации токены, когда они перестают работать, так что AccountManager знает, что нужно восстановить их.

Я бы не хотел иметь дело с этим на уровне javax.crypto, если бы мне не пришлось.

0 голосов
/ 23 сентября 2016

вы можете просто объявить имя пользователя и пароль в качестве оператора if, если условие соответствует, вы можете запустить действие в случае неправильного ввода, вы можете просто сгенерировать тост неправильного ввода. Но вы не можете получить пароль оттуда, если вы потеряли какой-либоЯ имею в виду, но вы можете создать много паролей для одного пользователя. Я добавил эту вещь в мое приложение и работал хорошо для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...