Four-scheme jamming comparison and a fully generated refresh table

Give the orthogonal-access jammer its own Rayleigh channel in
oma_ser_jammed, matching the convention every simulated scheme already
used. Without it the closed-form curve faced a jammer at full power in
every frame while the Monte Carlo curves faced a fading one, which
inverted the ordering of the comparison.

Measure the outsider error rate for the fixed-key and naive-refresh
cases as well, and emit the two refresh tables from make_tables.py, so
no cell of the paper is hand-typed.
This commit is contained in:
KiHoLee
2026-08-13 22:22:18 +09:00
parent 057c555374
commit c31e6a3fe0
17 changed files with 192 additions and 61 deletions
+12 -9
View File
@@ -24,14 +24,14 @@ hold the key, at no extra bandwidth, power, or rate.
```
code/
sse_lib.py transmit and receive core, channel, training, OMA reference
exp_full.py stages A-F: SNR sweep, key length, jamming, key families,
scheme comparison, attack difficulty
exp_full.py stages A-F and L: SNR sweep, key length, jamming across
schemes, 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/
make_tables.py LaTeX rows of the two result tables, from data/
make_tables.py LaTeX rows of every result table, from data/
feasibility_security.py early CPU-sized study, kept for the record
data/ CSV results, one file per stage
fig/ figure PDFs, regenerated by replot_security.py
@@ -47,15 +47,18 @@ libraries.
```bash
python verify_math.py # closed-form verification, prints PASS/FAIL
python exp_full.py # stages A-F
python exp_full.py # stages A-F and L
python exp_kpa.py # known-plaintext attack
python exp_refresh.py # the key-refresh layer
python exp_real_sec.py # real token streams
python replot_security.py # all figures from the CSVs
python make_tables.py # LaTeX rows of the result tables
```
Seeds are fixed: training 1, evaluation 777, attacker key guess
20260813. Re-running reproduces the released CSV files.
20260813, key recovery 4242, brute-force search 31, cross-scheme
comparison 11, key refresh 5150. Re-running reproduces the released CSV
files.
## Figure and table map
@@ -63,15 +66,15 @@ Seeds are fixed: training 1, evaluation 777, attacker key guess
|---|---|---|
| Fig. 2 SER against SNR | `exp_full.stage_A` | `sec_snr.csv` |
| Fig. 3 key length | `exp_full.stage_B` | `sec_keylen.csv` |
| Fig. 4 jamming | `exp_full.stage_C` | `sec_jam.csv` |
| Fig. 5 key sensitivity | `exp_full.stage_F` | `sec_sens.csv` |
| Fig. 6 brute-force search | `exp_full.stage_F` | `sec_brute.csv` |
| Fig. 4 jamming | `exp_full.stage_L` | `sec_jam_cmp.csv`, `sec_jam.csv` |
| Fig. 5 key sensitivity | `exp_full.stage_I` | `sec_sens_cmp.csv` |
| Fig. 6 brute-force search | `exp_full.stage_J` | `sec_brute_cmp.csv`, `sec_brute.csv` |
| Fig. 7 known-plaintext attack | `exp_kpa` | `kpa.csv` |
| Fig. 8 real token streams | `exp_real_sec` | `real_sec_ter.csv` |
| 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` |
| Key refresh tables | `exp_refresh` | `refresh_summary.csv`, `refresh_kpa.csv` |
## Security scope