Я осмотрелся и не нашел информации о том, как Android может хранить пароли на устройстве. Особенно пароли Gmail. Я хочу узнать, как Android шифрует и хранит пароли? Какой ключ он использует и где этот ключ хранится, и какой алгоритм шифрования он использует.
Официальное приложение Gmail не хранит пароль на вашем устройстве. Ваш пароль на 100% безопасен, если вы используете это приложение.
Вот как это работает: пароль используется серверами аутентификации Google ТОЛЬКО в первый раз. После первой успешной аутентификации на Auth Token
устройство загружается файл, который сохраняется в accounts.db
файле в виде обычного текста. Для всех последующих входов используется именно этот Auth Token
, а НЕ ваш первоначальный пароль.
Итак, если ваше устройство украдено, все, что кто-либо может получить, это то, Auth Token
что оно становится недействительным после смены пароля. Таким образом, вы будете в окончательном командовании.
Для максимальной безопасности я рекомендую вам включить 2-Factor Authentication
и создать Device Specific Password
для вашего устройства. После потери устройства все, что вам нужно, это отключить это устройство. Вам даже не нужно менять основной пароль.
Примечание. Все это неверно, если вы используете сторонние почтовые приложения для Gmail, а именно. Стандартное приложение электронной почты, K-9 Mail и т. д. Протоколу IMAP или POP требуется оригинальный пароль для аутентификации пользователей каждый раз. Таким образом, простой пароль должен быть доступен для приложения электронной почты перед его отправкой на сервер. Таким образом, большинство почтовых приложений хранят пароли в виде простого текста (хеширование/шифрование бесполезно, поскольку ключ хеширования/шифрования необходимо хранить локально). В этом случае я бы порекомендовал вам включить 2-Factor Authentication
и создать Device Specific Password
для вашего устройства. После потери устройства все, что вам нужно, это отключить это устройство.
Обновление:
технически возможно хранить пароли локально в зашифрованном/хешированном виде без локального хранения ключа шифрования/ключа хеширования в виде простого текста. Спасибо @JFSebastian за указание на это. К сожалению, такой реализации для Android пока нет. Начиная с ICS, Android предоставляет API KeyChain, с помощью которого приложение может хранить пароль локально в защищенной форме. Приложения, использующие KeyChain API, встречаются редко, но стандартное почтовое приложение использует его (спасибо @wawa за эту информацию). Таким образом, ваш пароль будет в безопасности со стандартным почтовым приложением, пока ваш экран заблокирован. Помните, что KeyChain небезопасен, если устройство имеет root-права и недоступно на устройствах до ICS.
Пароли Android, используемые со встроенным приложением электронной почты, хранятся в виде обычного текста в базе данных SQLite. Это отличается от приложения Gmail , которое использует токены аутентификации, как описано в ответе Сачина Сехара .
Для Jelly Bean расположение базы данных:
/data/system/users/0/accounts.db
Указанное выше расположение зависит от версии Android.
Это расположение на нерутированном устройстве защищено и защищено операционной системой.
На рутированных устройствах пользователи уже технически взломали собственную безопасность, и даже если бы это было не в виде простого текста, расшифровать все равно было бы тривиально, поскольку для этого ключ должен существовать где-то на устройстве.
Член команды разработчиков Android опубликовал объяснение , которое актуально и по сей день:
Теперь, что касается этой конкретной заботы. Первое, что нужно уточнить, это то, что приложение электронной почты поддерживает четыре протокола — POP3, IMAP, SMTP и Exchange ActiveSync — и, за очень немногими, очень ограниченными исключениями, все это старые протоколы, которые требуют, чтобы клиент предоставил пароль серверу. при каждом соединении. Эти протоколы требуют, чтобы мы сохраняли пароль до тех пор, пока вы хотите использовать учетную запись на устройстве. Более новые протоколы этого не делают — вот почему, например, некоторые статьи контрастируют с Gmail. Более новые протоколы позволяют клиенту использовать пароль один раз для создания маркера, сохранения маркера и сброса пароля.
Я призываю вас просмотреть статью, на которую есть ссылка в комментарии № 38 , которая хорошо написана и довольно информативна. Он дает очень хорошее представление о разнице между «скрытием» паролей и тем, чтобы сделать их действительно «безопасными». Простое сокрытие вашего пароля (например, base64) или его шифрование ключом, хранящимся в другом месте, не сделает ваш пароль или ваши данные более безопасными. Злоумышленник все равно сможет получить его.
(В частности, были сделаны некоторые заявления о том, что некоторые другие почтовые клиенты не хранят пароль в открытом виде. Даже если это правда, это не означает, что пароль является более безопасным. Простой тест: если вы можете загрузить устройство, и оно начнет получать электронную почту на настроенные вами учетные записи, тогда пароли не являются действительно безопасными.Они либо запутаны, либо зашифрованы другим ключом, хранящимся где-то еще.)
Кроме того, поскольку эта проблема, по-видимому, беспокоит многих пользователей Android, вы также можете следить за этим обсуждением на Slashdot — данные паролей Android, хранящиеся в обычном тексте .
accounts.db
файл защищен от чтения другими учетными записями, кроме system
./data/system/sync/accounts.xml
(да, это XML), как сказано в этой статье .
Поток
асудхак
Поток