Skip to content
Tax60

Legal

Commitment signing keys

Every record a Tax60 device uploads is hashed on the device; the server returns a commitment containing that hash, the hash of the user’s previous commitment, the server’s receipt time, and an Ed25519 signature over all three. This page lists every public key those signatures are made with. A key is registered before it signs its first commitment and is retired, never removed, when it is rotated, so a commitment made under a retired key can still be verified.

Active and retired keys

No signing key has been activated yet. The first key appears here, with its identifier and validity start, when the service signs its first commitment.

This table is read from the service’s public key registry, re-read at most every 5 minutes. The same registry is readable by anyone at https://wseuvcinxyooalhkpicf.supabase.co/rest/v1/commitment_signing_keys?select=key_id,algorithm,public_key,active_from,retired_at&order=active_from.asc,key_id.asc with the service’s public API key, so this page can be checked against the source at any time.

Verifying a commitment without Tax60

  1. Decrypt the record on a device that holds the user’s key, or take a record the user has already exported.
  2. Compute the record’s SHA-256 hash and confirm it equals the hash inside the commitment stored beside it.
  3. Look up the commitment’s key identifier in the table above and verify the Ed25519 signature over the commitment’s contents with that public key. The receipt time inside the commitment is the time Tax60’s server first saw that hash.
  4. Confirm the commitment’s previous-hash field equals the hash of the user’s preceding commitment. Because each commitment includes the previous one, an inserted, altered, or removed record breaks the chain.

The commitment format and what the chain establishes are described in Methodology Section 9.