Commit Graph
28 Commits
Author SHA1 Message Date
KiHoLee 8d29dfa5ad Reproducible V8, stored V5 row, token collision probability 2026-08-26 15:02:21 +09:00
KiHoLee d061a9be88 Figures after the caption and Fig. 1 revisions 2026-08-26 13:27:21 +09:00
KiHoLee 50b2994e4a Figure legends after the read-through 2026-08-22 15:01:49 +09:00
KiHoLee 3229a25bfa Per-stage invocation and the permutation-variant measurement 2026-08-22 14:54:49 +09:00
KiHoLee 58a85c30f6 Sync with the audited manuscript
The jammed OMA model now matches the transmit chain the paper
describes, the key-length sweep averages the eavesdropper over eight
substitute-key draws, and verify_math gains the coded-OMA outage
reference, symbolic checks of the three algebraic identities, and the
cross-period remainder of Proposition 2. The README records the energy
and channel conventions.
2026-08-22 14:47:17 +09:00
KiHoLee 0b0796df55 make_tables matches the manuscript's remaining tables 2026-08-22 12:47:43 +09:00
KiHoLee 24019e901a Leakage, semantic and robustness experiments from the revision 2026-08-22 12:24:39 +09:00
KiHoLee e4da750812 Figure fonts and legend inset for the 0.85 include 2026-08-19 18:55:04 +09:00
KiHoLee 9cd105e748 Figure fonts for the 0.80 include 2026-08-19 18:22:52 +09:00
KiHoLee 1de366cd9b Figure geometry for the 0.68 include 2026-08-19 17:58:34 +09:00
KiHoLee 55e417276d Covariance attack at the main configuration, stored to data/
The ciphertext-only check trained its own L=16 model and printed only a
verdict; it now attacks the main configuration and writes
data/cov_attack.csv, which the manuscript cites.
2026-08-19 17:32:28 +09:00
KiHoLee f378da511c Plotting-code review: stale comments and duplicated constants removed 2026-08-19 16:31:01 +09:00
KiHoLee e243b29d29 Audit round: stored degeneracy measurement, figure guards, 44 assertions
diag_maskdegen writes data/maskdegen.csv so the claim it supports is
traceable; the legend guard inflates by the marker radius and refuses a
legend that leaves the canvas; one legend size on every figure.
2026-08-19 15:08:38 +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 8f26bf9bc9 Main configuration d=256, L=64: all data, figures and checks re-run
Every OMA reference takes the L/16 combining gain so the comparison
stays resource matched, four hardcoded copies of the configuration are
replaced by MAIN_D or the main curve, and stage_J's K-by-L Gaussian
draw becomes its exact scalar Beta equivalent.
2026-08-18 14:40:48 +09:00
KiHoLee fef629a218 Add the diagnostics behind the no-interference claim 2026-08-18 13:40:34 +09:00
KiHoLee f828018160 Add a mangled-macro scan and a ratio inset for the OMA comparison
check_texhealth.py flags control characters and bare macro stubs left
by a shell heredoc, a class of corruption that LaTeX compiles without
complaint. It skips when main.tex is absent, as in this package.

fig_sec_snr now carries an inset with the OMA-to-proposed SER ratio,
since the 1 to 9 percent advantage is invisible across two decades of
log axis, and save() now guards inset overlap as it guards the legend.

check_consistency covers the L=8 crossover, the inset ratio span, the
stated secret sizes, and the Fig. 5 curve coincidence: 29 assertions.
2026-08-18 13:25:48 +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 3d5a7fc6f3 Structured key family as the main configuration
Unconstrained key training converged to disjoint sparse supports: 99
percent of each users key energy sat on three or four of the sixteen
entries, with pairwise disjoint supports and one numerically dead
codebook column. That is an orthogonal slot allocation, so the
superposition collapsed into OMA and the key space was far smaller than
the dense direction the brute-force study assumes.

The main configuration is now the structured Walsh-Hadamard family,
which is dense, exactly orthogonal, unit modulus, and already the best
family in the key-family table. base_keys generalizes to any key length
by truncating the next power-of-two Sylvester order, and the key-length
sweep keeps only lengths where the truncated rows stay exactly
orthogonal, verified numerically.

Also fixes the M-PAM energy normalization in oma_ser_keylen, which used
sqrt(6g/(M^2-1)) where unit average symbol energy gives A^2=3/(M^2-1);
the closed form was 3 dB optimistic and now reproduces a direct Monte
Carlo to 1e-5.

Results move accordingly: the proposal now stays below OMA at every SNR
and reaches 1.52x at key length 64, while the jamming margin falls to
5.5-6.3 dB and the brute-force curve to 0.59 at a million guesses.
2026-08-17 20:02:27 +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 47d974a5bf Add check_consistency.py, correct two stale figures in comments
check_consistency.py asserts every headline number against its raw CSV,
so a stale quoted value fails loudly instead of surviving a revision. It
skips the manuscript-side assertions when main.tex is absent, which is
the case in this package.

The blind-versus-permutation agreement is 0.002, not 0.0015, and the
resource-matched OMA is undefined below L=16 rather than wherever 16/L
is not an integer.
2026-08-17 00:06:25 +09:00
KiHoLee 3529ab1918 Audit round: fair OMA reference, dense grids, covariance-attack checks
Resource-match the OMA reference in the key-length sweep (oma_ser_keylen),
which gives it the L/16 combining gain the longer frame allows. The
proposal now passes a resource-matched OMA by 1.27x at L=64 rather than
the 4.3x reported against a fixed-d reference.

Densify the JSR, sensitivity, and brute-force grids so the curves are
smooth, give the index cipher its channel floor instead of error-free
reception, and add the permutation-key known-plaintext attack
(exp_permkpa) so Fig. 7 carries a conventional linear scheme.

Add check_cov_attack.py and check_cov_ceiling.py: a referee raised a
ciphertext-only second-order attack; the exact-population test shows the
received covariance leaks only a sparse rank-deficient subset of the key
Gram and leaves the eavesdropper at the random-guess level.

Dump verify_math.csv, move the superseded V=256 pilot CSVs to data/pilot.
2026-08-16 23:48:39 +09:00
KiHoLee fbbad154b2 Match the README key-entropy wording to the manuscript
The fixed key space is 15.0 bits, counted over the L-1 non-constant
Walsh-Hadamard rows, since the design excludes the all-ones row.
2026-08-14 01:45:10 +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 057c555374 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.
2026-08-13 21:46:45 +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