Защита ключа ECC в приложении Android

Я сделал приложение для Android, используя пару ключей ECC. Когда я разработал его в прошлом году, я хотел создать ключ ECC в Android Keystore. К сожалению, этот ключ ECC используется для генерации сеансового ключа благодаря ECDH, и ECDH не поддерживается Android Keystore (об этом я уже говорил: ECDH с ключом в Android Key Store)

Я следовал рекомендациям: я создал ключ AES в Android KeyStore и использовал его для шифрования ключа ECC перед его сохранением в SharedPreferences. Android KeyStore гарантирует, что ключ AES не может быть извлечен, и что только мое приложение может использовать его для расшифровки ключа ECC.

Теперь у меня есть беспокойство, для которого я хотел бы получить ваши советы:

Что если кто-то установит мое приложение на рутированный телефон, получит APK, разкомпилирует и изменит его, чтобы распечатать ключ ECC после того, как он будет прочитан и расшифрован? У меня нет этого навыка, но я думаю, что некоторые хакеры имеют. Если это возможно, это означает, что защита, которую я использовал, неэффективна.

Использование ECDH не подлежит обсуждению в моем случае, так какое решение мне нужно для защиты моей пары ключей ECC?

Спасибо

1 ответ

Невозможно гарантировать, что ключ не может быть извлечен, если он не защищен безопасным оборудованием.

А в случае рутированного телефона злоумышленнику не нужно изменять и переустанавливать APK, чтобы использовать ваш ключ. Любое приложение на этом устройстве с правами root может подключиться к вашему приложению и вести себя так же. Даже в доверенной среде они могут использовать ваш аппаратный ключ. Единственное, что они не могут сделать, это извлечь ключ из устройства.

Вы можете прочитать относительно старую статью о TEE и AndroidKeyStore: http://www.cs.ru.nl/~joeri/papers/spsm14.pdf. Особенно "Обзор результатов по привязке устройства"

Чтобы уменьшить поверхность атаки, вы можете:

  • Защитите свой ключ с помощью предоставленного пользователем пароля вместе с ключом AndroidKeyStore AES
  • Используйте API SafetyNet для проверки целостности устройства: https://developer.android.com/training/safetynet/attestation
Другие вопросы по тегам