tink-crypto / tink-crypto/tink-java
AEADBadTagException AndroidX Jetpack Security startup crash
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 305
- Forks
- 42
- PR merge metrics
- No merged PRs in 30d
Description
Help us help you
We're using Tink via AndroidX Jetpack Security v1.1.0-alpha06 and using the non-deprecated EncryptedSharedPreferences.create method that avoids the race condition when creating a global MasterKey.
The crash happens on: Device - Pixel 7 pro, OS - Android 14
Describe the bug:
The crash isn't consistently reproducible we have crash reports from different devices and across different Android SDK versions.
But according to this stack trace, it's happening on startup during Application.onCreate.
What was the expected behavior?
No crashes.
How can we reproduce the bug?
We're creating an EncryptedSharedPreference instance using the below snippet.
class SharedPreferencesDataSource(
context: Context,
filename: String
) {
companion object {
fun getEncryptedSharedPreferences(context: Context, filename: String) =
EncryptedSharedPreferences.create(
context,
"${filename}_secure",
getOrCreateKey(context),
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
private fun getOrCreateKey(context: Context) =
MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
}
}
Do you have any debugging information?
I've posted a reproducer below.
What version of Tink are you using?
Jetpack Security is using Tink v 1.8.0 behind the scenes.
Can you tell us more about your development environment?
N/A
Is there anything else you'd like to add?
I've read this comment, and mentioned
a) the encrypted keyset has been modified.
b) the current master key in keystore is not the same as the master key that was used to encrypt the keyset.
I'm not sure, though, how this can be caused? We're creating EncryptedSharedPreferences instances, but we never touch the MasterKey used to encrypt the data there.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Begin with the supplied reproducer and the Application.onCreate startup path; inspect EncryptedSharedPreferences.create, MasterKey.Builder, and the Tink v1.8.0 behavior described in the report. Done means the intermittent AEADBadTagException is explained and a verified fix or clear reproduction is recorded across the reported Android versions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, kotlin
- Domain
- cryptography, mobile, security
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100