Skip to content

RFC: Transaction receipt signing for post-authentication audit trail #16

@tomjwxf

Description

@tomjwxf

TAP solves the "is this agent legitimate?" question with RFC 9421 signatures. Once the agent is authenticated and the merchant processes the transaction, though, neither party has a cryptographic record of what actually happened.

For regulated commerce this creates a gap: the agent proved its identity at request time, but there is no tamper-evident receipt of the transaction itself. In a chargeback dispute or compliance audit, the merchant has logs, but logs are mutable. The agent has nothing.

Proposed extension: a lightweight receipt that the merchant (or a TAP-aware proxy) signs after processing a verified agent request.

The receipt would contain:

  • The original TAP signature (binding it to the authenticated request)
  • A hash of the transaction payload (what was actually processed)
  • Merchant signature over both (proving the merchant saw and processed this specific request)
  • Timestamp and sequence number (ordering guarantee)

This creates a two-sided audit trail: the agent proves it was authorized (via TAP signature), and the merchant proves what it processed (via receipt signature). Either party can verify the other's claims offline.

I built a working implementation of this receipt pattern for a different context (MCP tool-call signing): examples/deerflow-receipts. The core is Ed25519 signing with JCS canonicalization (RFC 8785), which would map cleanly onto TAP's existing signature infrastructure.

Two design questions worth considering:

  1. Who signs the receipt? The CDN proxy is the natural candidate since it already intercepts and verifies TAP signatures. Alternatively, the merchant backend could sign after processing.

  2. Receipt format: TAP already uses RFC 9421 for request signatures. Should receipts reuse the same signature format (keeping everything in the HTTP Message Signatures family), or use a simpler detached JWS envelope?

Happy to prototype a receipt-signing extension for the CDN proxy if there is interest.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions