Android Keystore, безопасное значение ключа

Я изучаю, используя безопасный / улучшенный Keystore, представленный в Android 4.3.

Я хотел бы сохранить ключ шифрования внутри этого хранилища ключей, этот ключ используется для шифрования sqlite db и значений, содержащихся в моих общих предпочтениях.

Когда я рассмотрю образец KeyStore в SDK, я вижу следующее:

public static final String ALIAS = "my_key" 

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

Псевдоним не является конфиденциальной информацией. Каждое хранилище ключей связано с паролем, и каждый ключ имеет свой (дополнительный) пароль. Это ценности, которые должны быть сохранены.

Без пароля (ов) злоумышленник не может прочитать ваш ключевой материал, несмотря на знание псевдонима.

Ниже приведен ответ на 4.3+. В этом выпуске были внесены большие изменения в классы KeyStore & KeyChain. См. Здесь для получения дополнительной информации

Keystore к Keystore ограничен UID – вашему приложению выделяется UID при установке.

Это то, что предотвращает доступ других приложений / процессов к вашему ключу пары / закрытому ключу . Деймонд-хранилище ключей обеспечит это.

Это может потребовать от устройства дополнительную шину. См. http://developer.android.com/reference/android/security/KeyPairGeneratorSpec.Builder.html#setEncryptionRequired ()

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

@Duncans отвечает, что вам кажется, что вам нужно поддерживать пароль. Я бы посоветовал вам создать пару ключей, используя хранилище ключей, а затем использовать это для шифрования ключа AES, который вы можете использовать для шифрования всего, что вы хотите (гораздо быстрее, чем использование ключа RSA)

Вы можете использовать секретный ключ, поддерживаемый хранилищем оборудования / сортировки, как keyStore.getEntry(alias, null); И не передавать какой-либо пароль.

См. SecretKeyWrapper.java для хорошего примера этого

Intereting Posts
Макет с кнопками по кругу? Обновление до SDK 21 – Ошибка раздувания класса android.support.v7.internal.widget.ActionBarContainer Подключить 2 или более Android-клиентов напрямую Rails api и аутентификация собственного мобильного приложения Переход общих элементов Android до 21 Как обновить содержимое вкладки фрагментов при нажатии кнопки Java Dates – Какой правильный класс использовать? Как открыть URL-адрес в браузере Android из моего приложения? Есть ли функция в Android, аналогичная функции «int main» в C / C ++, которая содержит основной цикл программы? Пересечение с помощью Eclipse Загрузка с камеры и галереи не работает должным образом во всех версиях Плотность xxhdpi, добавленная в API 16, что в <16, если я предоставляю только ресурсы xxhdpi? Центр текста в виде списка Как использовать учетную запись google в своем собственном приложении для Android? Преобразование JSON в вложенный объект (общий объект) с помощью GSON