Я поддерживаю собственные приложения для iOS и Android.
Теперь я сталкиваюсь с ошибкой, когда приложение пытается установить значения в хранилище ключей на Pixel3a.
Есть ли способ избежать этой ошибки?
или Есть ли у вас документ, сколько доступа к связке ключей приемлемо для приложения?
Проблема
Не удалось установить значение для приложения цепочки для ключей, которое работает некоторое время.
Если возникла проблема, то приложение не может установить значение навсегда.
Ограничение
Моему приложению необходим непрерывный доступ к цепочке для ключей в автономном режиме, чтобы отслеживать местоположение клиента с помощью геолокации.
Моё приложение получает и устанавливает значение цепочки для ключей, когда произошло событие геолокации.
Может быть, это это причина, по которой я получаю TOO_MANY_OPERATIONS, но я хочу узнать фактическое число, сколько я мог бы получить доступ к связке ключей.
Расследование
Logcat показывает мне подсказку, но я не могу найти решение ...
E//vendor/bin/hw/android.hardware.keymaster@4.0-service.citadel: BeginOperation : device response error code: TOO_MANY_OPERATIONS
D/keymaster_worker: Trying to prune operation 0x0
E/keymaster_worker: Failed to abort pruneable operation 0x0, error: -28
/id.my.maintain.app E/RNKeychainManager: Unknown error: Could not encrypt value for service @THE_KEY, message: Keystore operation failed
Я нашел официальный документ https://source.android.com/security/keystore/tags поэтому я предполагаю, что причиной является конфигурация MAX_USES_PER_BOOT или MIN_SECONDS_BETWEEN_OPS, но я не смог получить значение.
Также я нашел android исходный код. https://android.googlesource.com/platform/system/security/+/refs/heads/master/keystore/keymaster_enforcement.cpp
Но я не знаком с архитектурой C ++ и android, я предполагаю, что следующее происходит исключение.
if (min_ops_timeout != UINT32_MAX) {
if (!access_time_map_.UpdateKeyAccessTime(keyid, get_current_time(), min_ops_timeout)) {
ALOGE("Rate-limited keys table full. Entries will time out.");
return ErrorCode::TOO_MANY_OPERATIONS;
}
}
if (update_access_count) {
if (!access_count_map_.IncrementKeyAccessCount(keyid)) {
ALOGE("Usage count-limited keys table full, until reboot.");
return ErrorCode::TOO_MANY_OPERATIONS;
}
}
Но я не видел сообщений журнала Rate-limited keys table full. Entries will time out.
или Usage count-limited keys table full, until reboot.
, так есть ли какой-нибудь исходный код, который я должен исследовать?