Использование хранилища ключей Android для хранения симметричных ключей - PullRequest
0 голосов
/ 02 января 2019

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

Имея в виду версии Android начиная с 21, я подумал о том, как опустить общие настройки и использовать только KeyStore. Насколько законной с точки зрения безопасности будет следующая схема?

  1. Создание пары ключей RSA в хранилище ключей.
  2. Используйте keyStore.getCertificate (keyAlias) .encoded (или его хеш) в качестве симметричный ключ.

Легче ли злоумышленнику получить сертификат из KeyStore, чем, скажем, закрытый ключ? Может быть, злоумышленник может инициировать какое-то поддельное соединение SSL / TLS, чтобы получить его? Кроме этого, я не могу придумать подход к использованию закрытого ключа в качестве симметричного (путем его хеширования или использования KDF), поскольку его нельзя извлечь из хранилища ключей в закодированном виде.

Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...