Compliance

Logs your auditor can read with you in the room.

Compliance frameworks ask for one thing from a log: that you can prove it has not changed. TN signs every record at the source and links each one to the last, so tampering, deletion, and gaps are detectable at verification time. The same record stays sealed to the readers you choose.

What makes an audit log tamper-evident?

A plain log file is a list of lines. Anyone with write access can edit a line, delete a row, or insert one after the fact, and nothing in the file betrays the change. Provider-managed encryption at rest does not help here: it protects the bytes from an outside reader, not from a privileged insider who can rewrite history.

A tamper-evident log is different. It does not try to prevent edits. It makes every edit detectable. TN does this with two mechanisms working together on each entry.

Together these make the log append-only in evidence, not just in policy. The history is fixed the instant it is written, and any later departure from that history shows up when the chain is verified.

How the chain is built

TN models a log as an ordered sequence of records. Each record carries a header: the issuing device identity, an event type, a sequence number, the hash of the previous record, a hash over the record's own contents, and a signature over that hash. The sensitive fields inside the record are sealed per reader; the header and the integrity material are public, so anyone can verify the chain without being able to read the payload.

This is the same construction certificate-transparency logs use to make a public, append-only record of issued certificates: entries bound into a hash structure so that the log cannot be altered after the fact without detection (RFC 6962). TN points the construction at your application's own audit records instead of at certificates, and keeps the field contents encrypted.

The verifier walks the entries in order. For each one it recomputes the content hash, checks the signature against the issuer's public key, and confirms the previous-hash link matches the prior entry. If every check passes for every record, the segment is intact. If one fails, the verifier reports the index of the first invalid entry, so you learn not just that the log changed but where.

The threat model

An audit log is only as good as the attacks it survives. TN's chain is built against four specific failures, each one a thing a regulator or a forensic reviewer will ask about.

Tampering

An edited field changes the content hash, so the record's signature no longer verifies. The verifier flags the entry.

Deletion

Removing a record breaks the previous-hash link of the one that followed it. The gap is detectable, not silent.

Insertion

A spliced-in record cannot present a valid signature from the issuing DID, and it breaks the surrounding links.

Repudiation

Because each entry is signed at the source, the issuer cannot later deny having written it. Origin is provable.

One boundary is worth stating plainly, because auditors ask. The chain proves that the records you hold have not changed since they were written. It does not, on its own, prove that no record was ever withheld before the chain was published. Anchoring the chain head to an external witness on a schedule closes that gap; the hash links close the rest.

Verifying a chain segment

Verification is mechanical. tn verify reads the public envelope records as newline-delimited JSON on standard input and prints one result line per record. You feed it the public envelopes for the segment you want to check:

# verify the public envelopes for a log
$ cat order.placed.ndjson | tn verify

# one result line per input record
order.placed  seq=0  ok
order.placed  seq=1  ok
refund.issued seq=2  ok
order.placed  seq=3  ok

If a record were edited after the fact, its content would no longer match its signed hash, and that record's line would report the failure instead of ok:

$ cat order.placed.ndjson | tn verify
order.placed  seq=0  ok
order.placed  seq=1  ok
refund.issued seq=2  FAIL  signature does not match content
order.placed  seq=3  ok

What each line attests to is the same three checks, applied to every record: the content hash is recomputed and compared, the signature is checked against the issuer's public key, and the previous-hash link is confirmed to match the prior entry. A record that passes all three is intact and in place; a record that fails any one of them is reported, so you learn not just that the log changed but which record changed.

The same logic runs in the auditor's browser, on their own machine, against the records you hand them. They do not need access to your keys to check integrity. The public header and the signature are enough. They need a grant only to read the sealed fields.

Mapping TN to compliance frameworks

The frameworks below all require durable, attributable, integrity- protected logging. None of them name a vendor; each names a property. TN's chain is a way to satisfy the property and to show the satisfaction to an assessor.

Industry packs and per-field grants

Tamper-evidence governs the whole record. The sealing model governs what is inside it. TN ships industry packs: pre-built classifications for common regulated data types, covering standards such as PCI DSS, HIPAA Safe Harbor, OIDC, FHIR, ISO 20022, and FIX. Each pack maps named fields from its source standard to encryption groups, so an auditor can check the classification against the specification. Run tn show profiles to list the profile catalog available in your install and see which packs ship.

An audit then begins with a grant. You grant the auditor's DID access to the groups in scope for the engagement, and only those groups. They read records on their own machine: fields inside the granted groups decrypt, fields outside them stay sealed. When the engagement ends, rotating the affected groups revokes their read access for every subsequent entry. The grant is forward-looking, the same way an expired rental stops opening new content.

PCI pack

Cardholder data classified to PCI DSS field names.

HIPAA pack

PHI mapped to the safe harbor identifier list.

OIDC pack

Auth flow fields, with forbidden-post-auth flags.

What the auditor sees

Only the fields you grant them. Signed at the source. The chain verifiable in their browser, on their machine. One record, one permission model, one source of truth.

For the per-field model in detail, see field-level encryption, the DRM-for-logs primer on how sealing and granting work on a single record, and where TN fits in a DPIA for the GDPR mapping in full.

← Back to the vault