{"version":"2.1.248","anchor":"telemetry-events-can-be-signed-with-a-device-key","canonical_anchor":"telemetry-events-can-be-signed-with-a-device-key","heading":"Telemetry events can be signed with a device key","tier":"soon","area":"Telemetry","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.248\/e\/telemetry-events-can-be-signed-with-a-device-key","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.248","markdown":"### Telemetry events can be signed with a device key\n\nAnalytics events can be signed with a device key tying them to your machine.\n\n**What**\n\nClaude Code has new code to attach a device attestation to the analytics envelopes it sends, so an event can be tied to a real device and not just an account. The event body is canonicalized to a fixed JSON form, hashed and signed, and the signature travels with the event. Nothing in this build turns it on: there is no flag and no settings key, the signing module is loaded at runtime and the path is inert whenever that load fails, and even with the module present signing only happens if the account has a registered device key, which is decided server-side.\n\n**Details**\n\n- The canonicalized body is hashed with sha256 and signed with ECDSA in `ieee-p1363` form; the envelope carries `kid`, `signature` and `jcs_lib`.\n- Payload keys are normalised and stray lone-surrogate escapes are scrubbed before signing; the canonicalizer refuses values that have no JSON form and non-finite numbers rather than emitting them.\n- Ids containing a NUL byte skip signing entirely.\n- Skips are recorded under the feature name `client_event_signer` with a reason: `no_device_key`, `load_failed` for a key that is present but unreadable, or `bound_elsewhere` for a key belonging to a different device.\n- A failed module load emits its own telemetry with a `module_load_failed` cause plus diagnostic output reading `[clientEventSigner] the signer module did not load: `.\n- Any signing failure falls back to sending the plain unsigned payload, so telemetry is never blocked by this path.\n- None of this code or these strings exist in v2.1.247.\n\n**Evidence**\n\n`anthropic.ccr.client_event.v1`, `[clientEventSigner] the signer module did not load: `\n\n- Area: Telemetry\n- Tier: Nothing to try yet\n- Useful: 2\/5\n- Signal: 5\/5\n- Present in the build but not switched on"}