Projects / AnyAudit
AnyAudit
Research demonstrator for audit evidence in AI-era software
What does a system need to record, and how, so that its behaviour can be audited afterwards by someone who did not build it?
Overview
AnyAudit extracts the audit-evidence layer from AnyDPP into a reusable library. It propagates a trace context through requests, writes versioned audit events that store only a hash of their payload, and appends them to a SHA-256 hash chain that can be verified end to end.
It deliberately uses a hash chain and not a blockchain: the goal is tamper evidence inside a system, not consensus between strangers.
A chain that shows tampering
- Event 1review.acceptedtrace: 7f3a-19c2payload hash: f5e10178previous: 00000000
- Event 2attribute.updatedtrace: 7f3a-19c2payload hash: 64f2c5a3previous: f5e10178
- Event 3passport.composedtrace: 7f3a-19c2payload hash: e298dad5previous: 64f2c5a3
- Event 4credential.issuedtrace: 7f3a-19c2payload hash: 77c82a49previous: e298dad5
Verify chain: Chain intact
Alter one event and verification fails from that point on.
Text description of the diagram
Four audit events in a row, each showing its trace identifier, the hash of its payload and the hash of the previous entry. When the second event is altered, its hash no longer matches what the third entry committed to, and verification reports the break.
Building blocks
Trace context
One identifier propagated through every request, job and service involved in an operation.
Audit event
A versioned event schema that stores a hash of the payload, not the payload itself.
Hash chain
Each entry commits to the previous one, so a changed or removed entry breaks every link after it.
Chain verification
A function that walks the chain and reports where it breaks.
Decorator and middleware
Ways to add auditing to existing code without rewriting it.
What an auditor gets
- 1
A reviewer accepts a value in a passport workflow.
- 2
The request carries a trace identifier through the API and the background job.
- 3
An audit event records who did what, under which version, with a hash of the payload.
- 4
Months later, an auditor verifies the chain and follows the trace from intake to publication.
How it differs
AnyAudit ≠ AnyTraceResearch prototype · unpublished
AnyTrace records the provenance of things in the world. AnyAudit records the behaviour of the software.
AnyTraceAnyAudit ≠ AnyVerifyResearch prototype · unpublished
AnyVerify judges whether evidence supports a claim. AnyAudit makes no judgement; it keeps a record that can be checked.
AnyVerifyAnyAudit ≠ AnyValidResearch prototype · unpublished
AnyValid asks an external authority. AnyAudit asks nobody; it proves its own record has not changed.
AnyValid
Status
Implemented as a research demonstrator, presented at anyaudit.eu, with the library in the AnyLAI repository.
Limitations
- Tamper evidence, not tamper prevention: a chain shows that something changed, it does not stop it.
- Not anchored outside the system that writes it.
- An audit record is evidence for an audit, not an audit result.