naver / naveridlogin-sdk-android

네이버 아이디로 로그인 SDK (안드로이드)
https://developers.naver.com/docs/login/overview/
Apache License 2.0
114 stars 29 forks source link

[Bug Report] android.security.KeyStoreException 발생 #97

Closed tnfy10 closed 1 year ago

tnfy10 commented 1 year ago

Bug Report

재현 환경

앱 실행 단계에서 크래시 발생

사용중인 네아로 SDK 버전

5.7.0

Android 버전

Android 13

재현되는 기기 모델명

Galaxy S21 5G

이슈

이슈 명세

NaverIdLoginSDK.initialize 호출 시 발생

기대한 결과

초기화 후 앱 정상 실행

실제 결과

실행 단계에서 초기화 도중 크래시 발생

재현 시나리오

앱 실행

Stack trace

Caused by javax.crypto.AEADBadTagException:
       at android.security.keystore2.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:617)
       at javax.crypto.Cipher.doFinal(Cipher.java:2114)
       at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decryptInternal(AndroidKeystoreAesGcm.java:118)
       at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decrypt(AndroidKeystoreAesGcm.java:101)
       at com.google.crypto.tink.KeysetHandle.decrypt(KeysetHandle.java:919)
       at com.google.crypto.tink.KeysetHandle.readWithAssociatedData(KeysetHandle.java:804)
       at com.google.crypto.tink.KeysetHandle.read(KeysetHandle.java:785)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readMasterkeyDecryptAndParseKeyset(AndroidKeysetManager.java:381)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:297)
       at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:169)
       at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:130)
       at com.navercorp.nid.preference.EncryptedPreferences.createSharedPreferences(EncryptedPreferences.kt:57)
       at com.navercorp.nid.preference.EncryptedPreferences.init(EncryptedPreferences.kt:47)
       at com.navercorp.nid.preference.EncryptedPreferences.access$init(EncryptedPreferences.kt:18)
       at com.navercorp.nid.preference.EncryptedPreferences$encryptedPreferences$2.invoke(EncryptedPreferences.kt:31)
       at com.navercorp.nid.preference.EncryptedPreferences$encryptedPreferences$2.invoke(EncryptedPreferences.kt:30)
       at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
       at com.navercorp.nid.preference.EncryptedPreferences.getEncryptedPreferences(EncryptedPreferences.kt:30)
       at com.navercorp.nid.preference.EncryptedPreferences.get(EncryptedPreferences.kt:109)
       at com.navercorp.nid.oauth.NidOAuthPreferencesManager.getClientId(NidOAuthPreferencesManager.kt:54)
       at com.navercorp.nid.preference.EncryptedPreferences.migration(EncryptedPreferences.kt:135)
       at com.navercorp.nid.preference.EncryptedPreferences.setContext(EncryptedPreferences.kt:69)
       at com.navercorp.nid.NaverIdLoginSDK.initialize(NaverIdLoginSDK.kt:86)
       at a.b.c.d.MainApplication.onCreate(MainApplication.kt:19)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1266)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7614)
       at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2400)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8757)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Caused by android.security.KeyStoreException: Signature/MAC verification failed (internal Keystore code: -30 message: In KeystoreOperation::finish

Caused by:
    0: In finish: KeyMint::finish failed.
    1: Error::Km(ErrorCode(-30)))
       at android.security.KeyStore2.getKeyStoreException(KeyStore2.java:418)
       at android.security.KeyStoreOperation.handleExceptions(KeyStoreOperation.java:78)
       at android.security.KeyStoreOperation.finish(KeyStoreOperation.java:128)
       at android.security.keystore2.KeyStoreCryptoOperationChunkedStreamer$MainDataStream.finish(KeyStoreCryptoOperationChunkedStreamer.java:228)
       at android.security.keystore2.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:181)
       at android.security.keystore2.AndroidKeyStoreAuthenticatedAESCipherSpi$BufferAllOutputUntilDoFinalStreamer.doFinal(AndroidKeyStoreAuthenticatedAESCipherSpi.java:396)
       at android.security.keystore2.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:609)
       at javax.crypto.Cipher.doFinal(Cipher.java:2114)
       at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decryptInternal(AndroidKeystoreAesGcm.java:118)
       at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decrypt(AndroidKeystoreAesGcm.java:101)
       at com.google.crypto.tink.KeysetHandle.decrypt(KeysetHandle.java:919)
       at com.google.crypto.tink.KeysetHandle.readWithAssociatedData(KeysetHandle.java:804)
       at com.google.crypto.tink.KeysetHandle.read(KeysetHandle.java:785)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readMasterkeyDecryptAndParseKeyset(AndroidKeysetManager.java:381)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:297)
       at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:169)
       at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:130)
       at com.navercorp.nid.preference.EncryptedPreferences.createSharedPreferences(EncryptedPreferences.kt:57)
       at com.navercorp.nid.preference.EncryptedPreferences.init(EncryptedPreferences.kt:47)
       at com.navercorp.nid.preference.EncryptedPreferences.access$init(EncryptedPreferences.kt:18)
       at com.navercorp.nid.preference.EncryptedPreferences$encryptedPreferences$2.invoke(EncryptedPreferences.kt:31)
       at com.navercorp.nid.preference.EncryptedPreferences$encryptedPreferences$2.invoke(EncryptedPreferences.kt:30)
       at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
       at com.navercorp.nid.preference.EncryptedPreferences.getEncryptedPreferences(EncryptedPreferences.kt:30)
       at com.navercorp.nid.preference.EncryptedPreferences.get(EncryptedPreferences.kt:109)
       at com.navercorp.nid.oauth.NidOAuthPreferencesManager.getClientId(NidOAuthPreferencesManager.kt:54)
       at com.navercorp.nid.preference.EncryptedPreferences.migration(EncryptedPreferences.kt:135)
       at com.navercorp.nid.preference.EncryptedPreferences.setContext(EncryptedPreferences.kt:69)
       at com.navercorp.nid.NaverIdLoginSDK.initialize(NaverIdLoginSDK.kt:86)
       at a.b.c.d.MainApplication.onCreate(MainApplication.kt:19)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1266)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7614)
       at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2400)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8757)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

Reference

DayeonLee-0 commented 1 year ago

안녕하세요.

네아로 SDK 담당자입니다.

네아로 SDK v5.8.0에서 AEADBadTagException 대한 예외 처리가 추가되었습니다.

개발에 참고 부탁드립니다.

감사합니다.