Skip to content

Keep a key the caller never asked to attest - #287

Merged
JingMatrix merged 1 commit into
devfrom
fix/keep-key-without-challenge
Oct 19, 2026
Merged

JingMatrix merged 1 commit into
devfrom
fix/keep-key-without-challenge

Conversation

@JingMatrix

@JingMatrix JingMatrix commented Sep 2, 2026 •

Copy link
Copy Markdown
Owner

A request with no ATTESTATION_CHALLENGE comes back from the real HAL as a single certificate that carries no attestation extension -- self-signed when the key can sign, empty-signatured when it cannot -- which is what KeyCreationResult requires. Re-signing that leaf failed, so the fallback minted the whole key in the TA: no attestation gained, the app's key material moved out of the real TEE, an auth-bound key left to a TA that holds no device HMAC key, and up to 735ms of software keygen inside a generateKey that keystore2 times.

No challenge now keeps the real key, the same answer a symmetric key's empty chain already gets. Across the logs in #306, #279 and #313 that is 88 of 261 patch attempts -- 9% to 32% of a target app's keys -- while the other 173 all carried a challenge and patched normally. Generation still covers a chain we genuinely failed to re-root.

A request with no ATTESTATION_CHALLENGE comes back from the real HAL as a single certificate that
carries no attestation extension -- self-signed when the key can sign, empty-signatured when it
cannot -- which is what KeyCreationResult requires. Re-signing that leaf failed, so the fallback
minted the whole key in the TA: no attestation gained, the app's key material moved out of the real
TEE, an auth-bound key left to a TA that holds no device HMAC key, and up to 735ms of software
keygen inside a generateKey that keystore2 times.

No challenge now keeps the real key, the same answer a symmetric key's empty chain already gets.
Across the logs in #306, #279 and #313 that is 88 of 261 patch attempts -- 9% to 32% of a target
app's keys -- while the other 173 all carried a challenge and patched normally. Generation still
covers a chain we genuinely failed to re-root.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant