Как сделать хранилище ключей андроид



Android Keystore: что это, для чего нужен, как создать ключ

Конфиденциальность в приложении – пункт №1, которому разработчик должен уделить особое внимание. Самый распространенный способ защиты информации – шифрование данных. К нему относятся криптографические символы, симметрия и асимметрия шифра, сертификаты. Keystore – основной ресурс, где можно создать ключ безопасности. Об этом и поговорим ниже.

Кратко о Keystore

Keystore – это хранилище секретной информации, которое применяется Java-прогами с целью зашифровать данные, аутентифицировать и установить HTTPS соединение. Например, для аутентификации пользователя и сервера, между которыми установлен SSL, требуется ключ приватности и сертификат.

Для односторонней аутентификации кейстор применяется только на серверной части. При двусторонней происходит сертификатный обмен (т.е. у обоих сторон есть ключ приватности). Иными словами, кейстор необходим для того, чтобы быстро идентифицировать обладателя ключа.

Java «распознает» такие способы хранения данных в кейстор:

  • Jks. Это тип хранения по умолчанию, применяется чаще всего;
  • Jceks. Альтернатива предыдущему типу, на основе которой внедряется усложненное шифрование данных (на базе Triple DES). Если изначально применялся jks, хранилище можно обновить на jceks с помощью кейтула;
  • Pkcs12. Это тип хранения, используемый при необходимости транспортировки закрытых ключей.

Записи в кейсторе именуются уникальными подписями. В стандартной версии Keystore ключи защищены паролем. Более того, целое хранилище можно защищать паролем. Доверенные сертификаты для ПО Android распределяются в директории Jre-Lib-Security-Cacerts (запароленные под «changeit»).

Как пользоваться KeyStore

Данные в хранилище делятся на 2 группы: ключевые записи (private и public) и доверенные сертификаты. Ключевые записи используются для криптографического шифрования, содержат идентифицированную информацию о клиенте. Доверенные сертификаты не используются тогда, когда требуется key закрытого типа.

Для отделения ключевых записей от сертификатов используются разные хранилища: для персональных ключей и доверенных (включая СЦА). Таким образом, обеспечивается повышенная защита данных.

Принципы создания сертификата

Используйте команду «-genkey» и укажите период действия сертификата («-validity»). Далее создается пара RSA-ключей, действие которых будет длиться 12 месяцев с момента реализации. Закрытые ключи защищаются в хранилище паролем, а открытые «конвертируются» в самодподписывающийся» сертификат.

Если вы не обнаружили искомый ключ в хранилище, его можно создать с помощью кейтула. При использовании данного инструмента система запросит ввести пароль от хранилища и закрытого ключа. Формат создаваемого сертификата – Х.509. Параметры указывайте в виде командной опции. Задавайте информацию о компании, способе размещения в хранилище, сроке действия сертификата.

Принципы создания ключа

Чтобы создать ключ, используйте команду «-genkeypair». Она автоматически клонирует ключ под названием «keypair» и перемещает элементы в хранилище. Открытые ключи «охватываются» форматом Х.509 – т.е. самоподписным сертификатом. Чтобы увидеть список ключей и сертификатов, хранимых в кейсторе, введите команду «-list», после чего укажите путь к информации.

Источник

Подписывание пакета приложения для Android

В разделе Подготовка приложения к выпуску для сборки и архивации приложения для последующего подписывания и публикации использовался Диспетчер архивов. Из этого раздела вы узнаете, как создать удостоверение подписывания Android, как создать новый сертификат подписи для приложений Android и как опубликовать заархивированное приложение напрямую на диск. Полученный неопубликованный APK-файл можно установить на устройства с Android, минуя магазин приложений.

В разделе Архивирование для публикации в диалоговом окне Канал распространения предлагается два варианта распространения. Выберите Прямое:

В разделе Архивирование для публикации в диалоговом окне Подписать и распространить. предлагается два варианта распространения. Выберите Прямое и нажмите Далее:

Создание нового сертификата

После выбора Прямое Visual Studio откроет страницу Удостоверение подписывания диалогового окна, как это показано на следующем рисунке. Публикация . ПАКЕТ APK сначала должен быть подписан с помощью ключа подписи (также называемого сертификатом).

Можно использовать существующий сертификат, нажав кнопку Импорт, и затем продолжив с пункта Подписывание пакета APK. Если у вас еще нет сертификата, нажмите кнопку + для создания нового сертификата:

Появится диалоговое окно Создание хранилища ключей Android. Создайте при помощи этого окна новый сертификат подписи, который затем можно будет использовать для подписывания приложений Android. Введите необходимые сведения в этом диалоговом окне (выделено красным), как это показано на рисунке:

На следующем рисунке приведен пример сведений, которые необходимо ввести в этом окне. Нажмите Создать для создания нового сертификата:

Полученное хранилище ключей находится в следующем расположении:

C:\Users\USERNAME\AppData\Local\Xamarin\Mono для Android\Keystore\ALIASALIAS.keystore \

Например, при использовании chimp в качестве псевдонима вышеуказанные шаги создадут ключ подписи в следующем расположении:

C:\Users\USERNAME\AppData\Local\Xamarin\Mono для Android\Keystore\chimp\chimp.keystore

Папка AppData по умолчанию скрыта, и для доступа к ней вам, возможно, потребуется отобразить ее.

Кроме того, не забудьте создать резервную копию результирующего файла хранилища ключей и пароля в безопасном месте. Она не включена в решение. Если вы потеряете ваш файл хранилища ключей (например, если вы сменили компьютер или переустановили Windows), то вы не сможете подписать приложение тем же сертификатом, что и предыдущие версии.

Подробные сведения о хранилище сертификата см. в разделе Отображение MD5 и SHA1 сигнатур хранилища ключей.

После нажатия кнопки Прямое Visual Studio для Mac откроет диалоговое окно Удостоверение подписывания Android. Для публикации .APK-файла его обязательно нужно подписать ключом подписи (также называемым сертификатом). Если сертификат уже существует, то для его импорта нажмите кнопку Импорт существующего ключа и перейдите к разделу Подписывание пакета APK В ином случае нажмите кнопку Создать новый ключ для создания нового сертификата:

Диалоговое окно Создание нового сертификата используется для создания нового сертификата подписи, который можно использовать для подписания приложений Android. После ввода всех необходимых сведений нажмите кнопку OK:

Полученное хранилище ключей находится в следующем расположении:

Например, вышеуказанные шаги создадут новый ключ подписи в следующем расположении:

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

Подробные сведения о хранилище сертификата см. в разделе Отображение MD5 и SHA1 сигнатур хранилища ключей.

Подписывание пакета APK

При нажатии кнопки Создать новое хранилище ключей (содержащее новый сертификат) будет сохранено и отобразится в списке Удостоверение подписывания, как это показано на следующем рисунке. Для публикации приложения в Google Play нажмите Отмена и перейдите к разделу Публикация в Google Play. Для публикации напрямую выберите удостоверение подписывания и нажмите Сохранить как, чтобы опубликовать приложение для независимого распространения. Например, на приведенном ниже рисунке выбрано созданное ранее удостоверение подписывания chimp:

Затем Диспетчер архивов отобразит ход выполнения операции. После завершения процесса публикации для выбора места сохранения сформированного .APK-файла откроется диалоговое окно Сохранить как:

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

После подписания файла щелкните Открытое распространение:

В результате проводник Windows откроет папку, содержащую сформированный APK-файл. На этом этапе Visual Studio завершает компиляцию приложения Xamarin.Android в APK-файл, готовый к распространению. На рисунке ниже изображен пример готового к публикации приложения MyApp.MyApp.apk:

Как мы видим, новый сертификат был добавлен в хранилище ключей. Для публикации приложения в Google Play нажмите Отмена и перейдите к разделу Публикация в Google Play. В противоположном случае нажмите Далее для публикации приложения напрямую (для независимого распространения), как это показано в следующем примере:

Диалоговое окно Опубликовать напрямую перед публикацией отображает сводку по подписанному приложению. Проверьте правильность следующих сведений и нажмите Опубликовать.

С помощью диалогового окна Выходной APK-файл укажите путь для сохранения файла. Нажмите кнопку Сохранить.

Затем введите пароль сертификата (пароль, который был указан в диалоговом окне Создание нового сертификата) и нажмите OK:

APK-файл подписан сертификатом и сохранен по указанному пути. Нажмите Показать в Finder:

В результате откроется Finder с расположением подписанного APK-файла:

APK-файл готов к копированию из Finder в место назначения. Перед распространением рекомендуется установить APK-файл на устройство с Android и проверить работоспособность приложения. Дополнительные сведения о прямой публикации APK-файлов см. в разделе Независимая публикация.

Следующие шаги

После подписывания пакета приложения для выпуска его необходимо опубликовать. Следующие разделы описывают несколько способов публикации приложения.

Источник

Русские Блоги

Хранилище ключей Android KeyStore

Введение в KeyStore

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

Система хранилища ключей используется API KeyChain и функцией поставщика хранилища ключей Android, представленной в Android 4.3 (уровень API 18). В этой статье объясняется, когда и как использовать поставщик хранилища ключей Android.

Сценарии применения

1. Хранение ключа. Самая большая функция KeyStore, предоставляемая Android, заключается в том, что от разработчиков не требуется поддерживать хранение ключа, что является более безопасным, чем хранение в пространстве данных пользователя или во внешнем хранилище. Обратите внимание, что этот ключ будет удален, когда пользователь очистит данные или удалит приложение.
2. Благодаря независимой системе библиотеки ключей Android можно повысить безопасность.

функция безопасности

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

Предотвращение извлечения

Ключ хранилища ключей Android использует две меры безопасности для предотвращения извлечения ключевого материала:

  • Ключевой материал никогда не попадает в процесс подачи заявки. Когда операция шифрования выполняется с помощью ключа хранилища ключей Android, приложение передает открытый текст, зашифрованный текст и сообщение для подписи или проверки в системный процесс, выполняющий операцию шифрования. Если процесс приложения подвергается атаке, злоумышленник может использовать ключ приложения, но не может извлечь материал ключа (например, для использования вне устройства Android).
  • Вы можете привязать ключевой материал к защищенному оборудованию устройства Android, например к Trusted Execution Environment (TEE) и Secure Element (SE). Когда эта функция включена для ключа, его ключевой материал никогда не будет открыт для защищенного оборудования. Если операционная система Android подвергается атаке или злоумышленник может прочитать внутреннюю память устройства, злоумышленник может использовать хранилище ключей Android приложения на устройстве Android, но не сможет извлечь данные с устройства. Эта функция может быть включена только в том случае, если аппаратное обеспечение безопасности устройства поддерживает определенную комбинацию алгоритма ключа, блочного режима, схемы заполнения и дайджеста, на использование которого ключ имеет право. Чтобы проверить, включена ли эта функция для ключа, получите KeyInfo ключа и проверьте возвращаемое значение KeyInfo.isInsideSecurityHardware ().

Авторизация использования ключа

Чтобы избежать несанкционированного использования ключевого материала на устройствах Android, библиотека ключей Android позволит приложению указать разрешенное использование ключа при создании или импорте ключа. После того, как ключ сгенерирован или импортирован, его авторизация не может быть изменена. Затем каждый раз, когда используется ключ, авторизация осуществляется хранилищем ключей Android. Это расширенная функция безопасности, обычно используемая только в ситуациях, когда требуются следующие требования: после того, как ключ сгенерирован / импортирован (не до или во время), процесс приложения подвергается атаке, не вызывая несанкционированного использования ключа.

Поддерживаемые ключевые лицензии можно разделить на следующие категории:

  • Шифрование: алгоритм, расчет или назначение ключа авторизации (шифрование, расшифровка, подпись, проверка), схема заполнения, режим блокировки и дайджест, которые можно использовать с ключом;
  • Time validity interval: временной интервал, в течение которого разрешено использование ключа;
  • Аутентификация пользователя: ключ можно использовать только в том случае, если пользователь недавно прошел аутентификацию. См. Раздел Требовать аутентификацию пользователя для использования ключей.

В качестве дополнительной меры безопасности для ключей, материал ключа которых находится внутри защищенного оборудования (см. KeyInfo.isInsideSecurityHardware ()), определенные разрешения на использование ключей могут быть реализованы с помощью защищенного оборудования, в зависимости от устройства Android. Шифрование и авторизация аутентификации пользователя могут быть реализованы с помощью защищенного оборудования. Поскольку аппаратное обеспечение безопасности обычно не имеет независимых часов безопасности реального времени, оно не может реализовать авторизацию по временному интервалу.

Вы можете использовать KeyInfo.isUserAuthenticationRequirementEnforcedBySecureHardware (), чтобы запросить, реализована ли авторизация ключа аутентификации пользователя с помощью безопасного оборудования.

Выберите связку ключей или поставщика хранилища ключей Android

Пожалуйста, используйте KeyChain API, когда вам нужны учетные данные системного уровня. Когда приложение запрашивает какие-либо учетные данные через API KeyChain, пользователю необходимо использовать пользовательский интерфейс, предоставляемый системой, чтобы выбрать, к каким учетным данным приложение может получить доступ. Таким образом, несколько приложений могут использовать один и тот же набор учетных данных с согласия пользователя.

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

Использовать поставщика хранилища ключей Android

Чтобы использовать эту функцию, используйте стандартные классы KeyStore и KeyPairGenerator или KeyGenerator, а также поставщик AndroidKeyStore, представленный в Android 4.3 (уровень API 18).

AndroidKeyStore регистрируется как тип хранилища ключей для использования в методе KeyStore.getInstance (тип) и регистрируется как поставщик при использовании в методах KeyPairGenerator.getInstance (алгоритм, поставщик) и KeyGenerator.getInstance (алгоритм, поставщик).

Создать новый закрытый ключ

Для создания нового PrivateKey необходимо также указать начальные атрибуты X.509 самозаверяющего сертификата. Позже вы можете использовать KeyStore.setKeyEntry для замены сертификата сертификатом, подписанным центром сертификации (ЦС).

Для генерации ключей используйте KeyPairGenerator и KeyPairGeneratorSpec:

Создать новый ключ

Для генерации ключей используйте KeyGenerator и KeyGenParameterSpec.

Использовать записи хранилища ключей

Использование поставщика AndroidKeyStore реализовано через все стандартные API хранилища ключей.

Список пунктов

Перечислите записи в хранилище ключей, вызвав метод aliases ():

Подпишите и проверьте данные

Извлекая KeyStore.Entry из хранилища ключей и подписывая данные с помощью API подписи (например, sign ()):

Точно так же используйте метод verify (byte []) для проверки данных:

Требовать аутентификацию пользователя для использования ключей

При создании ключа или импорте ключа в AndroidKeyStore вы можете указать, что ключ авторизован для использования только аутентифицированными пользователями. Пользователь аутентифицируется, используя подмножество учетных данных безопасного экрана блокировки (шаблон / PIN-код / ​​пароль, отпечаток пальца).

Это расширенная функция безопасности, обычно используемая только в ситуациях, когда требуются следующие требования: после того, как ключ сгенерирован / импортирован (не до или во время), процесс приложения подвергается атаке без использования ключа неаутентифицированными пользователями.

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

Источник

You may also like...

Adblock
detector