BREAKIT

BREAK IT · the Liveware ingest gateway

A gateway for the records you take in from partners and devices. It proves who sent each one, in what order, in exactly what shape, on the raw bytes, before any software reads it. Everything it refuses becomes an antibody, a repeat attacker pays for every new look, and it runs on a machine you own and sends nothing out.

verify-before-parse · living immune system · the rebound cost law · an independent referee · starting the kernel…

180,000real payment records through one node
see receiptssealed claims held
0outbound attempts once listening
79 / 79red-team cases held, re-run in CI
MITno licence fee; the code is yours

What it isA door that checks the ID before it opens

Most systems take a request in, parse it, and only then decide whether to trust it. The parser runs on an attacker’s bytes before anyone knows who sent them, and that is where injection, deserialisation and malformed-input attacks live. break-it turns the order round:

  1. Verify before parse. Each record arrives as a small signed packet. The gate checks its size, its magic number, its exact layout, the sender, the Ed25519 signature and the sender’s counter, in that order, on the raw bytes. Only then is it read. One failure and the record is refused, with the stage and the reason.
  2. A living immune system. Every refusal is written to a hash-chained journal, classified into a family and fingerprinted. If it can never become valid, it becomes an exact antibody that drops the same bytes on sight; its shape teaches the family. Nodes pinned to each other share antibodies, and each re-runs them on its own gate before trusting one.
  3. The rebound. A source the gate keeps refusing must attach proof-of-work before it is even looked at. The price rises with its own refusals (4,096 hashes a look past 100 refusals, 262,144 past 500); the gate checks the work in one hash and sends nothing back.
  4. A referee. Behind the gate sits a deliberately naive app. A referee written separately from the gate watches every admitted message against an independent grammar and the ledger. If anything malicious ever reaches the app, the referee says so. That is the only way to win.

Start hereFour minutes, no install

  1. Press ▶ play the feed in the live defence below. Real payment records from a public dataset are signed in your browser and sent through the real gate. Blue squares pass the gate and reach the core; the books line checks the app’s balances against the feed itself.
  2. Launch an attack. Each red button builds one of the six known attack shapes from the latest genuine record. Watch it stop at the gate (pink), then send it again: it is dropped on sight by the antibody it just minted (purple), and its chip turns green.
  3. Read the receipts. The pilot section shows every claim we sealed in git before measuring a real node, with what was measured and whether it held. The herd and the tarpit sections do the same for the living defence: a flaw that lands once and is then closed on every node, and a confirmed attacker made to wait. The failures stay on the page.
  4. Put in your figures. The cost case takes your monthly volume and runs it against dated AWS list prices and your own electricity. Then try to break it: the console takes any bytes you like.
Words used on this page
Record, packet
One item of the feed (here: one client’s payment in one month), sent as a small packet of bytes with a header, the record and a signature.
Ed25519 signature
A 64-byte proof, made with the sender’s private key, that the sender made these exact bytes. Anyone with the public key can check it; nobody without the private key can make one.
Counter
A number in every packet that must be exactly one more than the sender’s last. A copied packet arrives with a number already used, so a replay is refused.
Verify before parse
Check the bytes are well-formed and signed by a known sender before any software reads what they say.
Antibody
A record of an attack the gate refused, kept so the same bytes are dropped on sight next time and similar ones are recognised by family.
Proof-of-work
A small puzzle a source must solve by trying many hashes. The rebound makes a repeat attacker solve one before each look; checking the answer takes one hash.
Ledger, journal
Two append-only files where each line commits to the one before it, so nothing can be removed or changed unnoticed. The ledger holds what was admitted; the journal holds what was refused and why.
fsync
Forcing a write all the way to the disk before going on, so an admitted record survives a crash.
Referee
Separate code that checks every admitted record against its own rules and the ledger. It decides whether anything got through that should not have.

The gate · liveWatch it defend, in this tab

Everything below is the repository’s own gated code running in your browser: the same gate, immune system, sentinel, app and referee the tests, the mutation gate and the pilot ran. The feed is 180,000 real records; the attacks are the pilot’s six shapes. A breach shows only if the referee calls one.

the gate · live

◊ THE GATE HOLDS · 0 breaches
pace

Each square is a request. Blue: a genuine feed record, admitted and posted. Pink: an attack refused at the gate, on raw bytes, before any parsing. Purple: an attack the immune system already knows, dropped on sight. Gold: a valid packet you sent yourself. Red appears only if the referee sees the app act on something it should not have.

the immune system · live

requests seen 0
feed records admitted 0
feed position —
books equal the feed loading…
refused at the gate 0
dropped on sight 0
stopped by behaviour 0
antibodies 0
breaches (the referee) 0
immunity 0 of 6
your attacks 0
what you now owe nothing
what the gate spends 1 hash

known attack shapes

✓ the family is learned; ✓✓ the exact bytes are dropped on sight. Antibodies are minted only for refusals that can never become valid, and only after this node’s own gate refused them, so the immune system cannot turn on genuine records.

launch attacks · the pilot’s six shapes

Each shape is built from the latest genuine record, exactly as the pilot built it against the real node. The out-of-range record is signed with the genuine key and still refused: a valid signature does not get bad bytes past the layout check. Your own bytes go in the console under Break it.

the rebound · what attacking costs the attacker

refusals from a sourcehashes it must spend for one lookhashes the gate spends to check

Computed by the rebound kernel (src/rebound.mjs). Under 100 refusals a source pays nothing, so a genuine partner that makes a mistake is never charged. Past that the price is the attacker’s own work, spent on its own machine. Nothing is sent back at it.

The Liveware PilotSealed first, measured second, failures kept

One real node, as node run.mjs starts it, ran as the ingest gateway for a partner’s payment feed: the 180,000 records of a public dataset, with the six attack shapes injected mid-feed. Every claim below was committed to git before the measuring code existed; the measurement refuses to run if a claim has changed since its seal.

loading receipts/pilot.json…

The run

Seals: . Receipt: receipts/pilot.json. Re-run it yourself: node pilot/measure.mjs (the whole pilot) or node pilot/check.mjs (what CI runs: the ledger and the books re-derived from the feed alone, and a real node re-run on the first 3,000 records).

How we got here, including what went wrong

One more thing we found after the run: six test processes left over from earlier, unrelated work on the same laptop had been running flat out for days and were competing with the node for the whole pilot. They have been stopped. The 194.6 records a second is what the node did with them running, so it is a floor, not a ceiling; the receipt stays exactly as measured.

The CISO’s two claims, read straight. ciso-1 was sealed as “0 DNS lookups”. The node makes one: when it starts, Node’s own listen() passes the address it binds to, the literal 127.0.0.1, through dns.lookup. Node answers an IP literal itself, and no resolver is asked. The claim as sealed counts the call, so it fails and stays failed. ciso-3 was sealed after that look and before the full run, and measures what a CISO needs to know: once the node is listening, it makes no outbound attempt of any kind.

The CFO’s receipt

The cost case is arithmetic, not a prediction, so it is not sealed. Its one measured input is the records a second one node sustained in this pilot. Run it with your figures in the next section.

The herd · living defenceA zero-day lands once. Then every node closes the hole itself

Every defence has a flaw nobody has found yet. When an attacker finds one in the gate, the same flaw is in every node, because every node runs the same code. Before this change, a breached node shared the attack with its peers, but a peer will not refuse bytes its own gate admits (no defence may ever turn on genuine traffic), so the same attack landed once on every node. Now the herd shares the proof instead.

A zero-day lands on node 1; its referee flags it; node 1 shares the packet; each peer re-checks it with its own gate and its own grammar; every node then refuses the packet and its variants at the door a zero-daythe gate lets it inon node 1, once node 1’s refereeits own grammar says no:a breach, written down the proof travelsthe packet itself, signed,to every peer at once each peer checks it itselfits gate accepts the formand its grammar rejects it?then, and only then the door closesthe packet and everyvariant, on every node measured on five real nodes: — · peers closed in — · — · — a genuine record passes both checks, so it proves nothing and patches nothing
  1. It lands once. A packet the gate admits reaches the app. The referee checks every admitted message with its own grammar, written apart from the gate, and this one breaks it: a breach.
  2. The proof travels. The node switches its referee’s grammar on as a stage of its door, writes the packet to its journal, and shares it with its peers, signed, at once.
  3. Each peer checks it itself. A peer takes nobody’s word for it. It runs the packet through its own gate and its own grammar. Only if its gate accepts the packet’s form and its grammar rejects it, a zero-day proven on the peer itself, does it switch the grammar on too.
  4. The hole closes for the whole family. From then on every node refuses at its door anything its grammar rejects: the same packet, and every variant of it.
  5. Nothing genuine pays for it. A genuine record passes both checks, so it is admitted as before. A peer that shares a genuine record as if it were an attack proves nothing and patches nothing. The proof is kept in each node’s journal and checked again at every restart.

Measured, sealed first, on five real nodes

To measure what the herd does with a zero-day, we planted one: in the measuring process alone, a module hook loads the gate with its period limit off by one, so it accepts period 1200, a month past its limit. The shipped gate is untouched. The attack is the attack kit’s own out-of-range record, signed with the ingest key: the stolen-key case. Five nodes, as node run.mjs starts them, each pinning the other four, over loopback HTTP. The claims were committed before any measuring code existed.

loading receipts/herd.json…

Seal: . Receipt: receipts/herd.json. Re-run it yourself: node herd/measure.mjs (under a minute). CI runs node herd/measure.mjs --check on every push, and every claim must come out the same.

What this does not show, said straight. The flaw was planted so the result can be checked; a real zero-day is found by an attacker, and this measures what the herd does once one lands. Five nodes on one machine, not five devices. A stolen ingest key is part of the scenario; a node’s host taken over at the root, or physical access, is out. The attack packets are the attack kit’s own shapes, because we do not build new attack generators. So a mutating swarm of AI attackers has not been run against the herd; that, like an outside red team, is an open invitation (see Break it). The patch also closes only what the independent grammar can see: a flaw in both validators at once would not be caught this way.

The tarpit · living defenceA confirmed attacker waits for nothing, and pays for the wait itself

The gate refuses every packet it cannot verify, at once and for almost nothing. A determined attacker, an automated one especially, simply sends again. The rebound already makes a source that keeps being refused pay proof-of-work before it is looked at. The tarpit is the next step, for a confirmed attacker only. Its refusals are no longer answered at once. The node holds the answer open, sends one space a second for twenty seconds, then sends the same refusal it would have sent. An attacker that waits spends its own time and connection on nothing. One that will not wait never learns why it was refused. Every refusal is still written down and turned into an antibody, as before.

A packet reaches the gate. Admitted: answered at once, whoever sent it. Refused: answered at once unless the source is a confirmed attacker and the refusal is one no genuine key causes; then the answer is held twenty seconds, one space a second, then the same refusal. Every refusal is still journalled and becomes an antibody. a packetfrom any addresspaying any work owed the gate answersadmitted: sent at once,whoever sent it a confirmed attacker?refused 500 times before,a refusal no key causes held twenty secondsone space a second,then the same refusalat most 64 at once still harvestedjournalled, minted,shared with the herd measured: — · — · — anything else (not confirmed, a work challenge, a counter a retry could cause) is answered at once
  1. Separation first. The tarpit decides after the gate has answered. A packet the gate admits is answered at once, from any address, so a genuine client never waits, even on the same address as an attacker. So are a proof-of-work challenge (anyone can pay it and get through), a replay or out-of-order counter (a genuine retry can cause one) and a behaviour refusal of a signed packet.
  2. Only a confirmed attacker. A source is confirmed once the gate has refused it 500 times, the top rung of the rebound’s ladder. Below that, every refusal is answered at once.
  3. Only a refusal no genuine key causes. A packet of the wrong size, form or grammar, from a sender the node does not know, with a signature that does not verify, or a known attack recognised on sight.
  4. The waste. The answer is held for twenty seconds, one space a second, then the refusal is sent exactly as it would have been. JSON ignores leading spaces, so the answer still reads as the same refusal. Nothing else is sent: no redirect, no script, nothing aimed at the attacker’s systems. Everything happens on this node.
  5. Bounded, and it fails to the ordinary answer. At most 64 answers are held at once. When the tarpit is full, a refusal goes out at once. A source that closes the connection ends its hold, and nothing is kept for it. It is off unless the operator switches it on.

Measured, sealed first, on a real node

One node as node run.mjs starts it, at the tarpit’s shipped settings, and a twin with the tarpit off where a claim compares, each in its own process. The attacker sends the attack kit’s own forgery from one address and pays the proof-of-work the node asks. Genuine records from the pilot’s feed come from another address, and from the attacker’s own. The claims were committed before any measuring code existed.

loading receipts/tarpit.json…

The two that failed, and why

loading…

What GitHub’s machine printed, run by run

CI re-runs the whole measurement on GitHub’s own machine on every push. p-4 and p-5 turn on how fast the attacker’s machine pays the proof-of-work, so CI prints its own verdict on those two without requiring it to match the receipt. Each line below is copied word for word from a run’s log into receipts/tarpit-ci.json (node tools/ci-tarpit.mjs <run>), because GitHub deletes logs after a while. Every recorded run is listed, the ones where p-5 failed as well as the ones where it held. loading receipts/tarpit-ci.json… The committed receipt keeps the laptop’s verdicts, because that is the run the claims were judged on.

Questions buyers ask

Seal: . Receipt: receipts/tarpit.json. Re-run it yourself: node tarpit/measure.mjs (about ten minutes: most of it is the attacker waiting). CI runs node tarpit/measure.mjs --check and node tarpit/twins-7b.mjs --check on every push. Every claim must come out the same, except p-4 and p-5: they turn on how fast the attacker’s machine pays the proof-of-work, so CI re-runs them and prints its own verdict without requiring a match. That rule was added after the first run, and is said here.

What this does not show, said straight. One node on one machine; the attacker and the genuine clients are local processes, not the internet. An attacker that will not wait escapes the waste quickly, though it learns nothing. A flood from many addresses is met by the rate limit and the queue, not the tarpit. A stolen key, root on the host and physical access are out. The attack is the attack kit’s own forgery, because we do not build new attack generators. The tarpit wastes a confirmed attacker’s time, leaves the proof-of-work tax and the harvest as they were, and never reaches into anyone else’s systems. It does not make the node invulnerable.

Cost case · your figuresThe managed path against a node you own

The managed path in front of an ingest API is a web application firewall plus an API gateway, metered per million requests. Every price is a published list price, read from its primary page with the date below; every volume is yours. The case is computed by src/cost.mjs, which the mutation gate covers like the gate itself. break-it has no licence fee.

55 W: the pilot chip’s maximum, all month
Bank of England, 22 Oct 2026
the National Living Wage floor

the same case as your volume grows

requests a monthmanaged pathnodesnode pathyou keep a year

Each row is the same kernel with your figures above and only the volume changed. The managed bill grows with every million requests; the node path grows only when the measured rate needs another machine.

What the managed line leaves out, so it never overstates the saving against you: the compute behind the gateway that would have to check each signature, data transfer, logging and support plans. What the node line includes on purpose: the chip’s full 55 W every hour of the month, at the household price cap (the average UK business price was lower; see the sources below). The standing charge is paid whether a node runs or not, so it is left out.

Every price this case reads, with its source

How it worksOne record’s path, traced from the pilot

The numbers on the diagram come from the pilot’s receipt: what the real node did with the feed and the six injected attacks.

A record passes HTTP limits, the antibody check, the rebound, the six gate stages, the sentinel, the ledger, the app and the referee; refusals feed the journal and the antibody library partner feed— antibodieson sight— reboundowes work?free under 100 THE GATE · on raw bytes, in order size → magic → schema →sender → signature → counter — refused sentinelbehaviourGEP ladder ledgerfsync first— naive app—— journal → family → antibodyshared to pinned peers, re-run first the referee watches here one node · — · — once listening
  1. Limits first. The HTTP layer refuses a body without an exact Content-Length, a chunked body, anything over 336 bytes, and more than 300 requests a second from one address (bursts to 600). Nothing is parsed yet.
  2. On sight. The packet’s SHA-256 is looked up in the exact-antibody library. A known attack is dropped here, after one hash, and the gate double-checks it would refuse it anyway, so an antibody can never block a genuine record.
  3. The rebound. A source past 100 gate refusals must attach a proof-of-work token bound to this packet and this ten-second window. The gate checks it in one hash. The pilot’s feed never owed anything.
  4. The gate. Size, magic number and version, the exact layout of the payload, a pinned sender, the Ed25519 signature over a domain prefix and the bytes, then the counter, which must be exactly the last one plus one. A REC record is 11 bytes: an account (1–99,999,999), a month (January 2000 to December 2099) and an amount (0–100,000,000), each checked as an integer on the bytes.
  5. The sentinel. Verified traffic can still be wrong if a key is stolen. The sentinel watches each sender’s behaviour on Gary W. Floyd’s GEP ladder: a drain, a destruction run, posting over 10,000,000 in 64 records, or a mix that deviates from the sender’s own baseline is throttled, stepped up or blocked.
  6. The ledger, then the app. The packet is written to a hash-chained ledger and fsync’d before the app sees it. On restart every packet is run through the gate again; one altered byte and the node refuses to start.
  7. The referee. After every admitted message, the referee checks it with its own grammar and the ledger, and checks the app’s state is a replay of the ledger. This is the win oracle, and nothing else decides a break.
  8. Every refusal teaches. The journal records the stage, the reason, the family and a fingerprint. Refusals that can never become valid mint exact antibodies; each is signed and sent to pinned peers, which re-run it on their own gates before adopting it.

BlueprintOrgan by organ

Each decision is a pure kernel with its own tests, and every kernel is under a mutation gate: the gate changes the code one operator at a time and the tests must catch every change. Survivors are only allowed with a written reason (witness.baseline.json). CI runs all of it on every push.

organfilewhat it decidesmutation gate
wiresrc/wire.mjsthe one exact layout, the raw check, the canonical parse (a packet cannot be read two ways)—
gatesrc/gate.mjsverify before parse, in order, fail-closed: the only door to the app—
sentinelsrc/sentinel.mjsbehaviour on verified traffic: drain, destruction, inflation, deviation—
immunesrc/immune.mjseach refusal’s family, fingerprint and novelty; a source’s standing—
antibodysrc/antibody.mjsexact and shape antibodies, negative selection, key-set binding—
chainsrc/chain.mjsthe ledger’s hash chain: removal, reordering or editing breaks it—
reboundsrc/rebound.mjsthe cost law: difficulty, the elastic release, the ratchet—
refereesrc/referee.mjsthe win oracle: its own grammar, the tripwire, the fold—
appsrc/app.mjsthe naive target: it trusts whatever reaches it, on purpose—
lootsrc/loot.mjsthe Breaker’s Rune: what the signed breach certificate commits to—
feedsrc/feed.mjsthe partner feed read as records, and the books it must produce—
costsrc/cost.mjsthe CFO’s case from your figures and sourced prices—
sharesrc/share.mjswhat a node tells its pinned peers, in LIGHT: the mesh’s key order, antigens to bytes and back, the share counter—
patchsrc/patch.mjsthe herd’s evidence rule: only bytes this node’s gate admits and the independent grammar rejects prove a zero-day, and switch the grammar on at the door—
tarpitsrc/tarpit.mjswhich refusals a confirmed attacker waits for, the cap, the inert drip—
herd judgeherd/judge.mjseach sealed herd claim held against what five real nodes did—
tarpit judgetarpit/judge.mjseach sealed tarpit claim held against what was measured—
pilot judgepilot/judge.mjseach sealed claim held against what was measured—
serversrc/server.mjsone node: HTTP limits, the serial queue, ledger then app, the herd’s door, the tarpit’s hold; I/O, so proved end to end by the red-team battery, the pilot, the herd and the tarpit runsbattery + pilot + herd + tarpit
ledger, journalsrc/ledger.mjs · src/journal.mjsappend-only files, fsync, one writer, torn-tail trimming, over the gated chainbattery
node adapternode/breakit-node.mjsbreak-it as a node of the estate’s shared foundation (vendor/fall-kit-core, pinned): its gate offered to other nodes as the screen skillwitness v0.6, its own CI step
LIGHT codecvendor/light/the estate’s one codec, read-only; the nodes share antibodies as signed LIGHT packetsSHA-256 pinned, tested
the mutation gate.witness/ · witness-all.mjswitness v0.6, vendored byte for byte; CI compares it with a fresh clone of the tag before it runspinned, CI
the attack kitattack-kit/the attacker’s tools and the red-team battery; none of it is trusted by the nodebattery receipt, CI

White-box red teamYou are invited to break it

The whole source is public, the attack kit is in the repository, and the battery of 79 attacks re-runs in CI and must reproduce its receipt byte for byte. Here is the console: paste or build any packet and send it through the same node this page runs.

the console

waiting for your first packet

the rules

You win if the referee sees the app act on a message the gate never admitted, the gate admit a packet the referee’s own grammar rejects, an action that does not match its ledger entry, or a state that stops being a replay of the ledger. The node then mints a signed, re-runnable Breaker’s Rune.

In scope: any bytes, any HTTP, any timing you can send to a node you run yourself (node run.mjs, or node run.mjs --mesh 3 for three pinned nodes), the antibody share endpoint, and this page’s console.

Out of scope: GitHub Pages itself, machines you do not own, flooding anything that is not yours, and the private key file: whoever holds a sender’s private key is that sender, which is why the sentinel exists.

Report a break as an issue or a pull request to FINDINGS.md, with the bytes and the node’s journal line. Every attack that is new becomes a vaccine (tools/vaccinate.mjs) that CI replays forever.

github.com/sjgant80-hub/break-it · the battery’s receipt · FINDINGS.md

For your businessWhat it does for each part of the company

break-it sits in front of a feed you take in, from a partner, a supplier or a fleet of devices, and lets nothing reach your systems that it cannot prove came from the sender you trust, in the order they sent it, in the exact shape you agreed. Every refusal is written down with its reason and teaches the gate; it runs on a machine you own.

CEO

One way in, closed. The records the business runs on can come only from the partners whose keys you pinned. A leaked password, a spoofed API call or a replayed file gets nothing, and the proof is a public battery anyone can re-run.

CFO

The managed equivalent is metered per million requests and rises with volume. A node is a machine you own; its running cost is electricity. The cost case above takes your volumes and dated list prices, and adds nodes when your volume needs them. No licence fee, no per-seat bill.

COO

It does the ingest, not just the filtering: 180,000 real records posted, with the app’s books equal to the feed on every one of 210,000 keys, while six attacks were refused around them. The feed did not stop for an attack. One laptop at the pilot’s 194.6 records a second carries about 16.8 million records a day.

CTO and CISO

Ed25519 per sender, a domain-separated signature, a strict counter, fail-closed on raw bytes. The node listens on loopback and makes no outbound connection, measured. A hash-chained ledger and attack journal. A mutation gate and a white-box red-team battery in CI.

Engineering and data

One wire format with a 16-byte header and a signed payload; the REC record carries an account, a month and an amount. A partner-side adapter of a few dozen lines writes it (src/client.mjs is the reference). Node 20, no dependencies, MIT.

Compliance and the DPO

Nothing goes to a third party, so there is no processor to contract and no transfer to assess. The gate reads only the fields the record needs. Every decision has a stage and a reason, and the ledger can be re-derived from the source feed by anyone holding it.

Security operations

Triage starts from reasons, not raw logs: every refusal names its stage and why, and the journal adds its family and fingerprint. A known attack is dropped on sight after one hash. If a flaw in the gate is ever found, the first node it lands on proves it and every pinned node closes the hole itself (the herd, measured above). A confirmed attacker can be held in the tarpit, which is off until you switch it on. Nothing is ever sent back at anyone. On its own machine each node answers /health, /journal, /immune and /referee with what it has admitted, refused and learned, as JSON your monitoring can read.

Procurement

Supplied by AI Native Solutions, where every deployment starts. MIT licence, no licence fee. No third-party packages: it runs on Node 20 and the files in the repository, two estate libraries among them, vendored and pinned by hash. The source, the tests, the sealed claims and the receipts are public, so a security questionnaire can be answered from the repository. The only outside material is the pilot’s public dataset (CC BY 4.0) and the GEP ladder the sentinel follows (Open Defensive Prior Art, Creative Commons), each credited in NOTICE. Support, service levels, warranty and liability are written into each deployment’s agreement; leaving costs nothing.

Against what you pay for now

managed WAF + API gatewaybreak-it
what it checksrules over a parsed request: patterns, rates, sizeswho signed it, its counter and its exact layout, on raw bytes, before any parse
forged or replayed recordspass if they look normalrefused at the signature or the counter, by construction
a stolen keynot its jobthe sentinel stops a stolen feed key posting credit without end at record 5 (red-team case)
learningrules you or the vendor writeeach refusal mints antibodies; pinned nodes share them, each re-running first
where your data goesthrough the provider’s edgenowhere: the node is on your machine and makes no outbound connection
how it is billedper ACL, per rule, per million requestsno licence fee; the machine and its electricity
proofthe vendor’s wordsealed claims, receipts, a re-runnable battery and a mutation gate in public CI

Security, data protection and audit

Roll-out

  1. Week 1, your machine, your numbers. Run node pilot/measure.mjs on the hardware you would use. You get your own receipt: your rate, your egress meter, your books.
  2. Weeks 2–3, shadow. Point a copy of one partner feed at a node through a signing adapter. Compare the node’s books with your system’s, record by record.
  3. Week 4, gate. Put the node in front of that feed. Refusals go to the journal; your team reads reasons, not raw logs.
  4. Then, the mesh. More nodes, pinned to each other, so an attack on one teaches all of them, and a flaw proven on one is closed on all (the herd’s patch is on unless a node is started with herdPatch: false). Switch the tarpit on when you want confirmed attackers held (tarpit: true). Then the next feed.

Ownership, support and exit

The software is MIT-licensed: no licence fee, the code is yours, and it keeps running without us. It is supplied by AI Native Solutions, where every deployment starts: contact them through that site. Support, service levels, warranty and liability are agreed per deployment, in each deployment’s agreement. Leaving costs nothing: the ledger and the journal are plain files.

Risks, answered straight

“One address is limited to 300 records a second.”
By design, with bursts to 600, so one source cannot crowd out the rest. A partner that sends faster sends from more addresses, or you run more nodes; the cost case adds nodes for your volume.
“How fast is one node?”
In the pilot, on one laptop, every record had its signature checked and was fsync’d to disk before the app saw it, at the rate the receipt shows. Disk sync is the ceiling; a server disk raises it.
“Our partners don’t sign records.”
They need a signing adapter at their end. That is what makes verify-before-parse possible: there is nothing to verify in an unsigned record.
“A partner’s key is stolen.”
The sentinel watches verified behaviour; in the battery a stolen feed key posting credit without end is blocked at record 5. Rotate the key and the node stops trusting the old one.
“What if the gate has a hole?”
The referee is written separately from the gate and checks every admitted message. A packet the gate admits and the referee’s own grammar rejects is a breach: that node switches the grammar on at its door, writes the packet to its journal, mints a signed rune and shares the packet with every pinned peer. Each peer checks the proof on its own gate and its own grammar before it closes the same hole, so the flaw lands once in the mesh, not once on every node (the herd, measured above). The packet is the fix’s test. A flaw in the gate and in the grammar at once would not be caught this way.
“How does a partner reach a node on loopback?”
Through what already carries the feed to you. Your TLS endpoint, VPN or file drop runs on the same machine and passes each record to the node. The node never needs a port on the network, so it adds nothing to your attack surface there.
“A partner sends a record wrongly by mistake.”
It is refused with its stage and reason, written to the journal, and the partner resends it correctly with the next counter. Mistakes cost a partner nothing: the rebound starts only after 100 refusals.
“Has anyone outside tested it?”
Not yet. The battery, the pilot, the herd and the tarpit runs are ours; what an outsider can do today is re-run every one of them, since the code, the claims and the receipts are public and CI re-runs them on every push. No outside team has reported on it, and no break has been filed in FINDINGS.md. Your own red team is welcome: the rules are in Break it.
“High availability?”
One node writes one ledger, under a lock. For capacity or a second site, run more nodes, each with its own ledger, pinned to each other.

The case for the board

The exposure. Every feed we take in is a door, and the software behind it reads bytes before it knows who sent them. One breach costs USD 4.99 million on average worldwide (IBM, Cost of a Data Breach Report 2026).

The move. A gateway that proves the sender, the order and the shape on raw bytes before anything reads them, learns every attack it refuses, makes repeat attackers pay, and runs on our own machines.

The proof. Claims sealed before measurement, a real node on 180,000 real records, a 79-case attack battery and a mutation gate, all re-runnable in public CI.

The living defence. A flaw planted in the gate landed once, on the first of five nodes it reached; the other four checked the proof themselves and closed the hole, and the same attack sent to them afterwards was refused. A confirmed attacker can be made to wait for nothing. Both were measured against claims sealed first, and the claims that failed are on this page.

The ask. A four-week pilot on one feed, on our hardware, with our numbers.

White paperVerify before parse, measured

1 · The problem

An ingest service’s first act is to parse. The parser is the largest piece of code that ever touches an attacker’s bytes, and it runs before any decision about who sent them. Rules that inspect a request after it has been parsed come too late for the attacks that live in the parse itself, and they cannot tell a forged or replayed record from a genuine one when the bytes look ordinary.

2 · The design

Each record is a fixed-layout packet: a 16-byte header (magic number, version, sender, a 64-bit counter, the payload length), a payload whose exact grammar is fixed per operation, and a 64-byte Ed25519 signature over a domain prefix and everything before it. The gate checks the stages in order on the raw bytes, and the canonical parser is total: for every packet the gate accepts, encoding its parse gives back the same bytes, so no packet can be read two ways. The sentinel then judges behaviour per verified sender; the ledger is written and synced before the app acts; the referee checks the app against the ledger and an independent grammar.

3 · The immune system

Each refusal is an antigen: classified into a family, fingerprinted, written to a hash-chained journal. Refusals at stages that can never become valid (size, magic, schema, sender, signature, replay) mint exact antibodies keyed by the packet’s hash and bound to the pinned key set; every refusal adds a shape antibody that recognises the family by distance in feature space. Negative selection: a node adopts an antibody only after its own gate refuses the antigen, so a peer cannot make it reject genuine traffic. Shares are signed and batched, so a flood of unique forgeries cannot make the mesh do unbounded work.

4 · The rebound law

A source that has been refused 100 times owes a proof-of-work token per packet (12 leading zero bits, about 4,096 hashes), 500 times 18 bits (about 262,144). The token is bound to the time window, the source and the packet, so it cannot be precomputed or reused. The defender checks it in one hash. The law holds three ways, all tested: no amplification at the defender, the attacker spends at least as much as the defender, and the price never falls as refusals rise. Nothing is emitted back at the source.

5 · The method

The estate’s organ pattern: seal, measure, judge. The pilot’s claims were committed to git before the measuring code existed, and the measurement refuses to run if a claim file differs from its commit. The judge is a pure function under the mutation gate. Failed claims are kept on the page with what was measured. The egress meter proves it can see with a canary before its zero is trusted.

6 · The herd: one landing, then the whole mesh patches itself

Negative selection has a price. Because an antibody may never refuse bytes the node’s own gate admits, a flaw in the gate itself, a zero-day, cannot become an antibody: every node runs the same gate code and would admit the same bytes once each. What a node can share instead is evidence that proves itself. The referee checks every admitted message with a grammar written apart from the gate; a packet the gate admits and that grammar rejects is a zero-day, and the packet itself is the proof. A peer that receives it takes nobody’s word: it runs the packet through its own gate and its own grammar, and only if the gate admits it and the grammar rejects it does it switch the grammar on as a stage of its door (src/patch.mjs). From then on the door refuses the packet and every variant the grammar rejects. A genuine record passes both checks, so a peer that shares one proves nothing and patches nothing. The proof is journalled and re-checked at every restart.

Measured by planting a flaw (the gate’s month limit off by one, inside the measuring process only) under five real nodes, with claims sealed before the measuring code: the receipt is receipts/herd.json, shown in the herd section above.

7 · The tarpit: a confirmed attacker waits for nothing

The rebound slows how fast a repeat attacker can arrive; the tarpit wastes the time of each attempt that does. It decides after the gate has answered, so it can only ever delay a refusal, never an admission. It holds only refusals no genuine key causes (wrong size, form or grammar, an unknown sender, a bad signature, a known attack), only from a source the gate has refused 500 times, and at most 64 at once. A held answer is one space a second for twenty seconds, then the exact refusal it would have sent. When the tarpit is full, the ordinary answer goes out at once; a source that leaves ends its own hold, and nothing is kept for it. It is off unless the operator switches it on (src/tarpit.mjs).

Measured on a real node and a tarpit-off twin, each in its own process, at the shipped settings, with claims sealed before the measuring code: the receipts are receipts/tarpit.json and receipts/tarpit-7b.json, with what GitHub’s machine printed on each recorded CI run in receipts/tarpit-ci.json.

8 · Results

Each measurement has its own section above, with every sealed claim, what was measured and whether it held: the pilot (with the run’s machine and timing, and the history of the attempts, including the first full run that stopped because the sender exhausted Windows’ ephemeral ports), the herd and the tarpit. The failures are kept beside the claims that held, with what went wrong.

9 · What it is not

It is not a general web firewall: it guards one exact wire format, and a partner writes that format through an adapter. It is not a replacement for keeping private keys safe: the holder of a sender’s key is that sender, which is why the sentinel watches verified behaviour. One node writes one ledger. The herd closes only what the independent grammar can see, and the tarpit does not meet an attack spread over many addresses.

10 · References
  • Gary W. Floyd, Lumiea Systems Research Division, ThunderStruck Service, LLC, “GEP-Based Security: Behavioral Entropy Signatures for Cybersecurity and DevOps” (2025): the GEP ladder the sentinel uses, published as Open Defensive Prior Art under Creative Commons.
  • I.-C. Yeh and C.-H. Lien, “The comparisons of data mining techniques for the predictive accuracy of probability of default of credit card clients”, Expert Systems with Applications 36(2), 2009. Dataset: UCI Machine Learning Repository, DOI 10.24432/C55S3H, CC BY 4.0.
  • RFC 8032, Edwards-Curve Digital Signature Algorithm (EdDSA).
  • The list prices and statistics in the cost case, each linked with the date it was read.

FAQQuestions buyers ask

What is break-it?
A secure ingest gateway. It sits in front of a feed you take in from partners or devices and checks every record's Ed25519 signature, its counter and its exact layout on the raw bytes before any software parses it. Every refusal becomes an antibody that recognises the same attack on sight, a repeat attacker must pay proof-of-work for each new look, and an independent referee watches the app behind it. It is MIT-licensed, runs on your own machine and sends nothing out.
Has it been tested on real data?
Yes. In the Liveware Pilot one real node ingested all 180,000 payment records of the UCI Default of Credit Card Clients dataset (DOI 10.24432/C55S3H) in 925 seconds, 194.6 a second on a laptop, with every signature checked and every record synced to disk before the app saw it. Its books equalled the feed on all 210,000 keys, six attack shapes injected mid-feed were each refused and then dropped on sight, and the referee found 0 breaches. 9 of the 10 claims sealed in git before the run held; the one that failed is kept on the page with its reason.
Does it send data anywhere?
No. The node listens on 127.0.0.1, has no telemetry and calls no service. In the pilot an egress meter loaded into the node process before the node counted every TCP, TLS, UDP, DNS and fetch attempt: once the node was listening there were none. The only call it made at all was Node resolving the literal 127.0.0.1 it binds to, which Node answers itself. The live page runs the same kernels in your browser under a security policy that allows requests only to its own files.
What does it cost to run compared with AWS WAF and API Gateway?
break-it is MIT-licensed with no licence fee; the running cost is the machine and its electricity. The page's cost case uses your own volumes with dated list prices: at AWS's own worked example of one web ACL, 19 rules and 10 million requests a month, WAF is $30.00 and a REST API Gateway adds $35.00, while one node drawing the laptop chip's 55 W maximum all month costs £10.57 at the Ofgem cap for October to December 2026.
What counts as breaking it?
The referee decides, and it is written independently of the gate. You win if the app acts on a message the gate never admitted, if the gate admits a packet an independent grammar rejects, if an action does not match its ledger entry, or if the app's state stops being a replay of the ledger. A win mints a signed Breaker's Rune.
Who supplies and supports it?
AI Native Solutions (ai-nativesolutions.com). The software is MIT-licensed and keeps running without us. Support, service levels, warranty and liability are agreed per deployment, in each deployment's agreement.
Whose work does it build on?
The sentinel's behaviour ladder is Gary W. Floyd's GEP ladder (Lumiea Systems Research Division, ThunderStruck Service, LLC; “GEP-Based Security: Behavioral Entropy Signatures for Cybersecurity and DevOps”, 2025), published as Open Defensive Prior Art under Creative Commons. The product is powered by the Konomi architecture, created by Thomas Frumkin, used with his permission. The pilot's feed is the UCI Default of Credit Card Clients dataset by I.-C. Yeh and C.-H. Lien, CC BY 4.0.