Мне нужно хранить симметричный ключ произвольной длины на устройстве Android.
Самое безопасное место для хранения - это KeyStore.
Проблема в том, что KeyStore не может сохранять произвольные ключи, а сохраняет только тот ключ, который он сгенерировал.
Симметричные ключи могут быть сгенерированы только начиная с API 23, а ключи RSA - с 18. Поэтому обычно рекомендуется генерировать ключ RSA в KeyStore, чем использовать открытый ключ для шифрования симметричного ключа, сохранить симметричный ключ в настройках и затем использовать закрытый ключ для его расшифровки.
Имея в виду версии Android начиная с 21, я подумал о том, как опустить общие настройки и использовать только KeyStore.
Насколько законной с точки зрения безопасности будет следующая схема?
- Создание пары ключей RSA в хранилище ключей.
- Используйте keyStore.getCertificate (keyAlias) .encoded (или его хеш) в качестве
симметричный ключ.
Легче ли злоумышленнику получить сертификат из KeyStore, чем, скажем, закрытый ключ? Может быть, злоумышленник может инициировать какое-то поддельное соединение SSL / TLS, чтобы получить его? Кроме этого, я не могу придумать подход к использованию закрытого ключа в качестве симметричного (путем его хеширования или использования KDF), поскольку его нельзя извлечь из хранилища ключей в закодированном виде.
Любая помощь будет принята с благодарностью.