Как безопасно хранить модуль, публичный показатель и частный показатель на Android?

Я дал модуль, открытый показатель и частный показатель, и мне нужно надежно хранить эти значения на Android. Как я могу этого достичь?

В большинстве примеров создаются открытые и закрытые ключи без получения параметров n, d, e. Я дал эти значения n, e, d и хочу их надежно хранить, а затем использую эти значения для создания моего сертификата открытого ключа ICC, а также для подписи моих динамических данных.

Как я могу этого достичь?

2 ответа

Используйте систему хранилища ключей.

setEntry () позволяет хранить любой объект, реализующий KeyStore.Entry. Вы можете просто реализовать свой собственный подтип, если вам нужно хранить данные, которые не соответствуют значениям по умолчанию. (Однако есть RSAPrivateCrtKey, который вы можете хранить в PrivateKeyEntry.)

Вероятно, единственным безопасным хранилищем на устройстве Android будет Android Keystore System.

Ключевой материал никогда не входит в процесс подачи заявки.

а также

Материал ключа может быть привязан к защищенному оборудованию.

(см. http://developer.android.com/training/articles/keystore.html)

Проблема в том, что вы ограничены в том, что можете хранить в нем. Класс KeyChain позволяет хранить закрытые ключи и цепочки сертификатов. В то время как поставщик хранилища ключей поддерживает следующие типы записей: PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry в соответствии с документами. На практике попытка поместить экземпляр SecretKeyEntry вызывает исключение.

Я предлагаю положить две записи в хранилище ключей.

  1. KeyStore.PrivateKeyEntry, который можно создать с помощью PrivateKey (генерируется из модуля и частного показателя с использованием RSAPrivateKeySpec в сочетании с KeyFactory)
  2. KeyStore.TrustedCertificateEntry с вашим самозаверяющим сертификатом, который вы должны предварительно сгенерировать с помощью java keytool и загрузить во время выполнения из ресурсов. Это не должно быть секретным по определению.
Другие вопросы по тегам