From 9cded88f08869d54c26c25e48ee99397ff55e437 Mon Sep 17 00:00:00 2001 From: KiHoLee Date: Fri, 28 Aug 2026 10:07:27 +0900 Subject: [PATCH] Sync data and code after the per-digit re-audit --- code/exp_users_csi.py | 8 ++++++-- code/replot_security.py | 13 +++++++------ code/verify_math.py | 8 ++++---- fig/fig_sec_brute.pdf | Bin 34199 -> 33993 bytes fig/fig_sec_jam.pdf | Bin 40133 -> 40130 bytes fig/fig_sec_keylen.pdf | Bin 30392 -> 30392 bytes fig/fig_sec_kpa.pdf | Bin 35148 -> 34782 bytes fig/fig_sec_real.pdf | Bin 37785 -> 37785 bytes fig/fig_sec_sens.pdf | Bin 30347 -> 30347 bytes fig/fig_sec_snr.pdf | Bin 39233 -> 39233 bytes 10 files changed, 17 insertions(+), 12 deletions(-) diff --git a/code/exp_users_csi.py b/code/exp_users_csi.py index 4d4a4dc..ed058e6 100644 --- a/code/exp_users_csi.py +++ b/code/exp_users_csi.py @@ -27,6 +27,7 @@ sys.path.insert(0, str(Path(__file__).resolve().parent)) import sse_lib as L from sse_lib import DATA, DEVICE, rayleigh_gain, snr_to_sigma2, eval_ser_sse from exp_full import (main_model, base_keys, get_model, eve_wrong_mask, + oma_ser_keylen, eval_ser_eve, mean_abs_xcorr, MAIN_D) SNR = 10.0 @@ -112,12 +113,15 @@ def main(): ew = eve_wrong_mask(U, Lp, seed=20260813) ev = eval_ser_eve(m, ew, [SNR], frames=FRAMES)[0] xc = mean_abs_xcorr(m.masks().detach()) - rows.append((U, "%.6f" % lg, "%.6f" % ev, "%.6f" % xc)) + # OMA gets its own d/U dimensions per user at this load + oma = oma_ser_keylen(MAIN_D // U, SNR) + rows.append((U, "%.6f" % lg, "%.6f" % ev, "%.6f" % xc, + "%.6f" % oma)) print(" U=%2d legit %.4f eve %.5f xcorr %.2e" % (U, lg, ev, xc), flush=True) with open(DATA / "users.csv", "w", newline="") as f: w = csv.writer(f) - w.writerow(["users", "legit_ser", "eve_ser", "mask_xcorr"]) + w.writerow(["users", "legit_ser", "eve_ser", "mask_xcorr", "oma"]) w.writerows(rows) print("[csv]", DATA / "users.csv", flush=True) diff --git a/code/replot_security.py b/code/replot_security.py index 4e67e45..8b74a0e 100644 --- a/code/replot_security.py +++ b/code/replot_security.py @@ -347,7 +347,6 @@ def fig_jam(): ax.set_xlabel("JSR (dB)") ax.set_ylabel("SER") ax.set_xlim(min(x), max(x)) - ax.set_ylim(0.0, 1.02) # keep the reference line off the spine place_legend(ax) save(fig, "fig_sec_jam") @@ -386,11 +385,11 @@ def fig_brute(): x = col(r, "K") fig, ax = plt.subplots() ax.semilogx(x, col(r, "ser_perm"), color=C_EVE, marker="s", ls="--", - label=LBL["perm"], **UNDER) + markevery=(0, 3), label=LBL["perm"], **UNDER) ax.semilogx(x, col(r, "ser_pad"), color=C_PUB, marker="v", ls="-.", - label=LBL["pad"], **OVER) + markevery=(1, 3), label=LBL["pad"], **OVER) ax.semilogx(x, col(r, "ser_mask"), color=C_LEGIT, marker="o", ls="-", - label=LBL["mask"]) + markevery=(2, 3), label=LBL["mask"]) legit = main_legit() ax.axhline(legit, color=C_OMA, ls=(0, (4, 2)), lw=0.9, label=LBL["legit"]) @@ -430,16 +429,18 @@ def fig_kpa(): fig, ax = plt.subplots() sty = {0.0: (C_LEGIT, "o"), 10.0: (C_EVE, "s"), 20.0: (C_PUB, "v")} - for snr, (c, mk) in sty.items(): + for off, (snr, (c, mk)) in enumerate(sty.items()): rows = [row for row in r if float(row["snr_db"]) == snr] n = [float(row["n_frames"]) for row in rows] ser = [float(row["eve_ser"]) for row in rows] ax.semilogx(n, ser, color=c, marker=mk, ls="-", + markevery=(off, 4), markerfacecolor="none" if off else c, label=LBL["mask"] + f", {int(snr)} dB") try: p = load("pkpa.csv") ax.semilogx(col(p, "n_frames"), col(p, "eve_ser"), color=C_MATCH, - marker="P", ls="--", label=LBL["perm"] + ", 20 dB") + marker="P", ls="--", markevery=(3, 4), + label=LBL["perm"] + ", 20 dB") except FileNotFoundError: print("[skip] pkpa.csv not present yet") # legitimate reference measured with the SAME estimator as the diff --git a/code/verify_math.py b/code/verify_math.py index eb6264c..7d854df 100644 --- a/code/verify_math.py +++ b/code/verify_math.py @@ -130,7 +130,7 @@ def v3_leakage_vs_correlation(): corrs.append(abs((m @ mt) / D)) emp = float(np.mean(corrs)) claim = float(np.sqrt(2.0 / (np.pi * D))) - ok_b = report("V3b random mask E|corr|", claim, emp, 0.1 * claim) + ok_b = report("V3b random mask E|corr|", claim, emp, 0.03 * claim) return lin_ok and ok_b @@ -158,7 +158,7 @@ def v4_blind_jammer_spread(): # full contribution scales this by (hJ^2/hu^2) rho. ok2 = report("V4b blind jammer projection variance", float(np.mean(var_cl)), float(np.mean(var_emp)), - 0.05 * float(np.mean(var_cl))) + 0.01 * float(np.mean(var_cl))) return ok1 and ok2 @@ -282,10 +282,10 @@ def v8_cross_period_terms(): diag = float((a ** 2).sum()) rel.append((float((a.sum(0) ** 2).sum()) - diag) / diag) mean = sum(rel) / len(rel) - ok = abs(mean) < 0.01 + ok = abs(mean) < 0.0005 print("V8 cross-period remainder, mean %+.4f of the retained term" % mean) ROWS.append(("V8 cross-period remainder", "0.0", "%.6f" % mean, - "%.6f" % abs(mean), "0.01", "PASS" if ok else "FAIL")) + "%.6f" % abs(mean), "0.0005", "PASS" if ok else "FAIL")) return ok diff --git a/fig/fig_sec_brute.pdf b/fig/fig_sec_brute.pdf index 060d6bcb0231ad0b04c67101c03d17c7d81b2982..910f2e1dc4e1cc85d1810dc29897d1d5fec78174 100644 GIT binary patch delta 3041 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 O5F}JoOY4-qx#&MqeqPD| delta 3273 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 b_+adBdpKhVvEc|7xPk)9`SY5FS6Ti8x0$(E diff --git a/fig/fig_sec_jam.pdf b/fig/fig_sec_jam.pdf index 116fdd967cb29304a5c8dee72ceb7d1263059ab2..9e4875a78be9b9b4477db17ec12e4646ca7b5faf 100644 GIT binary patch delta 3259 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 T`*wl%jrpMb3JL}mhW!5lWevlr delta 3316 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 delta 22 dcmdn-mT|{h#tmV`>}H0>hGxbFn`4WknE`AO2oeAQ diff --git a/fig/fig_sec_kpa.pdf b/fig/fig_sec_kpa.pdf index 9e90f84e93281c23f9d4d1166ecb5cddd4031329..2121a2fc4299af943ec38be9adf4f46fb5b80b9d 100644 GIT binary patch delta 3363 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 Uh9v%s)&Ttz5=c}Or>_C}52bb8=Kufz delta 3754 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 delta 22 dcmeBv%h>&vaf4$CyP2V}p_#GaW{(nQCIDkI2Y3Jg diff --git a/fig/fig_sec_snr.pdf b/fig/fig_sec_snr.pdf index 54a0c1e3280322526f05ea35d3083bedbe51b1de..76752c29e6a80f2771a5a187835fd7fc0b881cd0 100644 GIT binary patch delta 22 ecmX@OiRs`brVZiK*ewh!P0fwWHpfkS%me^vu?Ua= delta 22 ecmX@OiRs`brVZiK*v$-$4b6-!H^)tT%me^vP6&qp