ProofLedger Blog
Proof of existence, explained
Articles on SHA-256 proofs, Polygon anchoring, checking a proof without ProofLedger, and where timestamps fit as evidence.
Does the poor man's copyright actually work?
No. Mailing a song to yourself doesn't give you a copyright, and it doesn't replace registering one. The US Copyright Office says so in its own FAQ: "There is…
Read articleDoes EXIF data prove when a photo was taken?
No. EXIF data records when a device says a photo was taken, and that record is ordinary editable metadata that free tools can rewrite in seconds. It's evidence…
Read articleHow does blockchain timestamping work for business records?
Blockchain timestamping records a fingerprint of a file, its SHA-256 hash, on a public ledger. Later, anyone with the file can recompute the fingerprint and…
Read articleOpenTimestamps alternatives: what each option hands you, and what a third party has to do with it
OpenTimestamps is a protocol you operate. A client sends your file's hash to calendar servers, the calendars aggregate hashes into a Merkle tree and anchor the…
Read articleWhy Did the Metadata Disappear From My Photo?
Your messaging app or social platform almost certainly stripped it. When you upload or send a photo through apps like WhatsApp, iMessage, Instagram, or…
Read articleHow to Add Proof-of-Existence Timestamping to Your App Through an API
Say your app needs to prove a file existed at a certain point, before anyone disputes it. The pattern is the same no matter which service you pick: hash the…
Read articleIs a Screenshot Admissible as Evidence?
Usually, yes. A screenshot gets into evidence when someone who saw the original page or message testifies that this image accurately reflects what they saw…
Read articleC2PA vs ProofLedger: Where Content Credentials Live vs Where Proof Lives
If you're researching provenance standards for files you'll need to vouch for later, you'll run into C2PA (Content Credentials) fast. It's backed by Adobe…
Read articleS3 Object Lock vs ProofLedger: What WORM Retention Actually Proves
A claims team storing pre-loss photos in S3 with Object Lock enabled might assume they've solved the timing problem. They haven't. Object Lock and versioning…
Read articleSigned Git Commits vs ProofLedger: Who Signed It and When It Existed
You sign your commits and tags. Someone asks you to show that a release existed on a given date, and you reach for git log --show-signature. The signature…
Read articleHow Do You Prove a Document Existed Before a Certain Date?
You have a file, and you need to show that this exact version existed no later than a given date. Your own file system's "created" and "modified" dates will…
Read articleRFC 3161 Timestamping Authorities vs ProofLedger: Two Ways to Prove When a File Existed
If you need to show later that a file existed at a specific point in time, you need a record made at that time by something outside your own control. RFC 3161…
Read articleWebhook Security Patterns for Async Proof Workflows: HMAC, Idempotency, and Replay Protection
A file gets hashed. The hash goes off to be anchored. Some time later a webhook arrives saying the anchor landed. The gap between "submitted" and "confirmed"…
Read articleThe Merkle Proof Bug That Silently Returns the Wrong Root
A Merkle proof check that comes back false doesn't always mean the file was tampered with. Half the time it means the hash-combination step is wrong: hex…
Read articleVerifying a Blockchain-Anchored Timestamp Without Trusting the Vendor
You have a file, a proof bundle and a certificate from a timestamping service, and you are about to rely on them. The question worth asking first: if that…
Read articleStacking C2PA Content Credentials with Blockchain Timestamps in Python
A file arrives with C2PA content credentials: the device that captured it, the software that touched it, the edits, a signing time. Then it goes through an…
Read articleWatch-Folder Anchoring in Node.js: chokidar, Queues, and Rate-Limit Backoff
A file lands in an intake folder. You want a hash anchored to the blockchain the moment it arrives. Not batched overnight. Not manually triggered. Just: file…
Read articleOpenTimestamps vs ProofLedger: How Each Anchors a File Hash
You have a file and you want a record, made now, that someone else can check years from now: this exact file existed by this date and has not changed since…
Read articleHow to Verify a Blockchain Timestamp: What You're Actually Trusting
A timestamp proof is only as good as the check behind it. Anyone can say a file existed on a date. The question for a developer adding proof of existence to an…
Read articleIdempotent File Anchoring: SHA-256 Dedup Before You Call the API
Building any intake pipeline, you'll hit the same problem eventually. Files arrive from multiple sources. Some you've already processed: re-uploads of the same…
Read articleUsing SHA-256 as an Idempotency Key in a File Anchoring Pipeline
You run an ingestion job Monday. The same files get queued again Wednesday because a failed upload triggered a retry. Or two different teams independently drop…
Read articleC2PA Content Credentials and the Chain-of-Custody Gap
Content Credentials are having a moment. Samsung Galaxy S25 and Google Pixel 10 sign media natively at the camera level. Adobe, Google, Meta, Microsoft, and…
Read articleProof of Existence: How Each Method Works and What a Third Party Has to Trust
You have a file and you need to show it existed by a certain date. Every method for doing that comes down to two questions: what do you hold afterwards, and…
Read articleBlockchain Timestamping Tools: How the Main Options Actually Work
You need to show, later, that a file existed by a certain date. Three families of tool do this: RFC 3161 timestamping authorities, the OpenTimestamps protocol…
Read articleIdempotent File Anchoring in Python: SHA-256 as a Deduplication Key
You set up a file intake. Files arrive throughout the day: reports, photos, PDFs from several sources. Some are duplicates. The same photo emailed and then…
Read articleSkip the Duplicate: Building an Idempotent File-Anchoring Worker in Python
Your script anchored 46 files, crashed on the 47th, and now you have to run it again. Two workers are reading the same drop folder. A retry fired after a…
Read articleOriginStamp vs ProofLedger: Architecture, Verification, and What You Hold
Both are hosted services. You send a file's hash through an API, and a record of that hash ends up in a public blockchain transaction. If that were the whole…
Read articleReliable Webhooks for Async Proof Pipelines: Signatures, Idempotency, and Replay Protection
You're building a pipeline that anchors files to a blockchain. Files arrive, you hash them, you submit the hash for anchoring, and then you wait. Polygon…
Read articleFRE 901(b)(9) Is the Default for Digital Evidence. FRE 902(13) and 902(14) Don't Require the Expert Witness.
FRE 901(b)(9) Requires an Expert. FRE 902(13) and FRE 902(14) Don't.
Read articleBatch File Anchoring in Python: Concurrency, Rate Limits, and Resumable Progress
You have a directory of files that need a timestamp proof: build artifacts, exports, scanned documents, a backlog that was never anchored. A for-loop that…
Read articleMerkle Proof Validation in Python: Walking from Leaf to Root
You get a file hash and a proof that claims it's anchored in some blockchain transaction. How do you verify that without trusting the service that created it?
Read articleFile Monitor with Automatic Hashing: Python Watchdog in Production
You set up a shared folder for evidence uploads. Files arrive throughout the day. By evening, you need SHA-256 hashes for everything that came in. Manual…
Read articleFRE 707 Implementation: How the Machine-Generated Evidence Rule Changes Authentication Practice
The judge sustains the objection. Insufficient foundation for the sensor data. The plaintiff's attorney scrambles for a different approach to authenticate the…
Read articleAuto-Hash Files with Python's Watchdog: Building a File Monitor Pipeline
You drop a file into a folder. Within seconds, you get its SHA-256 hash logged, stored, and ready for whatever comes next. No manual hashing, no missed files…
Read articleSpoliation of Evidence: The Duty to Preserve, Digital Files, and What a Blockchain Anchor Actually Fixes
The court enters an adverse inference instruction. The plaintiff produced photographs of the property in discovery, but the ones taken before the storm are…
Read articleWalking Up a Merkle Tree: SHA-256 Proof Validation in Python
You get a file hash and a Merkle proof that claims it's anchored in some blockchain transaction. How do you verify that claim without trusting the service that…
Read articleNotarization Proves Identity. Not Timing.
"Get it notarized" is shorthand for making a document count. If what your application has to show is that a file existed in a given form by a given date, it…
Read articleOffline Verification of Blockchain-Anchored Files: A Forensic Workflow
A claims adjuster uploads photos from a loss site. The blockchain anchor proves they existed before the storm hit. But how do you actually verify that proof…
Read articleVerify Blockchain-Anchored Files Offline with Python
You anchored a set of files months ago and kept their proof bundles. Now something needs to re-check them: a release job, an audit script, a colleague on a…
Read articleBuilding End-to-End File Timestamping with ProofLedger's REST API
You need to show that a file existed by a certain time and has not changed since, from inside your own app or pipeline, without handing the file to anyone…
Read articleSee the proof behind the claim.
Every proof can be checked against its public Polygon transaction, without ProofLedger. No account is needed to verify.