igneum/docs/plans/cryptanalysis/in-house-pass.md
igneum-labs ce1a28afd6 in-house-pass.md: the Devnet 3 epoch-0 pack joins the lanes' inputs; the 24 box-hour budget approved, ask before 48
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-pow 6bb52c50, byte-identical to c3d32437); verified on build-1 by this lane and handed to the three lanes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:05:08 +00:00

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.