Rightshold™ Sign up

Answers · AI evidence

How do I honor a GDPR erasure request when my AI agent's audit log is tamper-evident?

Last updated

TL;DR: Plan for it before the first entry, because a hash-chained or append-only log is built so entries can't be removed: deleting a row breaks the chain. GDPR doesn't bend for that. The EDPB's blockchain guidelines (02/2025, version 2.0, adopted 7 July 2026) say technical impossibility can't be used to justify non-compliance, and advise keeping personal data off the chain. So split every record. The details (who the agent acted for, emails, prompts, documents) go to an ordinary store you can delete from. The chained log gets only non-personal fields (action type, outcome, time) and a salted SHA-256 of the stored record. When a valid erasure request arrives and no exemption applies, delete the stored record and its salt, or the person's encryption key. The chain still verifies, and the hash left behind can't be linked back to the person. On Rightshold, record_action takes that hash as action_sha256, and its public ledger entry is a salted commitment that reveals nothing. The event fields you send (summary, client_event_id, tags) are kept and can't be deleted, so keep personal data out of them.

What should I check, step by step?

1. List what the agent's log holds and mark every field that could identify a person: names, emails, account or order numbers, IP addresses, free-text prompts and outputs, attached documents, and ids that point back to a customer record.

  1. Split each record in two. Personal details go to a store you control and can delete from (a database table or object store). The chained log gets only non-personal fields (action type, outcome, time, an internal random event id) and the SHA-256 of the full stored record.
  2. Salt every record: generate a random salt of at least 32 bytes, keep it with the stored record, and hash salt plus record. Without a salt, a hash of a short value such as an email address can be confirmed by guessing. The EDPB treats a salted or keyed hash as personal data while the salt exists, and as no longer linkable once the salt is deleted, provided it was long, random and never leaked.
  3. Or encrypt each person's records under their own key and delete the key to erase them (crypto-shredding). NIST SP 800-88 Rev. 2 accepts cryptographic erase only if the data was never stored in plaintext and every copy of the key is destroyed, so check backups, caches and key escrow.
  4. On Rightshold, send record_action with action_type, outcome, occurred_at and action_sha256 (the salted hash). Leave summary out or keep it generic ('refund issued'), and use a random id as client_event_id, never an email or a customer's order number. Recorded events can't be edited or deleted, so whatever you put in those fields stays.
  5. Enforce it on the stream: set require_action_sha256 to true and list allowed_action_types, so events without a hash or with an unexpected action type are refused.
  6. When an erasure request arrives, check the exemptions first (GDPR Article 17(3), for example a legal obligation to keep the record, or legal claims). If one applies, keep the record, limit who can open it and tell the person. If not, delete the stored record and its salt, or the key, from live systems without undue delay.
  7. Deal with backups: the ICO expects backup copies to be put beyond use until they are overwritten on their normal schedule, and every restore to re-apply the deletion list so erased records don't come back.
  8. Log the erasure itself without personal data: a new entry such as privacy.erasure_completed with the internal event ids affected and the date, so an auditor can see why those records can no longer be opened.

Why can't I just delete personal data from a tamper-evident AI agent log?

A tamper-evident log works because each entry commits to the one before it (or to a Merkle root), and the head is kept somewhere you don't control. Removing or editing an entry changes every hash after it, which is exactly what the log exists to expose. A log that keeps personal data inside its chained entries can't honor erasure without breaking its own proof.

How do I keep personal data out of a hash-chained AI agent log?

Store the agent's full record where you can delete it, and chain only a salted hash of it. Checking still works: anyone holding the stored record and its salt can recompute the hash and match it to the chained entry, and the chain shows the entry hasn't changed since it was written.

What does Rightshold keep from a recorded agent action, and what can't it erase?

record_action appends the event to your account's private stream and puts a salted commitment to it on the public ledger, which reveals nothing unless you choose to open it. The event itself (action_type, outcome, occurred_at, summary, action_sha256, client_event_id, tags) is stored privately and can't be edited or deleted, so personal data sent in summary, client_event_id or tags stays for good. Send the salted hash in action_sha256 instead.

How do I ask Rightshold about this (free, no key)?

Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “My support agent just issued a refund. I keep the customer's details and a random salt in my own database. Record the action with only the salted SHA-256 of that stored record, no customer details, so I can erase the details later without breaking the log.”

One-click setup

{
  "tool": "record_action",
  "arguments": {
    "action_type": "refund.issued",
    "outcome": "success",
    "occurred_at": "2026-11-07T15:04:00Z",
    "action_sha256": "SHA256_OF_SALT_PLUS_STORED_RECORD",
    "client_event_id": "evt_7f3c9a1e52d0"
  }
}

Rightshold records the events you send in a private, append-only stream and puts a salted commitment to each on its public ledger. It never holds your stored records, salts or keys, can't erase data you keep elsewhere and doesn't decide whether a GDPR exemption applies. Splitting records, salting, key deletion and backup handling are steps you run around those records. Not legal advice.

What are the sources?

Related

Not legal advice. JSON · Markdown · All answers

Get a free API key in one call

No card and no email needed. 100 free credits; the license and policy checks stay free without a key.

curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_...   # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
  -H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'