11 September 2026 · 5 min read

Your upload key is disposable

Under Play App Signing the two keys are different classes: the upload key proves you are you and can be reset; the signing key is what devices trust. In 2026 the split sharpened.

Every Android release I ship passes through two keys, and for years the documentation described them as if they were siblings. They are not. Under Play App Signing, the upload key does one job: it proves to Google that the bundle came from the account that owns the app, and if it is lost or leaked it can be reset from the console in a day. The app signing key does a different job: it is what a device checks when it decides whether an update is really an update, and on older Android versions its loss or compromise is permanent, because the devices in the field will trust nothing else. Two keys, two security classes, and in 2026 Google sharpened the difference in a way that moves almost all of the operational risk onto the key you handle every release.

Two keys, two classes

The Play App Signing documentation is clear once you read it for the distinction. The upload key is yours: an RSA key of at least 2,048 bits in a keystore you hold, used to sign the bundle before upload, used by Google to verify your identity, and resettable if compromised or lost by generating a new one, exporting its certificate and requesting a reset in the console. The app signing key is Google's to hold: it signs the APKs that reach devices, you can let Google generate it or upload your own, and the page's warning is unambiguous about the alternative, that a key you manage yourself outside Play App Signing cannot be reset if you lose it.

The key hierarchy under Play App Signing, and which devices verify which key Three boxes. The upload key, held by the developer, signs the bundle; Google verifies it and it can be reset. The classical app signing key, held by Google, signs the APKs that devices on Android 7 through 16 verify. The quantum-ready hybrid key, RSA-4096 plus ML-DSA-65, also held by Google, signs for devices on Android 17 and above, which strictly enforce it. Arrows show the bundle flowing from developer to Google and the signed APKs flowing to the two device populations. One key you hold, two keys Google holds Upload key held by you resettable bundle Google Play classical signing key held by Google hybrid key RSA plus ML-DSA-65 held by Google Android 7 to 16 verify the classical key Android 17 and above enforce the hybrid key The key you touch every release can be replaced; the ones devices trust never leave Google. new apps are enrolled in hybrid signing with Google-generated keys by default
Source: the Play App Signing help page, September 2026; the device populations are the enforcement tiers it describes.

What changed in 2026

The 2026 change is the introduction of quantum-ready hybrid signing. New apps are now enrolled by default with Google-generated keys, and the app signing key becomes a pair: a classical RSA 4096-bit key and a post-quantum ML-DSA-65 key, combined so that a device can verify either. Developers can request an annual key upgrade that applies to all installs on Android 17 and above, and only Android 17, API level 37, and later strictly enforces the upgraded hybrid key. The page also notes a limitation that matters for release engineering: apps using hybrid signing are excluded from v4 signing, the signature scheme that supports optimised distribution on Android 11 and later, because the two are not yet compatible.

Read from the seat of someone who owns release engineering for a set of apps, the change does two things. It removes the last reason to hold your own app signing key, because a Google-generated hybrid key is now the default and the post-quantum half is something no team is going to generate and rotate correctly by hand. And it makes the enforcement of the new key a property of the device population rather than of the app, which means the fleet decides how much the new key matters. The fleet, per the version distribution compiled from April 2026 data, is where the honest picture is.

Share of active Android devices in each signing enforcement tier, April 2026 Horizontal bars in percent of active devices: Android 13 to 16, where the latest classical key is enforced, 68.9 percent; Android 7 to 12, where verification runs through Play Protect and the classical key, 27.7 percent; below Android 7, 3.4 percent; Android 17 and above, where the hybrid key is enforced, zero percent, still in beta at the data date. The devices that enforce the new key do not exist yet Percent of active Android devices by version range, April 2026 distribution Android 13 to 16 68.9 Android 7 to 12 27.7 Below Android 7 3.4 Android 17 and above 0, in beta at the data date Four pixels per percentage point. The hybrid key is enforced only on the empty bar. shares are derived from the cumulative figures on the source page
Source: derived from the cumulative distribution on apilevels.com, updated May 2026 with April 2026 data; the tier boundaries follow the Play App Signing enforcement described in the text.

The distribution says the new key is, for now, a future-proofing measure and not an operational one: in April 2026 no active device enforced it, over two thirds of devices enforced the latest classical key, and a quarter were on versions where the classical key is verified through Play's own protections. The hybrid key will matter as Android 17 devices ship, and by then the apps enrolled today will already be signed with it, which is the point of doing it by default.

The upload-key firewall

If the app signing key is Google's and the devices' concern, then everything the release process can get wrong is concentrated in the upload key, and the practice I call the upload-key firewall follows. Treat the upload key as a disposable credential. Rotate it on any suspicion, not on proof; the reset is a form and a day, and the cost of an unnecessary rotation is nothing. Keep it in the continuous integration system's secret store and nowhere else: not in a repository, not in a shared drive, not in a keystore file on a laptop that also has the source code. And never let the two keys share a machine, a person or a backup: the app signing key should not be held at all, and if a legacy app's key is still held, it lives in a place the release pipeline cannot reach.

APK signature schemes by the Android version that introduced them, through the 2026 hybrid signing change A timeline of signature schemes: v1 JAR signing from the beginning; v2 in Android 7.0; v3 in Android 9, with key rotation; v4 in Android 11, for optimised distribution; v3.1 in Android 13; and in 2026, quantum-ready hybrid signing enforced from Android 17, which is not yet compatible with v4. signature scheme key change from the start v1, JAR signing Android 7.0 v2, whole-file Android 9 v3, key rotation Android 11 v4, streaming Android 13 v3.1 2026, Android 17 hybrid key Each scheme changed what a device checks; 2026 is the first to change the key's mathematics. hybrid signing is not yet compatible with v4, so those apps lose optimised distribution
Source: the Android APK signing documentation for the scheme versions and the Play App Signing help page for the 2026 change.

The firewall is a practice, not a product, and it has a few specific rules. The upload keystore is generated on the build machine or in the secret store's own key generation, never on a personal laptop, and its password lives in the same secret store under a separate entry. The certificate, which is public, is what gets registered with Play; the keystore itself never leaves the pipeline. The reset procedure is rehearsed once, on a test app, so that the day it is needed for a real one it takes an hour and not a weekend. And the release process records which upload key signed which release, so that a rotation is a dated event in the log rather than a mystery a year later.

What still cannot be reset

The honest exception is the legacy app. An app published before Play App Signing existed, still signed with a key its developers hold, is outside the model: its signing key is the one devices trust, Google does not hold a copy, and the help page's warning applies in full. For those apps the right move is to enrol, which for an existing app means uploading the current key to Google once, under the enrolment's protections, and then treating it as gone from the team's hands. The firewall's rules apply from that day. Until it is done, the legacy key is an asset that a lost laptop or a departed colleague can destroy, and the annual key upgrade that the hybrid scheme offers cannot reach it.

There is also a class of device the new key will never help, and it is the quarter of the fleet on Android 7 to 12. Those devices verify the classical key, and they will keep verifying it for as long as they are in use, which for budget hardware in the markets I ship to is years. The hybrid key protects the future fleet against a threat that does not exist yet; the classical key protects the present fleet against threats that do, and Google's holding both is what makes the arrangement work. The upload key, meanwhile, protects neither. It protects the account, for one release at a time, and that is why it can be thrown away.

Why the split matters more now

For a small team shipping several apps under one account, the practical effect of the 2026 change is that the risk profile got simpler. There used to be two keys to protect, one of them irreplaceable. Now there is one key to protect, it is replaceable, and the irreplaceable one is held by a party whose job is to hold it, in a form, hybrid post-quantum signing, that a small team could not produce on its own. The right response is not to relax about the upload key but to treat it as what it has become: the only credential in the release process that a mistake can expose, and one whose exposure costs a day. Disposable is the correct word, and a disposable credential is handled by assuming it will be disposed of.

AndroidRelease EngineeringPost-Quantum
All writing

Written by Mohd Shayan

Get new posts by email

Occasional essays on engineering, AI, and building for the people technology leaves behind.

One email per new post. Unsubscribe any time.

Subscribe with RSS