naver / naveridlogin-sdk-android

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

5.2.1에서 NaverIdLoginSDK.initialize 에서 발생하는 문제 #67

Closed k-hyeyun closed 1 year ago

k-hyeyun commented 1 year ago

일부 기기에서 NaverIdLoginSDK.initialize에서 강제종료 현상이 나타나고 있습니다. 현재 확인한 건 Galaxy Z Flip3 5G에서는 강제종료 현상이 나타나고, LG VELVET에서는 강제종료 현상은 나타나지 않고 있습니다.

W/AndroidKeysetManager: keyset not found, will generate a new one java.io.FileNotFoundException: can't read keyset; the pref value androidx_security_crypto_encrypted_prefs_value_keyset does not exist at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.readPref(SharedPrefKeysetReader.java:71) at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.readEncrypted(SharedPrefKeysetReader.java:89) at com.google.crypto.tink.KeysetHandle.read(KeysetHandle.java:105) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:311) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:287) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:238) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:160) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120) at com.navercorp.nid.oauth.EncryptedPreferences.init(EncryptedPreferences.kt:34) at com.navercorp.nid.oauth.EncryptedPreferences.access$init(EncryptedPreferences.kt:17) at com.navercorp.nid.oauth.EncryptedPreferences$encryptedPreferences$2.invoke(EncryptedPreferences.kt:30) at com.navercorp.nid.oauth.EncryptedPreferences$encryptedPreferences$2.invoke(EncryptedPreferences.kt:29) at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) at com.navercorp.nid.oauth.EncryptedPreferences.getEncryptedPreferences(EncryptedPreferences.kt:29) at com.navercorp.nid.oauth.EncryptedPreferences.get(EncryptedPreferences.kt:86) at com.navercorp.nid.oauth.NidOAuthPreferencesManager.getClientId(NidOAuthPreferencesManager.kt:53) at com.navercorp.nid.oauth.EncryptedPreferences.migration(EncryptedPreferences.kt:112) at com.navercorp.nid.oauth.EncryptedPreferences.setContext(EncryptedPreferences.kt:46) at com.navercorp.nid.NaverIdLoginSDK.initialize(NaverIdLoginSDK.kt:58) at com.hibud.whizkizmom.MainApp.onCreate(MainApp.kt:42) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1212) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6816) at android.app.ActivityThread.access$1500(ActivityThread.java:248) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2054) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7952) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

아래에는 z flip 3의 crashlytics 내용입니다. Caused by com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException Protocol message contained an invalid tag (zero).

com.navercorp.nid.oauth.EncryptedPreferences.init (EncryptedPreferences.kt:34)

0biny commented 1 year ago

manifest 에 dataExtractionRules이나 fullBackupContent 사용하시나요?

k-hyeyun commented 1 year ago

아니요, 사용하지 않습니다.

2022년 11월 25일 (금) 오후 4:41, yuan @.***>님이 작성:

manifest 에 dataExtractionRules이나 fullBackupContent 사용하시나요?

— Reply to this email directly, view it on GitHub https://github.com/naver/naveridlogin-sdk-android/issues/67#issuecomment-1327115273, or unsubscribe https://github.com/notifications/unsubscribe-auth/AS4JWPMLY2VVXVE3QILTVCDWKBUQZANCNFSM6AAAAAASJZOREQ . You are receiving this because you authored the thread.Message ID: @.***>

raccoondev85 commented 1 year ago

저도 같은 에러가 나타납니다 implementation 'com.navercorp.nid:oauth:5.2.1' 으로 가져왔습니다

k-hyeyun commented 1 year ago

implementation("androidx.security:security-crypto:1.1.0-alpha01") 이 버전으로 사용하니 강제종료 현상이 나타나지 않습니다.

DayeonLee-0 commented 1 year ago

안녕하세요.

네아로 SDK 담당자입니다.

네아로 SDK v5.4.0부터 Google tink 초기화 이슈에 대한 예외 처리가 추가되었습니다.

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

감사합니다.

james9dev commented 1 year ago

@DayeonLee-0 v5.4.0으로 변경하여 어제 배포 하였는데, 동일한 이슈가 발생하네요. OS: Android 12 Device: Galaxy Tab A8

혹시 앱에서 EncryptedSharedPreferences를 사용하고 있는데, 이것과 연관성이 있을가요?

private val sharedPreferences: SharedPreferences by lazy {
    val spec = KeyGenParameterSpec.Builder("*******************", KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
        .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
        .setKeySize(256)
        .build()

    val masterKey = MasterKey.Builder(mContext)
        .setKeyGenParameterSpec(spec)
        .build()

    EncryptedSharedPreferences.create(
        mContext,
        "******",
        masterKey, // masterKey created above
        EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
        EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
    )
}

Crash log

-------------------------------------------
Caused by com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException
While parsing a protocol message, the input ended unexpectedly in the middle of a field. This could mean either that the input has been truncated or that an embedded message misreported its own length.
-------------------------------------------

com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parsePartialFrom (GeneratedMessageLite.java:1566)
com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parseFrom (GeneratedMessageLite.java:1664)
com.google.crypto.tink.proto.Keyset.parseFrom (Keyset.java:957)
com.google.crypto.tink.integration.android.SharedPrefKeysetReader.read (SharedPrefKeysetReader.java:84)
com.google.crypto.tink.CleartextKeysetHandle.read (CleartextKeysetHandle.java:58)
com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read (AndroidKeysetManager.java:328)
com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset (AndroidKeysetManager.java:287)
com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build (AndroidKeysetManager.java:238)
androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:155)
androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:120)
com.navercorp.nid.preference.EncryptedPreferences.createSharedPreferences (EncryptedPreferences.kt:55)
com.navercorp.nid.preference.EncryptedPreferences.init (EncryptedPreferences.kt:40)
com.navercorp.nid.preference.EncryptedPreferences.access$init (EncryptedPreferences.kt:18)
com.navercorp.nid.preference.EncryptedPreferences$encryptedPreferences$2.invoke (EncryptedPreferences.kt:31)
com.navercorp.nid.preference.EncryptedPreferences$encryptedPreferences$2.invoke (EncryptedPreferences.kt:30)
kotlin.SynchronizedLazyImpl.getValue (LazyJVM.kt:74)
com.navercorp.nid.preference.EncryptedPreferences.getEncryptedPreferences (EncryptedPreferences.kt:30)
com.navercorp.nid.preference.EncryptedPreferences.get (EncryptedPreferences.kt:107)
com.navercorp.nid.oauth.NidOAuthPreferencesManager.getClientId (NidOAuthPreferencesManager.kt:54)
com.navercorp.nid.preference.EncryptedPreferences.migration (EncryptedPreferences.kt:133)
com.navercorp.nid.preference.EncryptedPreferences.setContext (EncryptedPreferences.kt:67)
com.navercorp.nid.NaverIdLoginSDK.initialize (NaverIdLoginSDK.kt:64)