Add the key-refresh layer

Derives each block key from the transformations that leave the decision
statistic invariant: a global sign per frame entry, a relabeling of the
frame entries applied to keys and codebook together, and a permutation
of which user holds which row. The legitimate error rate is unchanged
at 0.257 across 24 blocks while a refresh that installs fresh
orthogonal keys reaches 0.710, and a key recovered by known plaintext
returns to the random-guess level one block later.
This commit is contained in:
KiHoLee
2026-08-13 21:46:45 +09:00
parent 25b5891b04
commit 057c555374
4 changed files with 196 additions and 3 deletions
+8 -3
View File
@@ -27,6 +27,7 @@ code/
exp_full.py stages A-F: SNR sweep, key length, jamming, key families,
scheme comparison, attack difficulty
exp_kpa.py stage H: known-plaintext attack on the key
exp_refresh.py stage K: the key-refresh layer, invariance group
exp_real_sec.py stage G: real BERT WordPiece token streams
verify_math.py closed-form checks V1-V5 against Monte Carlo, PASS/FAIL
replot_security.py every result figure, from data/ to fig/
@@ -70,15 +71,19 @@ Seeds are fixed: training 1, evaluation 777, attacker key guess
| Scheme comparison table | `exp_full.stage_E` | `sec_compare.csv` |
| Key family table | `exp_full.stage_D` | `sec_maskfam.csv`, `sec_regjam.csv` |
| Headline recovery table | `exp_real_sec` | `real_sec_stats.json` |
| Key refresh tables | `exp_refresh` | `refresh.csv`, `refresh_kpa.csv` |
## Security scope
The analysis covers an adversary that observes transmitted frames. The
masking is linear, so an adversary that also learns the indices some
frames carried recovers the key from a few frames, which `exp_kpa.py`
measures. The key must therefore be refreshed per coherence block from
a shared seed, as the paper states. This repository implements the
measurement of that limit, not a key-refresh layer.
measures. The key must therefore be refreshed per coherence block from a shared
seed. `exp_refresh.py` implements that layer and shows why it has to
draw from the transformations that leave the decision statistic
invariant: a refresh that installs fresh orthogonal keys instead costs
the legitimate users a factor of nearly three, while the invariant
refresh is free and raises the per-block key to 64.8 bits.
## License