Main's correction (19:1x BST): v4-devnet3-epoch0 is cut and public-kit class (zip sha256 e025750f..., program.json 0xfce15bf61030be57 at attempt 0, fingerprint e510ad92b4d24846, exported under igneum-pow6bb52c50, byte-identical toc3d32437); verified on build-1 by this lane and handed to the three lanes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
13 KiB
The in-house adversarial pass on the lottery hash
Internal adversarial pass, not an independent review. 7 October 2026, 19:1x BST, the crypto-engage lane on the project lead's correction through main: nothing goes outside. No firms, no paid lots, no briefs to anyone. The three targets of Counter ASIC 3.0 item 3 (the mixer
M_r, the chained cache, the acceptance rule) are attacked by three lanes that have never worked on the hash code, under the outsider rule below. The only outside check that remains is the disclosure prize, staged (section 10).
0. One page
| Item | State |
|---|---|
| What was planned until 18:5x BST | Three external lots (docs/plans/cryptanalysis.md on branch cryptanalysis, docs/plans/funding.md row "Independent cryptanalysis") with firm shortlists and price rows |
| the project lead's correction (through main, 7 October, evening) | Nothing goes outside. No firms, no paid lots, no briefs to anyone. The lane becomes the in-house adversarial pass on the same three targets |
| The pass | Three adversarial lanes, one per target, each given only what an outsider would have, each writing an attack plan first and then a report in the attack-pass shape |
| The defender | The Counter ASIC lane; main rules disputes |
| The clock | Plans within two hours of start; first results by tomorrow evening UK |
| The label | "internal adversarial pass, not an independent review" on every public sentence |
| The outside check | The disclosure prize, USD 50,000, approved 7 October 09:5x UK, STAGED until escrow, the entity address and the project lead's publish word; nothing public names it until then |
1. The target, exactly
| Piece | Value |
|---|---|
| The frozen object | igneum-pow at commit 017e70376489251e18564c0abce7e466e606c8b3 on branch ca3-v4-amend (tag audit-freeze-2026-10-07); byte-identical on master since cf7d6ccb |
| The class | Class v4 sub-version 3: PROGRAM_SUBVERSION_V4 = 3, object byte 7 |
| The rules in the object | (a') dataflow freshness to a fixpoint; the shared-operand rule in the draw; (c'') the per-site distinct-index ratio at 0.98 over 2^20 evaluations; the 256-attempt cap and the deterministic last-resort draw |
| Program ids | The shared devnet's epoch-0 id a785001687d8688a (the kaspa-pow pairing pin); Devnet 3's epoch-0 id fce15bf61030be57 (attempt 0, sub-version 3) |
| The kit | packs-ca3-v4-sub3 zip, sha256 4f2445c50c58d76a5544023492d8b858d0b07c5e372d31f9c90c4ce51f829154, eight packs: the contents of proto-cuda/packs-ca3-v4/ at the frozen commit (mx8-devnet-epoch0 the class v3 control, v4-devnet-epoch0, v4-era-0 to v4-era-5) |
| The Devnet 3 pack | v4-devnet3-epoch0 (zip sha256 e025750f71175ed14d6e2a24e387ebbf1979b1cd0faee9139c41a7671165b334, 12 files, program.json 0xfce15bf61030be57 at attempt 0), on build-1 at /srv/artefacts/packs/v4-devnet3-epoch0/ and .zip; Metal and Apple OpenCL fingerprint e510ad92b4d24846 at 2^24 from base 0; exported under igneum-pow 874e945d (byte-identical to 017e7037) over Devnet 3's genesis with day bytes le64(20733); public-kit class, verified by this lane on build-1 at 19:1x BST |
| The dataset under attack | Spec docs/spec/01-lottery-hash.md 1.8: ChaCha12 cache fill in 2^16 segments of 64 chained lines; the ARX-multiply mixer with per-day ROT, MUL, RC from a 64-bit SplitMix64 seed; m = 8, 72 applications per item, 8 dependent cache reads |
| The acceptance rule under attack | Spec 1.4.6 as the code igneum-pow/src/accept.rs implements it at the frozen commit (the code is the truth where the spec lags it) |
2. The three lanes
| Lane | Target | Branch | Worktree | Plan (two hours) | Report | Box 2 core band |
|---|---|---|---|---|---|---|
| adv-mixer | The mixer M_r: shortcut across the 8 keyed applications, the round margin, weak parameter draws |
adv-mixer |
igneum-wt-adv-mixer |
docs/plans/cryptanalysis/plan-mixer.md |
docs/analysis/cryptanalysis/report-mixer.md |
64 to 95 |
| adv-cache | The chained cache: a line under j + 1 blocks, the storage-against-recompute curve, line-index uniformity, steering, the segment structure |
adv-cache |
igneum-wt-adv-cache |
docs/plans/cryptanalysis/plan-chained-cache.md |
docs/analysis/cryptanalysis/report-chained-cache.md |
32 to 63 |
| adv-accept | The acceptance rule and the generator: steering bypass, the stand-in gap, attempt grinding, header grinding, generator distinguishers | adv-accept |
igneum-wt-adv-accept |
docs/plans/cryptanalysis/plan-acceptance-rule.md |
docs/analysis/cryptanalysis/report-acceptance-rule.md |
0 to 31 |
Each lane's branch starts from the build mirror's master (3f0afcd5) and is pushed to the build mirror only. GitHub is dark tonight.
3. The rule set
3.1 What a lane receives (the outsider's inputs, and nothing else)
| Input | Where the lane reads it |
|---|---|
The crate igneum-pow/ (src, tests, Cargo files) at the frozen commit |
master's copy, verified byte-identical with git diff --stat 017e7037 HEAD -- igneum-pow printing nothing; the result stated in the plan |
The spec docs/spec/01-lottery-hash.md at the frozen commit |
git show 017e7037:docs/spec/01-lottery-hash.md |
The chip model docs/analysis/chip-model-v3.md sections 1, 2, 5 and 6 |
the worktree's HEAD |
| The public kit: the eight packs | proto-cuda/packs-ca3-v4/ at the frozen commit; the zip sha256 above |
| The two program ids and the Devnet 3 pack | stated in the lane's prompt; the pack read from build-1 (/srv/artefacts/packs/v4-devnet3-epoch0/, sha256 above), handed to the lanes at 19:1x BST after their start |
The attack harnesses tools/attack/f8-uniform and the F4 census tools/attack/f4-weakday |
f4-weakday from build/attack-pass; f8-uniform from the Mac worktree igneum-wt-attack-regate (that branch is not on the mirror); copied, never edited in place |
| The operating files needed to run anything | tools/build-remote.sh, infra/build-server/lib.sh, infra/build-server/remote-run.sh |
3.2 What a lane does not receive
| Withheld | Why |
|---|---|
docs/plans/counter-asic-3-status.md (section 7c and all) |
the defender's reasoning on AP-F8-1, the localisation, the cost lines |
docs/fud-ledger.md, docs/fud-fixes.md |
the ledger entries on AP-F8 and every earlier finding |
docs/analysis/attack-pass/* and docs/analysis/attack-pass-2026-10.md |
the hash lane's and the attack-pass lane's notes and results |
docs/analysis/ca3-v4-uniform.md, docs/plans/mixer-x4.md, docs/analysis/weak-program-census-2026-10-03.md, proto-metal/MEMHARD.md |
defender's analyses |
docs/plans/funding.md, docs/plans/cryptanalysis.md, this file |
the ranked questions as the defender ranked them, the known gaps as the defender knows them |
git log, commit messages, other branches and worktrees, site/ |
commit messages carry the defender's reasoning; the site carries the defender's numbers |
Known leaks, stated: CLAUDE.md loads on its own in every lane (operating rules; the lane follows no pointer from it into other docs); the harness sources carry doc comments written by the attack-pass lane. Each plan lists every file the lane opened, so the defender can read what the lane knew.
3.3 How a lane states a result
A result is a BREAK (a method with a measured or counted gain, reproducible from the command and the seed) or a BOUND (what was searched, with what tools, how far it reached, the margin left). "Nothing found" counts only with its effort stated in box-hours and tools. Every number carries its command, its seed and its log path on the box.
4. The budget, in box-hours
Box 2 (igneum-build-2) at 18:5x BST: load 23 on 96 cores, 3 slots, all three free. Every lane run is the bounded class (nice 10, a 32-core band, -j 32), so three lanes never share a core and a gate still takes its slot ahead of them.
| Lane | Slot band | First results | Proposed ceiling before main's word | Notes |
|---|---|---|---|---|
| adv-mixer | 64 to 95 | 8 box-hours | 16 | SAT and MILP searches on reduced rounds; the 2^24 day-key census |
| adv-cache | 32 to 63 | 8 box-hours | 16 | one 256 MiB cache fill per day key; the 2^28 line-index census |
| adv-accept | 0 to 31 | 8 box-hours | 16 | the 10^6-seed passing-program search; the stand-in against the live dataset |
| Total | 3 slots | 24 box-hours (APPROVED by main, 19:1x BST) | 48 (ask main before crossing 24) | a box-hour is one slot for one hour (32 cores); 24 box-hours = 768 core-hours |
A lane holds one slot at a time. A run over 10 minutes is built through tools/build-remote.sh --box 2 and started on the box with nohup, nice -n 10, taskset to the lane's band, a pid file beside its log under /srv/builds/igneum-wt-adv-<lane>/adv/; killed by pid file only. No GPU tonight: a GPU measurement is BLOCKED and says so. Nothing runs on the Mac.
5. Deliverables
| Deliverable | Content | When |
|---|---|---|
| The attack plan | The target restated from the spec and code in the lane's own words; the questions in the lane's order; the method and tool per question; the known-failed shape per method (a planted weakness the tool must fire on); the box-hour estimate per step; every file opened | within two hours of start |
| The report, attack-pass shape | A header with the target commit, the binary's sha256 and the box; a status board with one row per question (method, known-failed shape, gate, result with numbers, status PASS / RUNNING / BLOCKED / FINDING); one section per row with the exact command, the seed, the log path and the numbers | first results by tomorrow evening UK; pushed as it grows |
| Attack code | Under tools/attack/adv-<lane>/, its own crate depending on igneum-pow by path; the originals of f8-uniform and f4-weakday untouched |
with the report |
6. Review
| Role | Who | What |
|---|---|---|
| Defender | The Counter ASIC lane | Reproduces every BREAK from the command and the seed before any ruling; checks every BOUND's effort statement against the box logs; reads each plan's opened-files list against section 3.2 and voids a lane's result that used a withheld input |
| Ruling | Main | Disputes between a lane and the defender; what a confirmed finding moves (section 9); extensions of the box-hour ceiling |
| Coordinator | This lane | Spawns and clocks the lanes, keeps this file, collects the reports, writes the ledger rows when main says so |
A finding is not a failure of the pass. It is the reason the pass exists.
7. The clock
| Step | UK time |
|---|---|
| Lanes spawned | 7 October 2026, 19:1x BST |
| Plans pushed to the mirror | by 21:10 BST, 7 October |
| First results in each report | by 18:00 BST, 8 October |
| Defender's read of each report | within 24 hours of its first results |
| Disputes to main | as they arise; ruling before any public sentence moves |
8. The label
Every sentence about this pass that could be quoted in public carries "internal adversarial pass, not an independent review". The site, the litepaper and docs/evidence.md row 17 said "the cryptanalysis plan buys three external lots" and "the three cryptanalysis lots are the next test"; main lands the replacement. No public text names a firm, a price or an engagement.
9. What a finding moves
| Case | What moves | Cost |
|---|---|---|
| A BREAK confirmed before the public testnet's vectors freeze | A parameter or a shape on the v4 seam, or a class v5 rule; the packs and the 96-vector sets re-cut through the seam, the verifier re-measured against the 10 ms gate, the soundness suite re-run, the cross-vendor fingerprints re-taken | hours of agent work; one PC job per vendor; no chain event |
| A BREAK confirmed after the testnet's first miner | A class change behind its activation height with the six gates and the two-publish rollout | an announced reset on the testnet; on mainnet the governance event the plan exists to avoid |
| A BOUND only | The chip model's "ops per hash" input carries an internal effort bound in place of "no cryptanalysis"; it is labelled internal, never "reviewed" | the box-hours only |
10. What this pass is not
It is not an independent review and is never called one. Nothing is sent outside, nothing is paid, nobody is contacted. The disclosure prize (USD 50,000 for a reproduced break of the published hash class, approved by the project lead 7 October 2026, 09:5x UK) is the only outside check and stays STAGED: announced only when escrowed, only when the entity's registered address exists on its documents, and only on the project lead's publish word. The entity is not yet named in the repository beyond the launch pack's "Igneum Labs LTD". Until the word, grep -ci "50,000" site/*.html is 0 and disclosure prize stays in site/forbidden-strings.txt.
11. The coordinator's own inputs (defender side, not given to the lanes)
docs/plans/funding.md (the row and the brief), docs/plans/cryptanalysis.md on branch cryptanalysis (sections 1, 3.3, 3.4, 4.2), docs/plans/counter-asic-3-status.md section 7c, docs/plans/release-0.3.22.md, docs/analysis/attack-pass-2026-10.md (the report shape), docs/plans/build-server.md sections 7 and 7.0, infra/build-server/lib.sh, tools/build-remote.sh, the spec at the frozen commit, docs/plans/launch-pack.md and docs/plans/testnet-go.md LG-13.