How it works

One enclave, two steps, one atomic action.

The two steps

Inside a hardware enclave (AWS Nitro), one atomic action uses two counts of a counter. Step 1 is a fresh random value from the enclave’s hardware: nobody outside sees it, not the world and not the operator, and it is used once. Step 2 binds your file’s SHA-256 at the very next count; nothing can come between them. The enclave signs both, with its own time, and releases them together. If any step fails, nothing is released and the counter does not move.

Enclave (TEE): one atomic action
Count 1: nonce
Unseen, unpredictable
Count 2: payload
Bound after the nonce
Block hash
Places it in time
Merkle root
Any amount of data
Action or record
Proved after nonce
Prior BitGraph
Links moments

What it proves

These bits were bound after a moment nobody could predict, and could not have been bound before it. It needs no clock you have to trust, no blockchain and no outside party. It says when the bits were bound, not how old the content is: the content could be a second old or ten years old.

Your file never leaves your machine. Only its SHA-256 goes into the enclave, so the same action works for a photo, a dataset, a model’s answer, or a million files under one Merkle root.

Two BitGraphs make an interval

BitGraph A at the start, BitGraph B at the end. Everything bound between them falls inside that interval, and both ends are moments nobody could predict. Every BitGraph takes exactly two counts, so the counter runs straight through: nothing can be slipped in or held back afterward.

BitGraph A
Start moment
Record
Record
Record
BitGraph B
End moment
Everything here is bound after A and before B: minutes or weeks

The same shape covers challenge and response. A’s random value is revealed in A’s proof; a question generated from it could not have existed before A. Bind the answer in B, and it depends on a value nobody had before A.

Make one, fetch one

Send a SHA-256; get the signed proof back. Or use the drop box on the home page.

curl -X POST https://bitgraph.ing/api/commit \
  -H 'content-type: application/json' \
  -d '{"digests":[{"digestB64":"<sha-256, base64>","hashAlg":"sha256"}]}'

Every BitGraph is kept. Fetch a proof by its hash, here or on the ledger:

curl https://bitgraph.ing/api/proofs/<sha-256, base64url>

For an AI agent, the MCP server:

claude mcp add bitgraph -- npx -y @mikeargento/bitgraph-mcp

Check a proof

A proof verifies offline with @mikeargento/bitgraph-verify: the enclave’s signature, the hardware attestation with its time, and the two counts. Pin the enclave’s measurement, reproducible from the published source:

d9128d67c406a30f988f74ece8b5cced5c9a96491289037f50bddb5f10aac2bc9d1d315dd7bf65428899ccde72b95b86

Everything else is yours to add

Writing a proof to a blockchain, a timestamp service, a file that carries its own proof: all of these already exist, and any of them can be hung on a BitGraph by whoever wants it. BitGraph does the one thing they cannot: the two steps.