7

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

https://developer.android.com/training/articles/keystore.html#WhichShouldIUse

и есть раздел под названием:

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

Но я не уверен, что до сих пор Я должен выбрать, чтобы получить самое безопасное решение.

Пожалуйста, помогите мне.

ответ

5

Как страница говорит:

Используйте KeyChain API, если вы хотите общесистемные полномочия

Целью KeyChain API является использование учетных данных имя пользователя/пароль, чтобы получить «маркер ', что это приложение (и потенциальные другие приложения) может использовать. KeyChain также используется для синхронизации личной информации (например, почты) в фоновом режиме.

Но в вашем случае кажется, что вы просто хотите сохранить закрытый ключ RSA. В этом случае Keystore - лучшее решение. Обратите внимание, что Keystore работает только на устройствах 4.3+, потому что для хранения его закрытых ключей (если имеется аппаратный модуль) используется безопасное хранилище, поддерживающее аппаратное обеспечение (например, ARM Trustzone и другие безопасные среды выполнения). Эта функция была добавлена ​​в Android 4.3.

Чтобы использовать Keystore, вам необходимо сгенерировать сертификат с открытым ключом и сохранить его с помощью закрытого ключа в Keystore. Keystore использует шаблон блокировки экрана/pin/etc. (если имеется) для шифрования закрытого ключа. Обратите внимание, что это иногда приводит к раздражающему факту, что пользователь больше не может отключить свой экран блокировки, пока пользователь не уничтожит его хранилище сертификатов или не удалит приложение (под Android < = 5), поэтому обязательно удалите сертификат когда ключ больше не нужен. Keystore сохранит закрытый ключ в аппаратном модуле (если он есть), поэтому гораздо сложнее извлечь закрытый ключ или другие приложения для шифрования данных с помощью закрытого ключа. Тем не менее, он не является на 100% безупречным, так как новый exploits are found и корень могут обойти (каким-то образом) этот дополнительный уровень защиты. Но это все же лучше, чем сохранение личного ключа в файле.

Также, если вы хотите более глубокое понимание того, как все это работает под капотом, я бы рекомендовал прочитать this paper, который подробно рассказывает о Keystore и других механизмах безопасности в Android.

+0

Отличный пост, спасибо! Один вопрос, поскольку цитируемый документ относится к изменениям в Lollipop: знаете ли вы, было ли улучшено шифрование хранилища ключей в более поздних версиях Android? Доступная информация, которую я нашел, не очень ясна в этом вопросе. – Frank

Смежные вопросы