Security FAQ
What protects your account, your case studies and your hashes
Plain answers about how sign-in works, why one client's submissions are unreachable to another, what the published hashes do and do not prove, and the exact steps to verify any of it without trusting us.
Three pillars
Identity, isolation, integrity
Identity
Confirmed email or Google, no anonymous accounts, short-lived revocable sessions.
Isolation
Database-level row rules and per-user private storage folders with signed, expiring links.
Integrity
Hash-linked records, recomputed in your browser, downloadable as a plain file.
Questions
Asked and answered
How does signing in to the client portal work?
Sign-in is email and password, or Google. Passwords are never stored by this application: they are held as salted hashes by the managed authentication service, and the app only ever receives a short-lived session token.
New accounts are not auto-confirmed and anonymous sign-ups are disabled, so an address has to be a real, confirmed mailbox before it can hold data.
Sessions expire and can be revoked server-side. A stolen token is therefore useful for a bounded window, not forever.
Can another client see my case studies, plates or evidence files?
No. Every row you create carries your own user id, and database-level row security allows read, update and delete only where that id equals the id in your session. The rule is enforced by the database, not by the page you are looking at — so it holds even if a request is crafted by hand.
Uploaded plates go into a private bucket under a folder keyed to your user id. They are never publicly readable: the portal issues a short-lived signed link, valid for fifteen minutes, only for your own files.
Administrators can read submitted case studies in order to publish them. That is a deliberate, disclosed capability, not a side effect.
What do the published hashes actually prove?
They prove that a record has not changed since it was written, and which actor wrote it. Each record hashes the record before it, so rewriting one entry means forging every entry after it in the same instant.
They do not prove that the decision inside a record was correct. Judgement stays with accountable people; the chain only guarantees the account of what happened cannot be quietly revised.
How do I verify a hash myself, without trusting this site?
Open the proof lab and download the case-study proof file. Each digest is SHA-256 over prev|case|seq|at|actor|event|verdict|detail — recompute the first one, feed it in as prev for the second, and continue to the chain head.
The chains on that page are computed in your own browser with the Web Crypto API on page load, so what you see was derived on your device rather than sent by our server.
For the evidence register, the quantum page recomputes the same root under SHA-256, SHA-384 and SHA-512, plus a Merkle tree version, and lets you download all of them.
Is there a private key I have to trust?
No. Attestation bundles carry no signature: verification is recomputation from the digests and outcomes inside the file. There is no key to steal, expire, or be broken by a future quantum computer.
The attestation tag shown beside each chain head is simply a second-family digest (SHA-384) over that head, so the same history can be pinned under a stronger hash without re-chaining anything.
What about quantum computers?
Key agreement is the exposed part, and it is served with hybrid X25519MLKEM768 wherever the browser supports it. Hashing is only dented by Grover, and roots are already published under three digest families.
The full primitive-by-primitive posture, parameter sizes and migration steps are on the quantum posture page.
What is deliberately not claimed?
No system is unbreakable, and nothing here is described as impossible to hack. What is claimed is narrower and checkable: access is scoped per user by the database, files are private and only reachable through short-lived links for their owner, and integrity is verifiable by recomputation rather than trust.
One accepted tradeoff is disclosed openly: the role-check function runs with elevated rights so access rules do not recurse. It reads no application data and returns only whether a role is held.
How do I report a vulnerability?
Use the compliance contact on the trust and audit register. Include the exact request, the response you saw, and the time. Reports about access scoping and file links are prioritised over cosmetic findings.
Verify it
Where to check each claim
- Case-study chains and the downloadable proof file: proof lab
- Roots under three digest families and the migration checklist: quantum posture
- Scope of claims, refusals and the compliance contact: trust and audit register
- Your own submissions and their private plates: client portal