Commit Graph
11 Commits
Author SHA1 Message Date
KiHoLee 669737e83d Learned-key sensitivity, brute-force and real-token stages; legend order
exp_learned.py completes the learned side of the result stages, so every
figure can carry both realizations of keyed masking. real() holds the
structured artifacts aside and restores them, since exp_real_sec writes
fixed file names.

replot_security.py ranks legend handles from one declared order at all
three ax.legend call sites, so entries no longer follow plot-call order
and drift between figures.
2026-08-28 20:31:50 +09:00
KiHoLee c00e8ab666 Learned-key stages, per-scheme plot styles, KM naming
exp_learned.py mirrors every structured result stage for the learned key
family at the same SNRs, frame counts and seeds, so Figs. 2, 3, 4 and 7
and Tables IV and VI can carry both realizations of keyed masking.

replot_security.py gains a style registry: colour identifies the scheme
and line style the role, so a curve learned in one figure reads the same
in the next. Previously OMA was grey in two figures and teal in a third,
and blue meant the eavesdropper in one figure and the permutation key in
another.
2026-08-28 20:15:45 +09:00
KiHoLee 17d23fa76a Ciphertext-only family enumeration, and checks that reproduce off a GPU
check_family_enum.py measures the attack the manuscript now states in
Section III-A: the winning correlation is an index-free verifier, so
ranking the 63 non-constant Walsh rows by mean winning correlation
recovers the user set from one frame in 0.905 of 200 trials at 10 dB
and from four frames in 0.990, using nothing outside the stated threat
model. Under the invariance refresh it recovers it in none, because the
entry permutation relabels the codebook the adversary must align
against.

V8 and V9 read the trained codebook through main_model(), which
retrains on every call, and a codebook trained on CUDA is not the one
trained on CPU. The shipped verify_math.csv therefore read PASS here
and FAIL for anyone running this package without a GPU. model_main.pt
is 7 KB and fixes the codebook, which is what both checks are about;
delete it to retrain. V1-V11 now pass on both.

New checks: V10, the format-matched OMA reference Section VI-B quotes,
and V11, the closed-form against Monte Carlo comparison the manuscript
claimed and never stored. V3a's bias-linearity result was computed and
printed but never written to the CSV, so the one linearity claim the
paper quotes was the one this package could not show.

check_consistency.py gains 21 assertions, covering five data files that
no assertion read (users, csi, semantic, cov_attack, sec_jam) and the
trend claims it structurally could not see, since it compared values
and not shapes.

README: the figure map named stages that do not write the artifacts
they list, so following it did not reproduce Figs. 4 and 6; the
reproduction block was five scripts short; and the refresh numbers were
from a superseded run (nearly three, 15.0 to 64.8 bits) against the
manuscript's 2.3 and 23.8 to 364.6.
2026-08-28 17:40:28 +09:00
KiHoLee 0b0796df55 make_tables matches the manuscript's remaining tables 2026-08-22 12:47:43 +09:00
KiHoLee 2fb64bee3a Figure font scale and legend placement fix from the writing audit
Declared point sizes are now pre-divided by the 0.70 include scale so
the printed sizes are the intended ones, and place_legend scores the
same layout save() enforces.
2026-08-18 21:16:21 +09:00
KiHoLee 3cf3b6c3a7 Re-run the key-length attack sweep and emphasize the main-configuration row
stage_F was missed in the structured-family regeneration, so sec_brute.csv
and sec_sens.csv still carried learned-family results. Re-running it moves
the L=16 brute-force point from 0.7495 to 0.5916, which now agrees with
sec_brute_cmp.csv rather than contradicting it.

make_tables.py bolds the Walsh-Hadamard row the way it already bolds the
proposed and invariant rows, since that family is the main configuration.
2026-08-18 08:48:41 +09:00
KiHoLee b120364e38 Rename comparison rows to the figure labels (Permutation key, Index cipher)
The scheme labels in the comparison table now match the figure legends
verbatim, one label per scheme.
2026-08-17 14:11:55 +09:00
KiHoLee d6af6c19c4 Generate every table cell, including the jammed OMA entry
compare_table now reads the orthogonal jammed cell from sec_jam_cmp.csv,
which stage_L measures, instead of leaving the nan from stage_E. All
nineteen generated rows now appear verbatim in the manuscript.
2026-08-13 22:37:04 +09:00
KiHoLee c31e6a3fe0 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.
2026-08-13 22:22:18 +09:00
KiHoLee 25b5891b04 Final revision: audit fixes, cross-scheme comparisons, known-plaintext stage
- exclude the all-ones Walsh-Hadamard row and test every key family
  against the all-ones guess
- pass the model dimension to the noise scaling so the key-length sweep
  runs at a fixed per-dimension SNR
- known-plaintext attack with nested accumulation and common random
  numbers, averaged over 40 collections
- key sensitivity and brute-force search extended to the permutation
  key and the index cipher
- make_tables regenerates all three result tables from the CSVs
2026-08-13 21:21:46 +09:00
KiHoLee 37392bc38f Keyed masking for secure multi-user semantic communication
Reproducibility package for the TIFS submission: transmit and receive
core, security stages (eavesdropper, jamming, key families, attack
difficulty, known-plaintext), real BERT token streams, closed-form
verification, and the scripts that regenerate every figure and table
from the released CSVs.
2026-08-13 21:01:32 +09:00