diff --git a/docs/analysis/cryptanalysis/report-acceptance-rule.md b/docs/analysis/cryptanalysis/report-acceptance-rule.md index 47e6684f8..9b51b13ee 100644 --- a/docs/analysis/cryptanalysis/report-acceptance-rule.md +++ b/docs/analysis/cryptanalysis/report-acceptance-rule.md @@ -5,7 +5,7 @@ internal adversarial pass, not an independent review - Target commit: 017e70376489251e18564c0abce7e466e606c8b3 (class v4 sub-version 3, object byte 7). - Crate built: igneum-pow at the frozen commit (this worktree's igneum-pow/ is reset to it; build/master diverged by 635 deletions and is not used). Harness: tools/attack/adv-accept (depends on igneum-pow by path). -- Re-base (18:3x UTC): build/master moved to 7a7caa34 whose igneum-pow IS the frozen object; merged at +- Re-base (19:3x BST): build/master moved to 7a7caa34 whose igneum-pow IS the frozen object; merged at 8748e955ceb48be5a6cbf7f8718a4884d3de9828; `git diff --quiet 017e7037 HEAD -- igneum-pow` prints IDENTICAL. Nothing measured here was on a stale tree: igneum-pow/ had been reset to the frozen object before the first build. - Binary sha256 (first build, box 2): e3d35f4464937f91aac0648e2ee7134f33c85c7aa314b87b33f91059dedc6682 (adv-accept @@ -15,7 +15,7 @@ internal adversarial pass, not an independent review nice 10 on every idle core, the capacity layer's yield (run-box.sh). Logs under /srv/builds/igneum-wt-adv-accept/adv/ on each box (spared from the checkout clean by .igneum-scratch-spare; the first 10k log on box 2 was wiped by a rebuild before the spare existed and is void anyway: old labels, old binary). -- Lane scope since 18:2x UTC: THE BYPASS (Q1, Q2, Q5). Q3 is lane adv-accept-3's, Q4 lane adv-accept-2's. +- Lane scope since 19:2x BST: THE BYPASS (Q1, Q2, Q5). Q3 is lane adv-accept-3's, Q4 lane adv-accept-2's. - Seed space: the attack-pass F8 label space (program k = seed_words("igneum-attack-f8/program/k"), era ".../era/k"), so `adv-live warps --program k` measures the live hot set of exactly the program the sweep reports. - rustc 1.99.0 both sides. First results by 8 October 2026 18:00 UTC. GPU: not available, so any per-card @@ -34,7 +34,7 @@ check is owed once I copy its program.json read-only from build-1. | Q | Method | Known-failed shape (must fire) | Gate | Result | Status | |---|---|---|---|---|---| -| Q1 | Steering/hot set: the chain's class v4 draw over the F8 label space (shards of 100k seeds; 18:27Z to 18:4xZ under the SIGSTOP yield, since 18:4xZ nice 10 on cores 8-95, no yield), the stand-in per-site ratio at 256 units as the proxy, the live hot set by the unmodified f8 harness (adv-live) on the lowest-ratio seeds and on a consecutive-seed census | adv-live const-item plant FLAGGED (21.8x, X_1% +6.49); clean control 0.9996x PASS | X_f >= f flags a hot set; gain = implied on-die SRAM copy size | seed 100767 (of 4,600 accepted) flags the hot-set test at 2^24 nonces: X_0.1% +0.155%, 2.05x; four lowest-ratio seeds all BEYOND the f8 1.2x gate live; 27 random accepted programs: 0 beyond, 0 hot sets; gain 1.002x (1 MB copy serves 0.31% of loads) | FINDING, bounded: a distinguisher and a seed selector, not an exploitable bypass; sweep RUNNING | +| Q1 | Steering/hot set: the chain's class v4 draw over the F8 label space (shards of 100k seeds; 19:27 BST to 19:4x BST under the SIGSTOP yield, since 19:4x BST nice 10 on cores 8-95, no yield), the stand-in per-site ratio at 256 units as the proxy, the live hot set by the unmodified f8 harness (adv-live) on the lowest-ratio seeds and on a consecutive-seed census | adv-live const-item plant FLAGGED (21.8x, X_1% +6.49); clean control 0.9996x PASS | X_f >= f flags a hot set; gain = implied on-die SRAM copy size | seed 100767 (of 4,600 accepted) flags the hot-set test at 2^24 nonces: X_0.1% +0.155%, 2.05x; four lowest-ratio seeds all BEYOND the f8 1.2x gate live; 27 random accepted programs: 0 beyond, 0 hot sets; gain 1.002x (1 MB copy serves 0.31% of loads) | FINDING, bounded: a distinguisher and a seed selector, not an exploitable bypass; sweep RUNNING | | Q2 | Stand-in gap: a validated mirror runs the rule's own units on the closed form and on the live dataset; per-site ratio at 2^20 and the (c) metrics compared | zero-dataset plant: live 0.9733 REJECT against closed accept (fired) | any false accept that reads a hot set on the live set | 4 + 6 programs so far: max site gap 0.0003, 0 verdict disagreements | BOUND (widening to 50 RUNNING) | | Q3 | Handed to lane adv-accept-3 (unspawned); row 90 (exhaustion census: per-part rejections, cap, last resort) claimed by this lane, owner adv-accept-3 | forced-exhaust plant must hit the cap and print the last-resort program | P(exhaust) bounded; last resort characterised | attempts census over 20k seeds RUNNING (box 2); plant RUNNING | RUNNING (owner adv-accept-3, unspawned) | | Q4 | Handed to lane adv-accept-2 | | | | HANDED OVER | @@ -51,15 +51,15 @@ Command: `adv-accept plant --seed 0` on box 2. Ten shards of 100,000 seeds (k = 2..1,000,001 of the F8 label space), each `adv-accept sweep --seed-start S --seeds 100000 --threads 96 --ratio-units 256 --out /srv/builds/igneum-wt-adv-accept/adv/sweep-sNN.txt`, started through run-box.sh (nice 10, yield to -builds, pid/pgid/yield pid files beside the log). Shard 00 (S = 2) on box 2, started 18:27Z. Shard 01 -(S = 100,002) on box 1, started 18:30Z. Shards 02..09 sit as self-contained scripts in +builds, pid/pgid/yield pid files beside the log). Shard 00 (S = 2) on box 2, started 19:27 BST. Shard 01 +(S = 100,002) on box 1, started 19:30 BST. Shards 02..09 sit as self-contained scripts in /srv/builds/_adv/accept/queue/ on box 2 (claim by mkdir under claims/), to be run back to back on whichever box has idle cores. Every row is written as it lands, so a partial shard is data. Live hot set (the measure the chip model prices): `adv-live warps --program k --nonces N` (the unmodified f8 harness: the day's items derived into a table, the cross-hash item histogram, the hot-set test X_f >= f against the window-model control, the 6-sigma test, library agreement checks). -Known-failed shape run first: `--plant const-item` on program 2 at 10^6 nonces (box 1, 18:30Z, log +Known-failed shape run first: `--plant const-item` on program 2 at 10^6 nonces (box 1, 19:30 BST, log adv/live-plant-p2.log) beside its clean control (adv/live-control-p2.log). The plant must be FLAGGED and the control clear before any live number below is trusted. @@ -81,7 +81,7 @@ Numbers land here when the run finishes (first results by 8 October 18:00 UTC). ## Results as they land -### Tool validation (box 1, 18:30Z, 10^6 nonces each, about 30 s per run on 32 threads) +### Tool validation (box 1, 19:30 BST, 10^6 nonces each, about 30 s per run on 32 threads) | Run | Hot-set test (window-model control) | Top 0.1% share ratio over the window model | 6-sigma | Verdict | |---|---|---|---|---| @@ -91,7 +91,7 @@ Numbers land here when the run finishes (first results by 8 October 18:00 UTC). The plant fires and the control is clean, so the live hot-set numbers below are trusted. Logs adv/live-plant-p2.log and adv/live-control-p2.log on box 1. -### Sweep shard 01, first 864 accepted programs (box 1, seeds 100,002..., read at 18:33Z) +### Sweep shard 01, first 864 accepted programs (box 1, seeds 100,002..., read at 19:33 BST) | Metric | Value | |---|---| @@ -108,12 +108,12 @@ lossy-last-write programs concentrate reads on the LIVE set is what the live cen ### Rule change in the method column (box-hours honesty) -18:27Z to 18:4xZ: shards ran under the capacity layer's SIGSTOP yield and were paused almost the whole -time (a build slot held nearly continuously on both boxes). Ruling at 18:4xZ: yield dropped, every sweep at +19:27 BST to 19:4x BST: shards ran under the capacity layer's SIGSTOP yield and were paused almost the whole +time (a build slot held nearly continuously on both boxes). Ruling at 19:4x BST: yield dropped, every sweep at nice 10 on cores 8-95 (cores 0-7 reserved for release builds, the seed and the observer). Shards 00 and 01 -SIGCONTed and re-pinned at 18:4xZ. Box-hours before the ruling: about 0.1 of running time. +SIGCONTed and re-pinned at 19:4x BST. Box-hours before the ruling: about 0.1 of running time. -### Live hot set of the five lowest-ratio shard-01 programs (box 1, 18:37Z, 10^6 nonces each) +### Live hot set of the five lowest-ratio shard-01 programs (box 1, 19:37 BST, 10^6 nonces each) All five pass the rule (they are the chain's accepted programs). Log logs/adv-accept/live-lowratio-s01.log. Columns: the f8 gate (top 0.1% share over the window-model control, gate 1.2x), the hot-set excess X_f at @@ -126,7 +126,7 @@ f = 0.1% and 1% (a hot set needs X_f >= f), the windowed 6-sigma test, the hotte | 100064 | 2442abf9d56f6611 | 2 | 0.9988 | 1.17x | +0.044% / +0.189% | +77.3 sigma FLAGGED | 54 reads; the flag is a 256-item bucket at p43 (iteration 2, site 11, instr 33) holding 0.048% of that position's reads against 0.0061% expected (8x) | | 100767 | 9d68e6286fc817d4 | 2 | 0.9988 | 1.34x BEYOND the 1.2x gate | +0.087% / +0.138% | +68.0 sigma FLAGGED | 0x000000, 1677 (0.0013%), site instr 6 reads r6 = zero, writer mad@4; saturated-source share 0.013% at that position (the (c') limit is 1%) | | 100159 | 573d650159a8b04e | 3 | 0.9988 | 1.07x | +0.020% / +0.124% | +37.5 sigma FLAGGED | 37 reads, none | -| p2 control (18:30Z) | f8 seed 2 | | | 0.9996x | +0.00% / +0.47% (flat) | clear | 32 reads | +| p2 control (19:30 BST) | f8 seed 2 | | | 0.9996x | +0.00% / +0.47% (flat) | clear | 32 reads | Reading, as an attacker. (1) The stand-in ratio does correlate with live concentration: four of the five lowest-ratio seeds flag the windowed 6-sigma test at 10^6 nonces where the random control is clear, and one @@ -137,7 +137,7 @@ reads. An on-die copy of these items saves under 0.1% of DRAM reads: no row of c one iteration, below the (c') 1% limit (0.013% here), so (c') never fires, and the per-site ratio at 0.98 is loose enough (these sit at 0.9986) that (c'') never fires either. -### FINDING (bounded): seed 100767 at 2^24 nonces passes the rule and flags the f8 hot-set test (box 1, 18:4xZ) +### FINDING (bounded): seed 100767 at 2^24 nonces passes the rule and flags the f8 hot-set test (box 1, 19:4x BST) Reproduce in one command, from the frozen crate (017e7037) with the unmodified f8-uniform harness built as adv-live (tools/attack/adv-accept, `cargo build --release`): @@ -193,7 +193,7 @@ programs gave X_0.1% = 0.155%. If the tail scales as the extreme of the populati times that, still under 1% of reads. The census over consecutive seeds (random accepted programs) says how often the hot-set test fires in the population; that number lands below. -### The selector's base rate (sweep rows read at 18:5xZ: 16,337 accepted programs, shards 00 and 01) +### The selector's base rate (sweep rows read at 19:5x BST: 16,337 accepted programs, shards 00 and 01) The stand-in per-site ratio at 256 units, over every accepted program so far (one row per seed; every seed of the F8 label space yields an accepted program through the chain draw): @@ -222,7 +222,7 @@ output register in 13,662 (83.6%), register-set collapse 0. ### Row 90 (owner adv-accept-3, unspawned; claimed): the attempt loop, the cap and the last resort -Known-failed shape fired (box 2, 18:50Z, `adv-accept attempts --seed-start 2 --seeds 3 --force-exhaust`, +Known-failed shape fired (box 2, 19:50 BST, `adv-accept attempts --seed-start 2 --seeds 3 --force-exhaust`, log adv/attempts-plant.log): with every verdict read as a rejection the loop hits its cap and hands the last-resort program, which the tool prints and re-checks. The three last-resort programs (cap 8 under the plant): every or, mul and mulhi rewritten to xor (op mix xor 17 to 19, load 16, 0 lossy ops, 8 registers @@ -232,7 +232,7 @@ is NOT weak by the rule's own measures; it is a program with no lossy op at all, measure has not yet been run on (owed). The 20k-seed census of real attempts (per-part rejections, cap reached, P(exhaust)) is running (attempts-20k.log); its numbers land here. -### Q2, the stand-in gap: first bound (box 2, 18:46Z, `adv-accept gap`) +### Q2, the stand-in gap: first bound (box 2, 19:46 BST, `adv-accept gap`) Tool: a mirror interpreter with per-site index capture, run on the rule's own base nonces (seed-keyed acceptance stream) with init words = seed words, once on the closed-form dataset and once on the LIVE @@ -257,9 +257,9 @@ and 100064 sits 0.0032 above the 0.98 floor at 2^20, so the floor is live in the ### Live hot-set census (RUNNING) -- box 2, 18:5xZ: `adv-live census --programs 2..201 --nonces 1000000 --threads 32` (200 consecutive accepted +- box 2, 19:5x BST: `adv-live census --programs 2..201 --nonces 1000000 --threads 32` (200 consecutive accepted programs of shard 00's range: the random sample), log adv/live-census-s00-2-201.log. -- box 1, 18:5xZ: `adv-live warps --program k --nonces 1000000` for the five lowest-ratio shard-01 seeds, log +- box 1, 19:5x BST: `adv-live warps --program k --nonces 1000000` for the five lowest-ratio shard-01 seeds, log adv/live-lowratio-s01.log. ## Running notes diff --git a/tools/ci/export-exclude.txt b/tools/ci/export-exclude.txt index 24ef752e7..60c0dec78 100644 --- a/tools/ci/export-exclude.txt +++ b/tools/ci/export-exclude.txt @@ -15,3 +15,6 @@ docs/analysis/ci-failures-2026-10-06.md # 7 October 2026: the last research round (the mission lanes and the closed list): internal research written for the # owner, quoting his words and the operations record; the public spec mirror carries none of it docs/analysis/mission +# 7 October 2026: the adversarial cryptanalysis lanes (internal adversarial pass, not an independent review): research +# written for the owner with box operations, run logs and clock readings; the public spec mirror carries none of it +docs/analysis/cryptanalysis