Новый менеджер паролей сделает Android еще более похожим на iOS
Пусть многие критикуют Android или iOS, особенно, если пользуются противоположной системой, но надо быть более рассудительным и понимать, что плюсы есть и там, и там. Если посмотреть на них, то начинаешь представлять, как выглядела бы идеальная операционная система. Именно поэтому разработчики обеих операционных систем периодически заимствуют идеи друг друга, еще больше сближая свои продукты. Это хорошо, ведь это эволюция, к которой стремится все в мире. А этот раз такая эволюция коснулась функции, которая позволит владельцам Android-смартфонов намного проще переходить с одного аппарата на другой. А заодно станет намного проще логиниться в приложениях, которые вы временно удаляли.
Ключи и пароли часто становятся проблемой при покупке нового смартфона.
Новый функции Android
Google постоянно делится информацией с разработчиками. Это что-то вроде небольших презентаций новых функций, которые им хорошо было бы применять в новых приложениях. Это сможет повысить их конкурентоспособность и сделает проще жизнь многих пользователей Android. В таких видео даются ответы на многие вопросы, которые могут возникнуть у тех, кто создает приложения.
В рамках текущих бета-релизов Android 11 компания Google опубликовала новое видео для разработчиков, в котором рассказывается, как компания планирует изменить способ входа в приложения и службы. Это может показаться какими-то сложными техническими данными, но то, что они могут нам принести, действительно очень радует.

Google внедряет совершенно новую систему под названием Block Store, и если разработчики действительно ее используют, войти в систему с вашими приложениями на новом телефоне будет так же просто, как восстановить из резервной копии в процессе установки.
Видео довольно короткое, и в числе прочего оно охватывает новую кроссплатформенную систему входа в систему «One Tap», которая облегчит вход в службы, если вы не знаете, как зарегистрировать учетную запись. Но это еще не все и самое интересное, как это часто бывает, в конце.
Авторизоваться с Android станет намного удобнее
Block Store сможет исправить одну из самых неприятных проблем Android — настройку нового устройства. Когда вы переходите на новый телефон или покупаете телевизор с Android, вход во все ваши сервисы становится настоящей болью. Не все доверяют диспетчеру паролей, и если вы используете разные данные для каждой учетки, как это и положено делать, вам может понадобится некоторое время для настройки параметров при переходе на новое устройство.
На Android появились приложения, которые обманули защиту Google Play
Служба резервного копирования и восстановления Android также не включает данные учетной записи. Хотя, некоторые данные все же хранятся в ней, говорить о том, что так можно обойти все подножные камни, не приходится. Поэтому Block Store стремится исправить все это и теперь главное чтобы разработчики подхватили эту идею и начали использовать ее в своих новых продуктах или готовить обновления для уже существующих.

С новой системой переходить с одного Android-смартфона на другой будет намного проще.
Как будут защищены пароли в Android
Приложения, которые поддерживают новый API-интерфейс Block Store, будут использовать систему на основе токенов для хранения учетных данных на телефоне пользователя. Эти токены могут быть скопированы с использованием сквозного шифрования непосредственно в вашу учетную запись Google.
Проще говоря, приложения и сервисы, которые поддерживают Block Store, позволят вам войти в систему и безопасно хранить эту информацию таким образом, чтобы все ваши устройства могли легко подключиться при восстановлении из резервной копии. Возможно, все упростится настолько, что даже не надо будет подтверждать действие. Вы просто включите телефон, подождете пару минут и получите устройство, на котором все будет настроено, как на старом устройстве.
Какой будет новая система хранения паролей Android
Разработчики могут добавлять все, что им нужно, в этот токен, чтобы приложение или сервис могли подгружать те данные, которые нужны для их работы после выхода из системы. В некотором роде можно сказать, что это будет что-то типа функции ”Связка ключей” или ” Keychain” на iOS. Там эта система работает уже несколько лет и очень хорошо себя зарекомендовала, избавив пользователей от необходимости помнить все пароли, которые у них только есть. А заодно дав возможность более безопасно устанавливать разные пароли для каждой учетной записи. Не секрет, что для взлома аккаунта достаточно знать электронную почту и пароль. Если данные утекли на одном из сервисов, достаточно просто попробовать это на других и с очень большой долей вероятности вас ждет успех. Если у вас такое было, расскажите в нашем Telegram-чате.

Apple уже давно доказала, что хранение паролей в облаке это очень удобно.
Мне кажется, что это одно из самых значительных изменений, которые Google может внести в Android как платформу, и это должно очень серьезно облегчить переключение между телефонами. Однако, надо понимать, что Google просто дала разработчикам инструмент и теперь уже только от них зависит, будут ли они им пользоваться или пустят все на самотек, продолжая делать все так, как есть. Отчасти этому может поспособствовать недоверие к системе шифрования. Но если они это сделают, система резервного копирования и восстановления Android может, наконец, начать конкурировать с Apple. Надо просто признать, что там она действительно лучше.

Теги
- Apple против Android
- Операционная система Android
Ключи, учетные данные и хранилище на Android
В предыдущем материале о безопасности пользовательских данных Android мы рассмотрели шифрование данных с помощью предоставленного пользователем кода. В этом уроке перейдём к хранению учётных данных и ключей. Я начну с ознакомления с учётными данными и закончу примером защиты данных с помощью хранилища ключей KeyStore.
Безопасное хранение данных на Android
Collin Stuart
Как обезопасить Android приложение
Ashraff Hathibelagal
Часто, при работе со сторонней службой, требуется какая-то форма авторизации. Она может быть настолько простой, как /login на стороне пользователя, которая принимает имя пользователя и пароль.
Сначала может показаться, что простое решение — это собрать UI, который будет предлагать пользователю войти в систему, а затем записать и сохранить их данные для входа. Однако, это не лучший метод, так как нашему приложению не нужно знать данные для входа в сторонний аккаунт. Вместо этого, мы можем использовать Диспетчер учётных записей (Account Manager), который уполномочен отрабатывать эту конфиденциальную информацию для нас.
Диспетчер учётных записей
Диспетчер учётных записей (Account Manager) — это централизованный помощник для работы с учётными данными пользователя, поэтому вашему приложению, иметь дело с паролями напрямую не нужно. Часто он предоставляет токен вместо реального имени пользователя и пароля, который можно использовать для выполнения аутентифицированных запросов к службе. Например, при запросе токена OAuth2.
Иногда, вся необходимая информация уже хранится на устройстве, а иногда Account Manager придётся обращаться к серверу за новым токеном. Вы, наверное, видели раздел Учётные записи в Настройках вашего устройства для разных приложений. И вот как, мы можем получить список доступных учётных записей:
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccounts();
Этому коду потребуется разрешение android.permission.GET_ACCOUNTS . Если вы ищете определённую учётную запись, вы можете найти её вот так:
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccountsByType("com.google");
Как только найдёте учётную запись, её токен можно получить вызвав метод getAuthToken(Account, String, Bundle, Activity, AccountManagerCallback, Handler) . Затем, таки можно использовать как для авторизированных запросов API к сервису. Это может быть RESTful API, в котором вы передаёте параметр токена во время HTTPS-запроса без необходимости знать детали личной учётной записи пользователя.
Так как, у каждой службы будет свой способ проверки подлинности и хранения личных учётных данных, Диспетчер учётных записей предоставляет модули проверки подлинности для реализации сторонней службой. Хотя Android может выполнять вход на многие популярные сервисы, для вашего приложения, вы можете написать свой собственный обработчик авторизации учётной записи и хранилища учётных данных. Это позволит убедиться, что учётные данные зашифрованы. Имейте также в виду, что учётные данные в Диспетчере учётных записей, которые используются другими службами, могут храниться в виде открытого текста, что делает их видимыми для любого, кто имеет рут-права на своё устройство.
Временами вам нужно будет иметь дело с ключами или сертификатами для отдельного лица или сущности, вместо просто данных для входа. Например, когда стороннее приложение отправляет вам файл сертификата, который вам нужно сохранить. Самый распространённый сценарий — это когда приложению нужно авторизироваться на сервере частной организации.
В следующем уроке, мы рассмотрим использование сертификатов для аутентификации и безопасной связи, ну а пока, я всё же хочу рассмотреть, как хранить эти элементы. Изначально Keychain API был создан для очень конкретного использования — установка закрытого ключа или пары сертификатов из файла PKCS#12.
Keychain — связка ключей
Представленный в Android 4.0 (API Level 14), Keychain API управлял ключами. В частности, это работает с объектами PrivateKey и X509Certificate и обеспечивает более безопасный контейнер, чем использование хранилища данных вашего приложения. Связано это с тем, что разрешения закрытых ключей открывают доступ к ключам только вашему приложению и только после авторизации пользователя. Это означает, что, прежде чем, вы сможете использовать хранилище учётных данных, на устройстве должен быть настроен экран блокировки. Кроме того, объекты в связке ключей можно объединить с защитой от оборудования, если доступно.
Код установки сертификата выглядит следующим образом:
Intent intent = KeyChain.createInstallIntent();
byte[] p12Bytes = //. read from file, such as example.pfx or example.p12.
intent.putExtra(KeyChain.EXTRA_PKCS12, p12Bytes);
startActivity(intent);
Пользователю будет предложено ввести пароль для доступа к закрытому ключу и указать имя сертификата. Для получения ключа, в следующем коде представлен пользовательский интерфейс, который позволяет пользователю выбирать ключ из списка установленных ключей.
KeyChain.choosePrivateKeyAlias(this, this, new String[]"RSA">, null, null, -1, null);
Как только выбор сделан, возвращается строка с названием псевдонима alias(final String alias) , где вы можете напрямую получить доступ к закрытому ключу или цепочке сертификатов.
public class KeychainTest extends Activity implements . KeyChainAliasCallback
Начало работы
Outline состоит из двух взаимосвязанных продуктов, которые обеспечивают вам и вашей команде непрерывный доступ в интернет.
Step 1
Начните работу с Менеджером Outline
Настройте свой сервер в приложении «Менеджер Outline»
Прежде чем настраивать сервер, скачайте приложение «Менеджер Outline» для компьютера. Оно позволяет централизованно управлять всеми настройками. Вы можете выбрать один из предложенных облачных сервисов или использовать собственную инфраструктуру Linux. Многие облачные сервисы предлагают тарифные планы стоимостью не более 5 долларов США в месяц.
Когда вы скачаете Менеджер, вам будет предложено выбрать доверенный облачный сервис, например Digital Ocean, AWS или Google Cloud. Следуйте инструкциям по регистрации в выбранном сервисе. После этого вы сможете управлять своим сервером в Менеджере Outline.
В Outline можно выбрать местоположение сервера: например, ваш интернет-трафик может направляться через Сингапур, Германию, США и другие страны.
Step 2
Создайте ключи доступа
Создайте ключи доступа для подключения устройств и предоставьте их другим пользователям сети
После того как вы настроите сервер, сгенерируйте уникальные ключи доступа в Менеджере Outline. Из Менеджера можно разослать приглашения, чтобы пользователи могли подключиться к серверу с помощью нужной платформы. Ключи доступа служат для подключения устройств к Менеджеру Outline и безопасного обмена данными с сервером. Эти ключи уникальны, их можно настраивать и удалять прямо в сервере. Задайте лимиты трафика, чтобы ограничить максимальную пропускную способность для каждого из устройств.
Чтобы подключиться к серверу, достаточно принять приглашение. После этого вы можете подключаться и отключаться в приложении.
Урок 124. Что такое Package для приложения
Пакет приложения мы прописываем в визарде создания приложения.

Потом его можно найти в манифесте.

Он же по дефолту становится пакетом для Java-классов

Как-то не особо значимая цель .
Может быть он используется как-то еще? Оказывается да. Более того, пакет — это крайне важная вещь при создании приложения. Пакет является идентификатором приложения в системе. Т.е. когда вы устанавливаете приложение, система смотрит его пакет и ищет уже установленное приложение с таким пакетом. Если не нашлось, то все ок и приложение устанавливается.
А вот если нашлось, то тут в дело вступает механизм подписи приложения ключом, который мы рассмотрели на прошлом уроке. Система проверяет, если установленное и устанавливаемое приложения подписаны одним и тем же ключом, то, вероятнее всего, это означает, что оба приложения создал один автор. И устанавливаемое приложение является обновлением установленного, т.к. их пакеты и ключи одинаковы. Система устанавливает новое приложение, заменяя старое — т.е. обновляет старое.
Если же система определила, что приложения были подписаны разными ключами, то это значит, что приложения были созданы разными авторами, пакеты совпали случайно, и новое вовсе не является обновлением старого. В этом случае при установке нового, старое было бы заменено, а значит потеряно (а не обновлено), т.к. приложения абсолютно разные. И система не дает поставить новое приложение, пока не будет вручную удалено старое.
Проведем пару тестов. Я создам два приложения Package1 и Package2 с одинаковым пакетом.
Установлю первое. Оно появилось в списке.

Теперь не удаляя первое, установлю второе.
Первое исчезло. Осталось только второе.

Система решила, что второе является обновлением первого (т.к. пакеты и ключи совпадают), поэтому первое благополучно снесла и заменила вторым. Собственно, это и происходит при обычном обновлении.
Теперь подпишу Package2 другим ключом, чем оно было подписано изначально и попробую обновить через adb.

Параметр r здесь означает, что приложение надо переустановить, если оно уже существует.
Видим ошибку Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]. Система сверила ключи у установленного и устанавливаемого приложений, увидела, что они разные и решила, что это будет не обновление, а просто приложение от другого разработчика ломится с тем же пакетом. И вполне разумно решила не удалять имеющееся приложение, а предупредить пользователя, что не совпадают ключи.
Если закинуть это приложение на эмулятор и поставить через файловый менеджер, получим примерно то же сообщение.

Из вышесказанного можно сделать следующий вывод: ваш ключ, которым вы подписываете приложение ни в коем случае нельзя терять или давать кому-либо.
Если вы ключ потеряете, то ваше приложение навсегда потеряет возможность быть обновленным. Даже если вы создадите новый ключ с тем же алиасом, паролем и данными владельца, это все равно будет другой ключ. И подписанная им следующая версия приложения будет рассматриваться системой не как обновление, а как попытка приложения от другого разработчика заменить ваше приложение и не даст его установить, пока не удалите установленное.
Если же вы ключ кому-то предоставите, то этот человек сможет сделать обновление для вашего приложения без вашего участия. И если этот человек имеет доступ и к вашей учетке разработчика в маркете, то он сможет залить туда свою версию вашего приложения.
Также не забывайте пароли от хранилища и от ключа. Это будет равносильно тому, что вы потеряли ключ. В общем, относитесь к вашим ключам со всей серьезностью.
И в конце урока небольшой ликбез. Пакет имеет еще одно значение. Как вы уже наверно заметили по вкладке Devices в Eclipse, пакет используется в качестве имени процесса, в котором запускается приложение. При этом, под каждое приложение система создает пользователя. Это позволяет разграничить доступ к данным. Каждое приложение запускается и работает со своими данными в отдельном процессе под отдельным пользователем. Соответственно, другие приложения не имеют к этим данным доступа, т.к. запущены под другими пользователями.
На следующем уроке:
— разбираемся с ViewPager
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
