Whitepaper
Technical design for verifiable digital timestamps
Version 2.0 · February 2026
We live in an era where digital content can be created, modified, and deleted without trace. AI-generated deepfakes are indistinguishable from reality. Screenshots can be fabricated. Websites change or disappear. There is no native mechanism in the digital world to prove that a specific piece of content existed in a specific form at a specific time.
The consequences are profound: whistleblowers can't prove they had evidence before an investigation began, researchers can't establish prior art with mathematical certainty, journalists can't prove a website said what it said before it was edited, and ordinary people can't prove they created something before someone else claimed it.
BitProof anchors the SHA-256 hash of any digital content to Bitcoin's blockchain via the OpenTimestamps protocol. This creates a mathematical proof that the content existed in exactly that form at the time the hash was included in a Bitcoin block — without requiring trust in any organization, including BitProof itself.
The key properties of this approach:
.bitproof bundle containing a manifest and the OTS proof.bitproof bundle containing all captured files, manifest, and OTS proof.bitproof proof
A .bitproof file is a standard ZIP archive containing:
{
"manifest.json" // Metadata, hashes, proof status
"proof.ots" // OpenTimestamps proof file
"screenshot.png" // (archives only) Full-page screenshot
"page.html" // (archives only) HTML source
"page.pdf" // (archives only) PDF rendering
}
The manifest follows a versioned schema:
{
"version": "2.0",
"type": "bitproof-timestamp" | "bitproof-archive",
"created_at": "ISO 8601 timestamp",
"file": { // timestamps only
"hash": "SHA-256 hex",
"algorithm": "SHA-256",
"name": "original filename",
"size": bytes
},
"source": { // archives only
"url": "https://...",
"title": "Page Title"
},
"files": { // archives only
"screenshot": { "filename", "hash", "algorithm" },
"html": { ... },
"pdf": { ... }
},
"bundle": { // archives only
"hash": "SHA-256 of concatenated file hashes",
"algorithm": "SHA-256"
},
"proof": {
"method": "opentimestamps",
"status": "pending" | "confirmed"
}
}
User's Browser BitProof Server Bitcoin
────────────── ─────────────── ───────
File → SHA-256 ──hash──→ OpenTimestamps stamp ──anchor──→ Block
│
←── .bitproof ZIP ──┘
URL ─────────────→ Playwright capture
│ screenshot.png
│ page.html
│ page.pdf
↓
Bundle hash → OTS stamp ──anchor──→ Block
│
←── JSON preview + .bitproof ZIP
The backend is fully stateless. It uses temporary directories that are deleted after each response. There is no database, no file storage, no user accounts.
What we protect against: content tampering, backdating, repudiation, and forgery. If the hash matches and the OTS proof verifies against Bitcoin, the content provably existed before the block timestamp.
What we don't protect against: proving who created the content (that would require digital signatures / identity binding, a potential future feature). BitProof proves existence, not authorship.
Trust assumptions: You trust Bitcoin's blockchain is immutable (secured by proof-of-work). You trust SHA-256 is collision-resistant. You trust your own computer computed the hash correctly. BitProof is not required for independent verification.
Bitcoin is a widely used proof-of-work chain with long operational history and broad tooling support. Using OpenTimestamps on Bitcoin keeps proofs low-cost through Merkle aggregation and allows verification with standard OTS tooling.
BitProof focuses on simple, auditable timestamping for digital files and captured web content. The goal is to make independent verification practical without requiring data custody by this service.
Verify independently.