加密的共享首选项会导致 Android 9 和 Android 10 上发生 ANR

问题描述 投票:0回答:1

我正在使用加密共享首选项来加密首选项数据。我按以下方式使用它:

val masterKey = MasterKey.Builder(context)
                .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
                .build()

        val sharedPreferences = EncryptedSharedPreferences.create(
                context,
                prefName,
                masterKey,
                EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
                EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
        )

我从我的应用程序类访问这个安全共享的首选项实例。这导致我的生产应用程序出现 ANR 问题。

at sun.misc.Unsafe.park (Native method)
  at java.util.concurrent.locks.LockSupport.park (LockSupport.java:190)
  at java.util.concurrent.CompletableFuture$Signaller.block (CompletableFuture.java:1723)
  at java.util.concurrent.ForkJoinPool.managedBlock (ForkJoinPool.java:3446)
  at java.util.concurrent.CompletableFuture.waitingGet (CompletableFuture.java:1752)
  at java.util.concurrent.CompletableFuture.get (CompletableFuture.java:1923)
  at android.security.KeyStore.begin (KeyStore.java:1104)
  at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized (AndroidKeyStoreCipherSpiBase.java:248)
  at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit (AndroidKeyStoreCipherSpiBase.java:109)
  at javax.crypto.Cipher.tryTransformWithProvider (Cipher.java:2984)
  at javax.crypto.Cipher.tryCombinations (Cipher.java:2891)
  at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider (Cipher.java:2796)
  at javax.crypto.Cipher.chooseProvider (Cipher.java:773)
  at javax.crypto.Cipher.init (Cipher.java:1143)
  at javax.crypto.Cipher.init (Cipher.java:1084)
  at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encryptInternal (AndroidKeystoreAesGcm.java:84)
  at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encrypt (AndroidKeystoreAesGcm.java:68)
  at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.validateAead (AndroidKeystoreKmsClient.java:248)
  at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead (AndroidKeystoreKmsClient.java:165)
  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey (AndroidKeysetManager.java:267)
  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build (AndroidKeysetManager.java:236)
  at androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:160)
  at androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:120)
  at my.application.example.sharedpref.PrefProvider.getSecuredSharedPref (PrefProvider.java:15)

此行为观察器主要适用于 Android 9 和 10。

cipher.init 周围报告了 Andorid 错误。有什么办法可以解决这个问题吗?它导致我的应用程序在 Playstore 上出现不良行为。

android encryption android-anr-dialog encrypted-shared-preference
1个回答
0
投票

我看到他们已经修复了:github.com/tink-crypto/tink/issues/638 –

© www.soinside.com 2019 - 2024. All rights reserved.