android - 在没有密码的情况下从 AndroidKeyStore 获取 AES key 是否不安全?

标签 android security kotlin keystore android-keystore

我正在创建一个小型 Android 应用程序(API > 23)并且必须在没有登录屏幕的情况下进行。尽管如此,用户的数据应该被加密,为此我从 AndroidKeyStore 生成或加载一个 AES key :

fun generateSymmetricKey(keyAlias: String): Key {
        val keyStore = KeyStore.getInstance("AndroidKeyStore")
        keyStore.load(null)
        if (!keyStore.containsAlias(keyAlias)) {
            val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
            val keyGenParameterSpec =
                KeyGenParameterSpec.Builder(
                    keyAlias,
                    KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
                )
                    .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
                    .build()
            keyGenerator.init(keyGenParameterSpec)
            return keyGenerator.generateKey()
        }
        return keyStore.getKey(keyAlias,null)
    }

使用 getKey 方法,我在没有给定密码的情况下从 Keystore 加载存储的 key 。如果这会使 KeyStore 不安全,就会出现问题。或者Android自己在创建APK时是否为这个KeyStore设置了密码。

最佳答案

据我所知,只有同一个 App 可以访问其 KeyStore 对象。所以理论上,你应该是安全的。
但是请记住,当用户将您的应用程序安装在某种并行空间(例如 Parallels)中时,从操作系统的角度来看,该空间内的每个应用程序都是同一个应用程序。因此,这些应用程序也可以访问您的 KeyStore 条目。

关于android - 在没有密码的情况下从 AndroidKeyStore 获取 AES key 是否不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59897945/

相关文章:

php - 错误: WSDL - SOAP-ERROR: Parsing WSDL: Couldn't load from

使用 .dll 的安全隐患

android - 从 viewPager fragment 取回用户输入信息 (Kotlin)

android - Kotlin 扩展到第二个构造函数

android - Android Room强制通过自动增量值重写属性

android - 使用协程的 Firebase 实时快照监听器

Android DBFlow 不保存对象

Android CountDownTimer 减慢应用程序页面转换

android - 将 flavor list 放在哪里以使其与主 AndroidManifest 文件合并

php - MySQL 是否有针对基于 URL 的攻击的内置注入(inject)攻击保护?