> For the complete documentation index, see [llms.txt](https://docs.zipwire.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zipwire.io/fundamentals/security/understanding-proofpack.md).

# Understanding ProofPack

## What Is a ProofPack?

A ProofPack is a JSON file that lets you share specific facts from a larger record — a passport, a bank statement, a signed contract — while proving those facts are genuine, without handing over the whole document or calling back to whoever issued it.

It solves a problem most data sharing today doesn't: you either share everything, or you share nothing. Proving you're over 18 usually means uploading your whole passport to a website that only needed one fact. ProofPack lets you reveal just that one fact, with cryptographic proof it's real.

{% hint style="info" %}
**Not the same as a Zero-Knowledge Proof.** A ZKP proves a statement is true ("this person is over 18") without ever revealing the underlying data. ProofPack instead reveals the actual data you choose ("date of birth: 1990-01-01"), with proof it's authentic — more like a redacted document than a mathematical proof of a claim.
{% endhint %}

## The Three Layers

A ProofPack is built as three layers, each wrapping the one before it:

1. **Merkle Exchange Document** — the innermost layer. Your data is split into individual fields ("leaves"), each hashed and salted, and combined into a Merkle tree. This is what makes selective disclosure possible: you can reveal one leaf and its proof path without exposing the others. See [Understanding Merkle Trees and Proofs](/fundamentals/security/understanding-merkle-trees-and-proofs.md).
2. **Attested Merkle Exchange Document** — wraps the tree with a reference to an on-chain attestation (via the Ethereum Attestation Service), plus a timestamp and nonce to prevent replay. This is what ties the data to a verifiable, tamper-evident record on the blockchain. See [Crypto & Blockchain Basics](/fundamentals/security/crypto-and-blockchain-basics.md).
3. **JWS Envelope** — the outermost layer, a cryptographic signature over everything inside it. This is what a recipient checks first, and can be verified entirely offline. See [Understanding JWT and JWS](/fundamentals/security/understanding-jwt-and-jws.md).

Because each layer can be checked independently, a verifier doesn't need to trust whoever's handing them the file — they can check the signature, recompute the Merkle root from the revealed leaves, and look up the attestation on-chain, all without a single call back to the issuer. [zipwire.io/verify-proof](https://zipwire.io/verify-proof) does exactly this in the browser if you just want to check a file without writing any code.

## Why This Shape, Specifically

* **Selective disclosure without re-verification.** Because the underlying data is a Merkle tree, redacting most of it doesn't invalidate the rest — the root hash still checks out against the revealed leaves and their proof paths.
* **Portable and static.** A ProofPack is just a downloadable file. Once issued, it can be stored, emailed, or re-shared with even fewer fields revealed, without contacting the original issuer again.
* **Self-describing.** Because it's built on standard formats (JSON, Merkle trees, JWS), tools that have never heard of ProofPack — including general-purpose AI models — can parse and reason about one cold, with no custom integration.

## Where You'll See This in Zipwire

ProofPacks are the proof format behind most of Zipwire's attestation features:

{% content-ref url="/pages/jNY2ld2du1IpRFlISwdB" %}
[Proof Verification](/zipwire-attest/proof-verification.md)
{% endcontent-ref %}

{% content-ref url="/pages/HR6HCv993tyVfhflqWFi" %}
[Data Portability and Proofs](/overview/data-portability-and-proofs.md)
{% endcontent-ref %}

{% content-ref url="/pages/vUtfq7RAFQoRHCuQ9GJA" %}
[Sign It Once, Prove It Forever](/zipwire-collect/signable-documents-cryptographic-proof.md)
{% endcontent-ref %}

{% content-ref url="/pages/yTRncn59sC3kqKG8cFaH" %}
[ProofPack & Agent Delegation](/tools-and-integrations/proofpack-agent-delegation.md)
{% endcontent-ref %}
