Skip to content

Introduce DeviceAttestationSoftware.#1663

Merged
sorotokin merged 1 commit intomainfrom
device-attestation-software
Mar 30, 2026
Merged

Introduce DeviceAttestationSoftware.#1663
sorotokin merged 1 commit intomainfrom
device-attestation-software

Conversation

@davidz25
Copy link
Copy Markdown
Contributor

@davidz25 davidz25 commented Mar 28, 2026

Right now our DeviceCheck machinery only works on real iOS devices (excluding the iOS simulator) and Android devices (real or emulator) and we need them to work for the web (for the web version of Multipaz Wallet) and it would also be nice if they worked for the iOS simulator.

As such, introduce DeviceAttestationSoftware which can be generated in any environment which lacks hardware-backed attestation. This is inherently insecure but the backend has access to the attestation so it can provide a subset of functionality to e.g. web clients. For example, for Multipaz Wallet we can allow access to shared state (bound to e.g. a Google account) for web clients but refuse access to e.g. key attestation services.

Also introduce the notion of a "proof of secret" embedded in this new attestation. This is inhererently insecure (an attacker can exfiltrate this client-side secret from the binary or app process) and HW-backed attestation should be preferred but in an environment without HW-backed attestation this adds a little bit of security.

Change DeviceCheck for JVM so it uses DeviceAttestationSoftware and also DeviceCheck for iOS when running on the iOS simulator. This way it's actually possible to develop Multipaz Wallet using the iOS simulator when using its dev backend configured to accept software attestations.

Add a new screen to Compose TestApp to easily test both device attestations and assertions, both strict and non-strict.

This also uncovered a bug in ClientRegistrationImpl where we would always generate empty challenges. Fix this.

Test: Unit tests for DeviceAttestationSoftware.
Test: Manually tested on Android and iOS.

@davidz25 davidz25 requested a review from sorotokin March 28, 2026 20:19
@davidz25 davidz25 force-pushed the device-attestation-software branch 5 times, most recently from 3c294ef to 8659eb4 Compare March 29, 2026 20:32
Right now our DeviceCheck machinery only works on real iOS devices
(excluding the iOS simulator) and Android devices (real or emulator)
and we need them to work for the web (for the web version of Multipaz
Wallet) and it would also be nice if they worked for the iOS
simulator.

As such, introduce `DeviceAttestationSoftware` which can be generated
in any environment which lacks hardware-backed attestation. This is
inherently insecure but the backend has access to the attestation so
it can provide a subset of functionality to e.g. web clients. For
example, for Multipaz Wallet we can allow access to shared state
(bound to e.g. a Google account) for web clients but refuse access to
e.g. key attestation services.

Also introduce the notion of a "proof of secret" embedded in this new
attestation. This is inhererently insecure (an attacker can exfiltrate
this client-side secret from the binary or app process) and HW-backed
attestation should be preferred but in an environment without
HW-backed attestation this adds a little bit of security.

Change DeviceCheck for JVM so it uses `DeviceAttestationSoftware` and
also DeviceCheck for iOS when running on the iOS simulator. This way
it's actually possible to develop Multipaz Wallet using the iOS
simulator when using its dev backend configured to accept software
attestations.

Add a new screen to Compose TestApp to easily test both device
attestations and assertions, both strict and non-strict.

This also uncovered a bug in `ClientRegistrationImpl` where we would
always generate empty challenges. Fix this.

Test: Unit tests for DeviceAttestationSoftware.
Test: Manually tested on Android and iOS.
Signed-off-by: David Zeuthen <zeuthen@google.com>
@davidz25 davidz25 force-pushed the device-attestation-software branch from 8659eb4 to f8d44f6 Compare March 30, 2026 20:28
@sorotokin sorotokin merged commit fc120c7 into main Mar 30, 2026
3 checks passed
@sorotokin sorotokin deleted the device-attestation-software branch March 30, 2026 21:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants