Opening this as a scope-check discussion, not a formal proposal. I am the author of draft-farley-acta-signed-receipts, a per-action audit-receipt format for AI-agent governance. Your team is authoring draft-google-cfrg-libzk. The two drafts sit in complementary layers of the same problem space, and I wanted to flag a composition worth thinking about before either draft stabilizes.
What each draft provides today
libzk proves properties of a legacy identity credential (mdoc, JWT, W3C VC) without revealing the credential. The prover shows "this ECDSA-signed document exists and satisfies predicate P," the verifier checks the proof, and the holder's identity is not disclosed.
draft-farley-acta-signed-receipts attests to a per-action decision by an AI agent. The receipt binds (principal, action, resource, context, decision) under an Ed25519 signature. Receipt chains link via previousReceiptHash so a session's decisions are tamper-evident end-to-end.
Where they compose
Today a receipt's principal field is a plain entity UID. In many governance contexts the identity we actually care to bind is a privacy-preserving assertion, not a raw subject DID or a plaintext credential. Example: an agent acting for a holder who has proven via libzk that they are over 18 and a resident of EU member state X, without disclosing the holder's specific identity.
A composition lets the receipt's principal reference a libzk proof of predicate-over-credential rather than a bare entity UID. Auditors verify:
- The libzk proof is well-formed and satisfies the predicate (libzk verifier, already specified).
- The receipt's Ed25519 signature covers a payload that commits to the libzk proof hash as part of
principal.
- The receipt chain is intact across the session.
Neither draft needs to change structurally. libzk continues to produce its proofs. The receipt format already accepts arbitrary principal shapes; a bytes commitment to a libzk proof fits.
The win: auditable agent governance that preserves the privacy guarantees libzk is built to provide. The alternative today is to either expose the holder's identity in the receipt, or to skip receipt signing entirely, and both choices force a compliance trade-off the composition removes.
What I am asking for
Not an immediate action. Three specific questions for the Longfellow team:
-
Is the libzk proof format stable enough that a downstream receipt format can safely reference it by content-hash commitment? If yes, would a short informational section in the libzk draft describing the composition shape be welcome, or would you prefer the composition live entirely in draft-farley-acta-signed-receipts without touching libzk's text?
-
For the receipt-side identity commitment, is there a preferred canonical form? I have been using JCS (RFC 8785) for everything the receipt signs. If libzk has an internal canonical form for proof artifacts, aligning would let a single verifier check both in one pass.
-
Is there interest in a joint informational IETF draft describing the composition (separate from both libzk and acta), or is a cross-reference from acta into libzk sufficient? I am agnostic on venue; the question is what the Longfellow team would find useful versus intrusive.
Non-asks
- Not proposing changes to the libzk protocol, proof system, or implementation.
- Not proposing Longfellow adopt any specific receipt format, signing primitive, or verifier.
- Not a product pitch; draft-farley-acta-signed-receipts is individual-submission, its reference verifier (
@veritasacta/verify) is Apache-2.0, and the receipt format is intentionally vendor-neutral. Four independent implementations currently cross-verify against shared fixtures.
Prior art in this pattern
The composition of "auditable record + privacy-preserving credential" is not novel at the pattern level (see EU AI Act Article 12 logging requirements composed with GDPR pseudonymization, for example). What is novel is the cryptographic shape: a signed audit trail whose principal is itself a ZK proof rather than a plaintext identity. Both libzk and acta are young enough that the composition can be designed in rather than retrofitted later.
Happy to drop this back to acta if the Longfellow team prefers the composition live entirely downstream. Flagging it here because libzk is authoritative on the credential side and the receipt side is easier to adjust than the ZK side.
Cc: @tgeoghegan @divergentdave (active on the libzk spec PRs)
Thanks.
Opening this as a scope-check discussion, not a formal proposal. I am the author of draft-farley-acta-signed-receipts, a per-action audit-receipt format for AI-agent governance. Your team is authoring draft-google-cfrg-libzk. The two drafts sit in complementary layers of the same problem space, and I wanted to flag a composition worth thinking about before either draft stabilizes.
What each draft provides today
libzk proves properties of a legacy identity credential (mdoc, JWT, W3C VC) without revealing the credential. The prover shows "this ECDSA-signed document exists and satisfies predicate P," the verifier checks the proof, and the holder's identity is not disclosed.
draft-farley-acta-signed-receipts attests to a per-action decision by an AI agent. The receipt binds (principal, action, resource, context, decision) under an Ed25519 signature. Receipt chains link via
previousReceiptHashso a session's decisions are tamper-evident end-to-end.Where they compose
Today a receipt's
principalfield is a plain entity UID. In many governance contexts the identity we actually care to bind is a privacy-preserving assertion, not a raw subject DID or a plaintext credential. Example: an agent acting for a holder who has proven via libzk that they are over 18 and a resident of EU member state X, without disclosing the holder's specific identity.A composition lets the receipt's
principalreference a libzk proof of predicate-over-credential rather than a bare entity UID. Auditors verify:principal.Neither draft needs to change structurally. libzk continues to produce its proofs. The receipt format already accepts arbitrary principal shapes; a bytes commitment to a libzk proof fits.
The win: auditable agent governance that preserves the privacy guarantees libzk is built to provide. The alternative today is to either expose the holder's identity in the receipt, or to skip receipt signing entirely, and both choices force a compliance trade-off the composition removes.
What I am asking for
Not an immediate action. Three specific questions for the Longfellow team:
Is the libzk proof format stable enough that a downstream receipt format can safely reference it by content-hash commitment? If yes, would a short informational section in the libzk draft describing the composition shape be welcome, or would you prefer the composition live entirely in draft-farley-acta-signed-receipts without touching libzk's text?
For the receipt-side identity commitment, is there a preferred canonical form? I have been using JCS (RFC 8785) for everything the receipt signs. If libzk has an internal canonical form for proof artifacts, aligning would let a single verifier check both in one pass.
Is there interest in a joint informational IETF draft describing the composition (separate from both libzk and acta), or is a cross-reference from acta into libzk sufficient? I am agnostic on venue; the question is what the Longfellow team would find useful versus intrusive.
Non-asks
@veritasacta/verify) is Apache-2.0, and the receipt format is intentionally vendor-neutral. Four independent implementations currently cross-verify against shared fixtures.Prior art in this pattern
The composition of "auditable record + privacy-preserving credential" is not novel at the pattern level (see EU AI Act Article 12 logging requirements composed with GDPR pseudonymization, for example). What is novel is the cryptographic shape: a signed audit trail whose principal is itself a ZK proof rather than a plaintext identity. Both libzk and acta are young enough that the composition can be designed in rather than retrofitted later.
Happy to drop this back to acta if the Longfellow team prefers the composition live entirely downstream. Flagging it here because libzk is authoritative on the credential side and the receipt side is easier to adjust than the ZK side.
Cc: @tgeoghegan @divergentdave (active on the libzk spec PRs)
Thanks.