Як зберігається пароль Gmail в Android - і де?


37

Я оглянувся і не знайшов інформації про те, як Android вдається зберігати паролі на пристрої. Особливо паролі Gmail. Я хочу дізнатися, як Android шифрує та зберігає паролі? Який ключ він використовує та де цей ключ зберігається та який алгоритм шифрування він використовує.


1
Чому збережений пароль повинен бути зашифрований ключем? Це означає лише, що потрібно вводити ключ щоразу, коли потрібно ввести пароль, тоді ви можете просто не зберігати пароль і вводити його кожен раз.
Потік

Гм, ключ може бути конкретним пристроєм, отриманим з IMEI телефону чи чогось іншого. Це означає, що програмне забезпечення може отримати ключ, не маючи потреби користувача вводити його щоразу.
асудхак

1
Що заважає будь-якій іншій програмі працювати з телефоном, щоб отримати ключ? Такий підхід не додає додатковий рівень безпеки
Flow

Відповіді:


36

Офіційний додаток 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, за допомогою якого програма може зберігати пароль локально в захищеній формі. Програми, які використовують API KeyChain, є рідкісними, але додаток електронної пошти використовує його (Завдяки @wawa за цю інформацію). Отже, ваш пароль буде безпечним для додатка електронної пошти, поки ваш екран заблокований. Пам'ятайте, що KeyChain не є безпечним, якщо пристрій вкорінено та його немає на пристроях, що попередньо ICS.


6
@JF Себастьян: навіть якщо припустити, що ви повністю довіряєте сторонній стороні, яка зберігає ваші паролі, вони були лише дещо безпечнішими, ніж просто зберігати пароль у самому пристрої. Пристрій все ще повинен мати можливість отримати звичайний текст пароля з хмарного сховища, і пристрій все ще повинен кешувати пароль локально, тому що вам не потрібно повторно підключати свій ключ щоразу, коли ви потрапляєте в тунель або райони з слабкий прийом. Найгірше, що потрібно робити в безпеці - це хибне почуття безпеки.
Лі Лі Райан

4
@JFSebastian: На закінчення, єдиний справді безпечний спосіб аутентифікації - це робити те, що Google зробив з додатком Gmail, тобто використовувати нестандартну схему аутентифікації з маркером автентичності. Навіть якщо комусь вдалося викрасти ваш авторський маркер, ви можете віддалено визнати недійсним маркер, і вам не потрібно міняти пароль, оскільки невиразний пароль не був порушений. Інший безпечний спосіб - використовувати dongle без сеансів; ну, ви знаєте, що станеться, коли ви це зробите, ваші користувачі просто залишать ключ до кінця прикріпленим.
Лі Лі Райан

5
@JFSebastian: Я думаю, ви пропускаєте суть. Шифрування пароля не є більш безпечним, ніж просто зберігання його у простому тексті, навіть не на один біт. Будь-який зловмисник, якому вдається скопіювати account.db, також може скопіювати ключ дешифрування разом із ним; єдине, що дає шифрування, - це помилкове почуття безпеки , яке гірше, ніж відсутність безпеки. Так, є рішення, які набагато краще, ніж зберігання простого тексту пароля, але всі вони потребують змін у протоколі електронної пошти, тому ми повинні жити з тим, що ми маємо на даний момент. Або робити це правильно нестандартним способом, як це робив Gmail.
Лі Лі Райан

3
Служба брелоків @JFSebastian Apples або послуга, що надається ядром Linux, не є більш безпечним варіантом. Пароль все ще зависає в пам'яті, і якщо брелок розблокований, навіть незашифрований. Тому, ймовірно, лише трохи складніше отримати як кореневий файл, який читається тільки .db. Google реалізував найкраще можливе рішення, використовуючи токен аутентифікації, який може бути визнаний недійсним у випадку порушення пристрою. Наступним більш безпечним варіантом буде введення пароля кожен раз або взагалі просто уникати використання електронної пошти.
Потік

4
@LieRyan Що стосується ICS, додаток для електронної пошти фактично використовує api KeyStore не просто текстовий. android-developers.blogspot.com/2012/03/…
Wesley Wiser

12

Паролі Android, які використовуються із вбудованою програмою електронної пошти, зберігаються у простому тексті всередині бази даних SQLite. Це на відміну від програми Gmail , яка використовує Auth Tokens, як описано у відповіді Сахіна Сехара .

Для Jelly Bean розташування бази даних:

/data/system/users/0/accounts.db

Наведене вище розташування залежить від версії Android

Це місце на не вкоріненому пристрої захищено та захищено Операційною системою.
На корінних пристроях користувачі вже технічно зламали власну безпеку, і навіть якщо це не було в простому тексті, все одно було б тривіально розшифрувати, оскільки ключ повинен існувати десь на пристрої, щоб це зробити.

Член команди розробки Android розмістив пояснення, яке до сьогодні діє:

Тепер щодо цієї особливої ​​турботи. Перше, що слід уточнити, це те, що програма електронної пошти підтримує чотири протоколи - POP3, IMAP, SMTP та Exchange ActiveSync - і за дуже невеликими, дуже обмеженими винятками, все це є більш старими протоколами, які вимагають, щоб клієнт представив пароль серверу на кожному з'єднанні. Ці протоколи вимагають, щоб ми зберегли пароль на той час, як ви хочете використовувати обліковий запис на пристрої. Новіші протоколи цього не роблять - ось, наприклад, деякі статті контрастують з Gmail. Новіші протоколи дозволяють клієнту одноразово використовувати пароль, щоб створити маркер, зберегти маркер і відкинути пароль.

Я закликаю вас переглянути статтю, пов’язану з коментарем №38 , яка є добре написаною та досить інформативною. Це дає дуже хороший фон про різницю між "затемненням" паролів і роблячи їх справді "безпечними". Просто затемнення вашого пароля (наприклад, base64) або шифрування його ключем, збереженим в іншому місці, не зробить ваш пароль або ваші дані більш безпечними. Зловмисник все одно зможе отримати його.

(Зокрема, було заявлено про деякі інші клієнти електронної пошти, які не зберігають пароль у чіткому тексті. Навіть там, де це правда, це не означає, що пароль є більш безпечним. Простий тест: якщо ви можете завантажувати пристрій почне надходити електронною поштою на налаштовані ваші облікові записи, тоді паролі не справді захищені. Вони або заблукали, або зашифровані іншим ключем, який зберігається десь в іншому місці).

Окрім того, оскільки ця проблема заважає багатьом користувачам Android, ви також можете слідкувати за цим обговоренням на Slashdot - дані пароля для Android, які зберігаються в простому тексті .


Ого. Це мене дивує. Мені не було відомо про те, що він зберігається у простому тексті. Забудьте вкорінені або не вкорінені. Якщо ваш пристрій викрадено, недобросовісна людина може легко отримати ваші облікові дані, навіть якщо ви заблокували телефон ключем безпеки. Враховуючи цей факт, чи знаєте ви також про будь-які механізми шифрування на широкому диску.
асудхак

1
Які б вони не були, вони можуть бути використані для отримання доступу до облікового запису. Але, @SachinShekhar, то accounts.dbфайл буде захищений від читання , крім рахунків system.
Wyzard

1
Зуул, я ціную ваші зусилля, які ви доклали до відповідей, але я вважаю, що ця відповідь є дуже оманливою. Якщо ви переглянете цитату, яку ви цитували ще раз, додаток Gmail не зберігає пароль. - перевірити відповідь @SachinShekhar теж.
roxan

2
@asudhak Якщо будь-яка програма використовує оригінальний пароль, немає способу її захистити. Хакер може розшифрувати закодовану рядок з account.db після пошуку ключа шифрування / хешування, який потрібно зберігати локально, оскільки електронному додатку знадобиться цей ключ для складання оригінального пароля перед відправкою його на сервер.
Android Quesito

2
@roxan Я не зміг знайти нічого, що вказувало б на те, що пароль не зберігається додатком Gmail. Чи можете ви надати цитату чи посилання?
Потік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.