From 37392bc38f226b8f76215c2c9fc3ae98168c8e4f Mon Sep 17 00:00:00 2001 From: KiHoLee Date: Thu, 13 Aug 2026 21:01:32 +0900 Subject: [PATCH] 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. --- .gitignore | 3 + LICENSE | 21 ++ README.md | 86 ++++++ code/exp_full.py | 523 +++++++++++++++++++++++++++++++++++ code/exp_kpa.py | 155 +++++++++++ code/exp_real_sec.py | 195 +++++++++++++ code/feasibility_security.py | 208 ++++++++++++++ code/make_tables.py | 55 ++++ code/replot_security.py | 253 +++++++++++++++++ code/sse_lib.py | 388 ++++++++++++++++++++++++++ code/verify_math.py | 201 ++++++++++++++ data/feas_q1_eavesdrop.csv | 6 + data/feas_q2_keyentropy.csv | 6 + data/feas_q3_jamming.csv | 8 + data/kpa.csv | 43 +++ data/real_sec_stats.json | 31 +++ data/real_sec_ter.csv | 9 + data/sec_brute.csv | 29 ++ data/sec_compare.csv | 6 + data/sec_jam.csv | 8 + data/sec_keylen.csv | 10 + data/sec_maskfam.csv | 5 + data/sec_regjam.csv | 8 + data/sec_sens.csv | 23 ++ data/sec_snr.csv | 7 + fig/fig1_system.pdf | Bin 0 -> 134748 bytes fig/fig_sec_brute.pdf | Bin 0 -> 38358 bytes fig/fig_sec_jam.pdf | Bin 0 -> 37939 bytes fig/fig_sec_keylen.pdf | Bin 0 -> 30709 bytes fig/fig_sec_kpa.pdf | Bin 0 -> 34229 bytes fig/fig_sec_real.pdf | Bin 0 -> 39106 bytes fig/fig_sec_sens.pdf | Bin 0 -> 20729 bytes fig/fig_sec_snr.pdf | Bin 0 -> 39316 bytes requirements.txt | 6 + 34 files changed, 2293 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 code/exp_full.py create mode 100644 code/exp_kpa.py create mode 100644 code/exp_real_sec.py create mode 100644 code/feasibility_security.py create mode 100644 code/make_tables.py create mode 100644 code/replot_security.py create mode 100644 code/sse_lib.py create mode 100644 code/verify_math.py create mode 100644 data/feas_q1_eavesdrop.csv create mode 100644 data/feas_q2_keyentropy.csv create mode 100644 data/feas_q3_jamming.csv create mode 100644 data/kpa.csv create mode 100644 data/real_sec_stats.json create mode 100644 data/real_sec_ter.csv create mode 100644 data/sec_brute.csv create mode 100644 data/sec_compare.csv create mode 100644 data/sec_jam.csv create mode 100644 data/sec_keylen.csv create mode 100644 data/sec_maskfam.csv create mode 100644 data/sec_regjam.csv create mode 100644 data/sec_sens.csv create mode 100644 data/sec_snr.csv create mode 100644 fig/fig1_system.pdf create mode 100644 fig/fig_sec_brute.pdf create mode 100644 fig/fig_sec_jam.pdf create mode 100644 fig/fig_sec_keylen.pdf create mode 100644 fig/fig_sec_kpa.pdf create mode 100644 fig/fig_sec_real.pdf create mode 100644 fig/fig_sec_sens.pdf create mode 100644 fig/fig_sec_snr.pdf create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6797f5f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__/ +*.pyc +out/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7e839e2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Ki-Ho Lee, Hyun-Ho Choi, Jung-Ryun Lee + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e56d1ab --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +# Keyed Masking for Secure Multi-User Semantic Communication + +Reproducibility package for the manuscript *Mask-as-Key Secure Multiple +Access for Semantic Communications: Physical-Layer Encryption and +Jamming Robustness*, submitted to the IEEE Transactions on Information +Forensics and Security. + +Every figure and table in the paper is regenerated from this +repository. Experiment scripts write CSV files to `data/` and never +draw; `replot_security.py` reads only `data/` and writes the figure PDFs +to `fig/`; `make_tables.py` prints the LaTeX rows of the result tables. + +## Idea + +Multi-user semantic communication superposes several users on one frame +and multiplies each user embedding by a distinct pattern so that the +receivers can separate them. This code treats that pattern as a secret +key. One keyed operation then encrypts each user against a receiver +without the key, separates the users, and spreads a jammer that does not +hold the key, at no extra bandwidth, power, or rate. + +## Layout + +``` +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_kpa.py stage H: known-plaintext attack on the key + 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/ + 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 +``` + +## Reproducing + +Requires Python 3, PyTorch, NumPy, and Matplotlib. The real-token stage +additionally needs `datasets` and `transformers`. A CUDA device is +recommended; the code falls back to CPU. Under Windows install PyTorch +in WSL, because the native Windows build does not load the CUDA +libraries. + +```bash +python verify_math.py # closed-form verification, prints PASS/FAIL +python exp_full.py # stages A-F +python exp_kpa.py # known-plaintext attack +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. + +## Figure and table map + +| Artifact | Script | Data | +|---|---|---| +| 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. 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` | + +## 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. + +## License + +MIT for the code. The AG News data and the language-model tokenizer are +obtained from their own sources under their own terms. diff --git a/code/exp_full.py b/code/exp_full.py new file mode 100644 index 0000000..1060414 --- /dev/null +++ b/code/exp_full.py @@ -0,0 +1,523 @@ +"""Full-scale security evaluation for paper 11 (run under WSL CUDA). + +Reuses the SSE transmit/receive core from sse_lib.py and adds an +eavesdropper receiver, a jammer channel, and structured mask families. +Main configuration d=64, P=4, Vu=16 (V=Vu^P=65,536), U=4 users, matching +the language-model token vocabulary scale. + +Stages (each writes a CSV to ../data; figures come from replot_security.py +and the two result tables from make_tables.py): + A security vs SNR -> sec_snr.csv (Fig. 2) + B key length -> sec_keylen.csv (Fig. 3) + C jamming vs JSR -> sec_jam.csv (Fig. 4) + D mask families -> sec_maskfam.csv (key-family table) + E scheme comparison -> sec_compare.csv (comparison table) + F attack difficulty -> sec_sens.csv, sec_brute.csv (Figs. 5-6) + +Experiment scripts write CSV only, never draw. Fixed seeds. +""" +from __future__ import annotations +import math +import numpy as np +import torch + +import sse_lib as L +from sse_lib import (SSE, rayleigh_gain, snr_to_sigma2, write_csv, set_seed, + eval_ser_sse, oma_ser, DATA, DEVICE) + + +# ---------------------------------------------------------------------- +# eavesdropper: correlate the transmitted (true-mask) frame with a +# substitute mask the eavesdropper does not truly hold. +# ---------------------------------------------------------------------- +@torch.no_grad() +def eval_ser_eve(model: SSE, eve_masks: torch.Tensor, snr_list, + frames: int, chunk: int = 100_000, seed: int = 777): + model.eval().to(DEVICE) + Bn = model.unit_codebook() + true_m = model.masks() + eve_masks = eve_masks.to(DEVICE) + c = model.c + out = [] + for snr_db in snr_list: + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * snr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + digits = torch.randint(model.vu, (n, model.users, model.P), + generator=g).to(DEVICE) + e = Bn[digits] / math.sqrt(model.P) + y = (e * true_m[None, :, None, :]).sum(dim=1) / c + h = rayleigh_gain((n, model.users), device=DEVICE) + sigma = snr_to_sigma2(snr_db, model.d).to(DEVICE).sqrt() + noise = torch.randn(n, model.users, model.P, model.L, device=DEVICE) + y_rx = h[:, :, None, None] * y[:, None] + sigma * noise + r = y_rx / h[:, :, None, None].clamp_min(1e-6) + cand = Bn[None, :, :] * eve_masks[:, None, :] + scores = torch.einsum("nupl,uvl->nupv", r, cand) + wrong = (scores.argmax(-1) != digits).any(dim=2) + err += int(wrong.sum()); tot += n * model.users + out.append(err / tot) + return out + + +@torch.no_grad() +def eval_ser_jam(model: SSE, snr_db, jsr_db_list, frames: int, + chunk: int = 100_000, seed: int = 777, mode: str = "blind", + target: int = 0): + """Returns the target-user SER (user `target`, the user a mask-matched + jammer aims at). The mask-matched jammer aligns with the target key, + which a mask-blind jammer cannot do. Reporting the target-user SER, + rather than the user average, isolates how efficiently each jammer can + degrade a chosen victim (Proposition 2).""" + model.eval().to(DEVICE) + Bn = model.unit_codebook() + true_m = model.masks() + c = model.c + sigma = snr_to_sigma2(snr_db, model.d).to(DEVICE).sqrt() + # matched jammer aligns with the target user's masked codeword mean + # direction (needs that user's secret key) + w_fixed = (Bn[target][None, :] * true_m[target][None, :]).repeat(model.P, 1) + w_fixed = w_fixed / w_fixed.norm() + out = [] + for jsr_db in jsr_db_list: + jsr = 10.0 ** (jsr_db / 10.0) + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * jsr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + digits = torch.randint(model.vu, (n, model.users, model.P), + generator=g).to(DEVICE) + e = Bn[digits] / math.sqrt(model.P) + y = (e * true_m[None, :, None, :]).sum(dim=1) / c + h = rayleigh_gain((n, model.users), device=DEVICE) + hJ = rayleigh_gain((n,), device=DEVICE) + if mode == "matched": + w = w_fixed[None].expand(n, model.P, model.L) + else: + w = torch.randn(n, model.P, model.L, device=DEVICE) + w = w / w.reshape(n, -1).norm(dim=1)[:, None, None].clamp_min(1e-8) + jam = (hJ * math.sqrt(jsr))[:, None, None] * w + noise = torch.randn(n, model.users, model.P, model.L, device=DEVICE) + y_rx = h[:, :, None, None] * y[:, None] + jam[:, None] + sigma * noise + r = y_rx / h[:, :, None, None].clamp_min(1e-6) + cand = Bn[None, :, :] * true_m[:, None, :] + scores = torch.einsum("nupl,uvl->nupv", r, cand) + wrong = (scores.argmax(-1) != digits).any(dim=2) # (n,U) + err += int(wrong[:, target].sum()); tot += n + out.append(err / tot) + return out + + +def hadamard(n: int) -> np.ndarray: + """Sylvester construction, n a power of two.""" + H = np.array([[1.0]]) + while H.shape[0] < n: + H = np.block([[H, H], [H, -H]]) + return H + + +def mean_abs_xcorr(masks: torch.Tensor) -> float: + m = masks / masks.norm(dim=1, keepdim=True).clamp_min(1e-8) + G = (m @ m.T).abs() + U = m.shape[0] + off = G[~torch.eye(U, dtype=torch.bool, device=G.device)] + return float(off.mean()) + + +def random_mask(U, Lp): + W = torch.randn(U, Lp) + return W / W.norm(dim=1, keepdim=True) * math.sqrt(Lp) + + +def eve_wrong_mask(U, Lp, seed): + g = torch.Generator().manual_seed(seed) + W = torch.randn(U, Lp, generator=g) + return W / W.norm(dim=1, keepdim=True) * math.sqrt(Lp) + + +def get_model(P=4, vu=16, d=64, U=4, iters=4000, seed=1, freeze_W=None, tag=""): + """Train an SSE model, optionally with fixed (frozen) masks.""" + set_seed(seed) + m = SSE(P=P, vu=vu, d=d, users=U).to(DEVICE) + if freeze_W is not None: + with torch.no_grad(): + m.W.copy_(freeze_W.to(DEVICE)) + m.W.requires_grad_(False) + L.train_sse(m, iters=iters, batch=256, lr=3e-3, seed=seed) + m.calibrate_power() + return m + + +def stage_A(): + print("[A] security vs SNR (V=65536) ...") + m = get_model(iters=4000) + snr = [0.0, 4.0, 8.0, 12.0, 16.0, 20.0] + frames = 800_000 + legit = eval_ser_sse(m, snr, frames=frames) + ew = eve_wrong_mask(m.users, m.L, seed=20260813).to(DEVICE) + eve_w = eval_ser_eve(m, ew, snr, frames=frames) + eve_n = eval_ser_eve(m, torch.ones(m.users, m.L), snr, frames=frames) + # conventional public-mask scheme: the eavesdropper holds the same + # (public) masks and decodes exactly like a legitimate user + eve_p = eval_ser_eve(m, m.masks().detach().cpu(), snr, frames=frames) + oma = oma_ser(snr, bits=int(math.log2(m.V))) + chance = 1.0 - (1.0 / m.vu) ** m.P + write_csv(DATA / "sec_snr.csv", + ["snr_db", "legit", "eve_wrong", "eve_none", "eve_public", + "oma", "chance"], + [(s, legit[i], eve_w[i], eve_n[i], eve_p[i], oma[i], chance) + for i, s in enumerate(snr)]) + print(" legit:", [f"{v:.2e}" for v in legit]) + print(" eve :", [f"{v:.3f}" for v in eve_w]) + + +def train_sse_reg(m: SSE, iters=4000, batch=256, lr=3e-3, seed=1, + lam_orth=1.0, lam_flat=0.1): + """Regularized key learning for improved spreading and de-spreading. + Adds to the digit-wise cross entropy (i) an orthogonality penalty on + the off-diagonal key Gram entries, which reduces cross-user + interference and residual leakage, and (ii) a constant-modulus + penalty that flattens the key spectrum, which maximizes the spreading + of a mask-blind jammer (Proposition 2: the jammer concentration on + candidate i is sum_k w_k^2 e_{i,k}^2 weighted through the key, and a + flat key removes any low-energy entries a jammer could exploit).""" + set_seed(seed) + m.to(DEVICE) + opt = torch.optim.Adam(m.parameters(), lr=lr) + ce = torch.nn.CrossEntropyLoss() + for it in range(1, iters + 1): + digits = torch.randint(m.vu, (batch, m.users, m.P), device=DEVICE) + snr = torch.empty(batch).uniform_(0.0, 20.0) + m.calibrate_power(8192) + scores = m(digits, snr) * m.logit_scale.exp() + loss = ce(scores.reshape(-1, m.vu), digits.reshape(-1)) + mk = m.masks() + G = (mk @ mk.T) / m.L + off = G - torch.eye(m.users, device=G.device) + loss = loss + lam_orth * off.pow(2).sum() + loss = loss + lam_flat * (mk.pow(2) - 1.0).pow(2).mean() + opt.zero_grad(); loss.backward(); opt.step() + m.calibrate_power() + return m + + +def get_model_reg(P=4, vu=16, d=64, U=4, iters=4000, seed=1): + set_seed(seed) + m = SSE(P=P, vu=vu, d=d, users=U).to(DEVICE) + train_sse_reg(m, iters=iters, seed=seed) + return m + + +def stage_B(): + print("[B] key length (dense grid so the curve is smooth) ...") + oma10 = oma_ser([10.0], bits=16)[0] + rows = [] + for d in [16, 24, 32, 48, 64, 96, 128, 192, 256]: + m = get_model(d=d, iters=4000) + lg = eval_ser_sse(m, [10.0], frames=500_000)[0] + ew = eve_wrong_mask(m.users, m.L, seed=20260813).to(DEVICE) + ev = eval_ser_eve(m, ew, [10.0], frames=500_000)[0] + xc = mean_abs_xcorr(m.masks().detach()) + rows.append((m.L, d, lg, ev, xc, oma10)) + print(f" L={m.L:4d} legit={lg:.2e} eve={ev:.3f} xcorr={xc:.4f}") + write_csv(DATA / "sec_keylen.csv", + ["L", "d", "legit_ser", "eve_ser", "mask_xcorr", "oma"], rows) + + +def stage_C(): + print("[C] jamming vs JSR ...") + m = get_model(iters=4000) + jsr = [-10.0, -5.0, 0.0, 5.0, 10.0, 15.0, 20.0] + blind = eval_ser_jam(m, 10.0, jsr, frames=500_000, mode="blind", target=0) + matched = eval_ser_jam(m, 10.0, jsr, frames=500_000, mode="matched", target=0) + # target-user SER with no jammer, for the reference line + nojam = eval_ser_jam(m, 10.0, [-40.0], frames=500_000, mode="blind", + target=0)[0] + write_csv(DATA / "sec_jam.csv", + ["jsr_db", "blind", "matched", "nojam"], + [(j, blind[i], matched[i], nojam) for i, j in enumerate(jsr)]) + print(f" target no-jam={nojam:.2e}") + print(" blind :", [f"{v:.3f}" for v in blind]) + print(" matched:", [f"{v:.3f}" for v in matched]) + + +def stage_D(): + print("[D] mask families ...") + P, vu, d, U = 4, 16, 64, 4 + Lp = d // P + fams = {} + # random fixed masks + set_seed(7); fams["random"] = random_mask(U, Lp) + # Walsh-Hadamard rows (orthogonal) + Hd = torch.tensor(hadamard(Lp)[:U], dtype=torch.float32) # ||row||=sqrt(Lp) + fams["hadamard"] = Hd + rows = [] + for name, W in fams.items(): + m = get_model(P=P, vu=vu, d=d, U=U, iters=4000, freeze_W=W) + lg = eval_ser_sse(m, [10.0], frames=500_000)[0] + ew = eve_wrong_mask(U, Lp, seed=20260813).to(DEVICE) + ev = eval_ser_eve(m, ew, [10.0], frames=500_000)[0] + xc = mean_abs_xcorr(m.masks().detach()) + rows.append((name, lg, ev, xc)) + print(f" {name:9s} legit={lg:.2e} eve={ev:.3f} xcorr={xc:.4f}") + # learned masks (plain cross entropy) + m = get_model(P=P, vu=vu, d=d, U=U, iters=4000) + lg = eval_ser_sse(m, [10.0], frames=500_000)[0] + ew = eve_wrong_mask(U, Lp, seed=20260813).to(DEVICE) + ev = eval_ser_eve(m, ew, [10.0], frames=500_000)[0] + xc = mean_abs_xcorr(m.masks().detach()) + rows.append(("learned", lg, ev, xc)) + print(f" {'learned':9s} legit={lg:.2e} eve={ev:.3f} xcorr={xc:.4f}") + # regularized key learning (orthogonality + constant modulus) + mr = get_model_reg(P=P, vu=vu, d=d, U=U, iters=4000) + lgr = eval_ser_sse(mr, [10.0], frames=500_000)[0] + evr = eval_ser_eve(mr, ew, [10.0], frames=500_000)[0] + xcr = mean_abs_xcorr(mr.masks().detach()) + rows.append(("learned_reg", lgr, evr, xcr)) + print(f" {'learn_reg':9s} legit={lgr:.2e} eve={evr:.3f} xcorr={xcr:.4f}") + # jamming robustness of plain vs regularized keys (blind jammer) + jsr = [-10.0, -5.0, 0.0, 5.0, 10.0, 15.0, 20.0] + jb_plain = eval_ser_jam(m, 10.0, jsr, frames=300_000, mode="blind") + jb_reg = eval_ser_jam(mr, 10.0, jsr, frames=300_000, mode="blind") + write_csv(DATA / "sec_regjam.csv", + ["jsr_db", "plain", "regularized"], + [(j, jb_plain[i], jb_reg[i]) for i, j in enumerate(jsr)]) + write_csv(DATA / "sec_maskfam.csv", + ["family", "legit_ser", "eve_ser", "mask_xcorr"], rows) + + +@torch.no_grad() +def eval_scheme(model: SSE, snr_db, frames, *, rx_masks=None, perms=None, + jam_w=None, jsr_db=None, target=0, chunk=100_000, seed=777, + decode_user=0): + """Generic evaluator for the comparison schemes. + rx_masks: masks used at the decoding receiver (None = true masks). + perms: (U,d-index) per-user secret permutations applied at tx to + x_u; the decoder for `decode_user` inverse-permutes first. + rx side without the permutation just decodes raw. + jam_w: None or 'matched'/'blind' jammer aimed at `target`. + Returns SER of `decode_user` (frame error over its P digits).""" + model.eval().to(DEVICE) + Bn = model.unit_codebook() + true_m = model.masks() + c = model.c + sigma = snr_to_sigma2(snr_db, model.d).to(DEVICE).sqrt() + d = model.P * model.L + if perms is not None: + inv = torch.argsort(perms, dim=1) + if jam_w == "matched": + wf = (Bn[target][None, :] * true_m[target][None, :]).repeat(model.P, 1) + if perms is not None: + wfl = wf.reshape(-1)[perms[target]] + wf = wfl.reshape(model.P, model.L) + wf = wf / wf.norm() + jsr = 10.0 ** (jsr_db / 10.0) if jsr_db is not None else 0.0 + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * snr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + digits = torch.randint(model.vu, (n, model.users, model.P), + generator=g).to(DEVICE) + e = Bn[digits] / math.sqrt(model.P) + x = e * true_m[None, :, None, :] # (n,U,P,L) + if perms is not None: + xf = x.reshape(n, model.users, d) + xf = torch.stack([xf[:, u][:, perms[u]] for u in range(model.users)], 1) + x = xf.reshape(n, model.users, model.P, model.L) + y = x.sum(dim=1) / c # (n,P,L) + h = rayleigh_gain((n,), device=DEVICE) # decode_user channel + y_rx = h[:, None, None] * y # (n,P,L) + if jam_w is not None: + hJ = rayleigh_gain((n,), device=DEVICE) + if jam_w == "matched": + w = wf[None].expand(n, model.P, model.L) + else: + w = torch.randn(n, model.P, model.L, device=DEVICE) + w = w / w.reshape(n, -1).norm(dim=1)[:, None, None].clamp_min(1e-8) + y_rx = y_rx + (hJ * math.sqrt(jsr))[:, None, None] * w + y_rx = y_rx + sigma * torch.randn(n, model.P, model.L, device=DEVICE) + r = y_rx / h[:, None, None].clamp_min(1e-6) + if perms is not None: + rf = r.reshape(n, d)[:, inv[decode_user]] + r = rf.reshape(n, model.P, model.L) + m_rx = true_m if rx_masks is None else rx_masks.to(DEVICE) + cand = Bn * m_rx[decode_user][None, :] # (Vu,L) + scores = torch.einsum("npl,vl->npv", r, cand) + wrong = (scores.argmax(-1) != digits[:, decode_user]).any(dim=1) + err += int(wrong.sum()); tot += n + return err / tot + + +def stage_E(): + """Comparison across five schemes at 10 dB, V=65,536, user-0 metrics. + Columns: legitimate SER; outsider-eavesdropper SER; insider SER (a + curious legitimate user of the SAME system decoding user 0 with its + own credentials); target-user SER under the strongest jammer the + attacker can BUILD from public knowledge at JSR 0 dB (matched if the + masks are public, blind if the PHY structure is secret).""" + print("[E] scheme comparison ...") + m = get_model(iters=4000) + F = 400_000 + d = m.P * m.L + set_seed(20260813) + ew = eve_wrong_mask(m.users, m.L, seed=20260813) + # shuffling-style multi-user adaptation: one GLOBAL secret permutation + # shared by all users (per-user permutations break the trained + # multi-user separation, so the shared key is the fair extension) + gp = torch.Generator().manual_seed(11) + gperm = torch.randperm(d, generator=gp) + perms = gperm[None].repeat(m.users, 1) + + chance = 1.0 - (1.0 / m.vu) ** m.P + insider_masks = torch.roll(m.masks().detach().cpu(), 1, 0) # user 1's key + + rows = [] + # S1 proposed keyed masking: per-user secret masks + lg = eval_scheme(m, 10.0, F) + ev = eval_scheme(m, 10.0, F, rx_masks=ew) + ins = eval_scheme(m, 10.0, F, rx_masks=insider_masks) + jm = eval_scheme(m, 10.0, F, jam_w="blind", jsr_db=0.0) + rows.append(("proposed", lg, ev, ins, jm)) + # S2 public-mask superposition (no key): everyone decodes, attacker + # builds the matched jammer + jm2 = eval_scheme(m, 10.0, F, jam_w="matched", jsr_db=0.0) + rows.append(("public_mask", lg, lg, lg, jm2)) + # S3 global permutation key over public masks (shuffling-style): the + # outsider lacks the permutation, but every insider holds it and the + # masks are public, so insiders decode each other + lg3 = eval_scheme(m, 10.0, F, perms=perms) + ev3 = eval_scheme_permuted_eve(m, 10.0, F, perms) + jm3 = eval_scheme(m, 10.0, F, perms=perms, jam_w="blind", jsr_db=0.0) + rows.append(("perm_key", lg3, ev3, lg3, jm3)) + # S4 per-user index cipher (one-time pad on the digits) over public + # masks: content protected from outsiders and insiders, but the PHY + # is public so the matched jammer remains buildable + rows.append(("index_cipher", lg, chance, chance, jm2)) + # S5 OMA digital, no encryption: open to everyone + from sse_lib import oma_ser + lg5 = oma_ser([10.0], bits=int(math.log2(m.V)))[0] + rows.append(("oma_plain", lg5, lg5, lg5, float("nan"))) + + write_csv(DATA / "sec_compare.csv", + ["scheme", "legit_ser", "eve_out", "eve_in", "jam0_ser"], rows) + for r in rows: + print(" ", r) + + +@torch.no_grad() +def eval_scheme_permuted_eve(model: SSE, snr_db, frames, perms, + chunk=100_000, seed=777): + """Eve for S3: sees the per-user permuted tx, holds the PUBLIC masks + but not the permutation, decodes user 0 raw.""" + model.eval().to(DEVICE) + Bn = model.unit_codebook() + true_m = model.masks() + c = model.c + d = model.P * model.L + sigma = snr_to_sigma2(snr_db, model.d).to(DEVICE).sqrt() + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * snr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + digits = torch.randint(model.vu, (n, model.users, model.P), + generator=g).to(DEVICE) + e = Bn[digits] / math.sqrt(model.P) + x = e * true_m[None, :, None, :] + xf = x.reshape(n, model.users, d) + xf = torch.stack([xf[:, u][:, perms[u]] for u in range(model.users)], 1) + y = xf.reshape(n, model.users, model.P, model.L).sum(dim=1) / c + h = rayleigh_gain((n,), device=DEVICE) + y_rx = h[:, None, None] * y + sigma * torch.randn( + n, model.P, model.L, device=DEVICE) + r = y_rx / h[:, None, None].clamp_min(1e-6) + cand = Bn * true_m[0][None, :] + scores = torch.einsum("npl,vl->npv", r, cand) + wrong = (scores.argmax(-1) != digits[:, 0]).any(dim=1) + err += int(wrong.sum()); tot += n + return err / tot + + +def correlated_masks(true_m: torch.Tensor, rho: float, gen: torch.Generator): + """Substitute masks with prescribed normalized correlation rho to the + true keys: mtil = rho*m + sqrt(1-rho^2)*m_perp, ||mtil|| = ||m||.""" + U, Lp = true_m.shape + out = torch.empty_like(true_m) + for u in range(U): + m = true_m[u] + p = torch.randn(Lp, generator=gen) + p = p - (p @ m) / (m @ m) * m + p = p / p.norm() * m.norm() + out[u] = rho * m + math.sqrt(max(0.0, 1 - rho * rho)) * p + return out + + +def stage_F(): + """Attack difficulty in the style of standard security evaluations. + (i) Key sensitivity: Eve SER against the correlation rho between her + guess and the true key (avalanche-style curve). + (ii) Brute-force key search: expected Eve SER against the number of + random key guesses K, where for each trial the attacker keeps the + guess with the LARGEST correlation to the true key (a genie-aided + upper bound on any selection rule). The best-guess correlation + rho_max(K, L) is sampled by Monte Carlo and mapped through the + measured sensitivity curve of (i).""" + print("[F] attack difficulty ...") + m = get_model(iters=4000) + F = 200_000 + true_m = m.masks().detach().cpu() + gen = torch.Generator().manual_seed(31) + + # (i) sensitivity curve, densest where the curve falls steeply + rhos = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.84, 0.88, 0.90, 0.92, 0.94, 0.96, 0.97, 0.98, + 0.99, 0.995, 1.0] + sens = [] + for rho in rhos: + mt = correlated_masks(true_m, rho, gen) + ser = eval_ser_eve(m, mt, [10.0], frames=F)[0] + sens.append((rho, ser)) + print(f" rho={rho:.2f} eve_ser={ser:.4f}") + write_csv(DATA / "sec_sens.csv", ["rho", "eve_ser"], sens) + + # (ii) brute-force: sample rho_max(K, L) and interpolate SER(rho) + import numpy as np + r_arr = np.array([r for r, _ in sens]) + s_arr = np.array([s for _, s in sens]) + + def ser_of_rho(r): + return float(np.interp(abs(r), r_arr, s_arr)) + + ks = [1, 10, 100, 1_000, 10_000, 100_000, 1_000_000] + rows = [] + rng = np.random.default_rng(2026) + for Lp in [8, 16, 32, 64]: + for K in ks: + trials = 400 + # rho of a random unit guess vs a fixed key in R^L is the + # first coordinate of a random unit vector; sample K per trial + best = np.empty(trials) + for t in range(trials): + g = rng.standard_normal((K, Lp)) + g /= np.linalg.norm(g, axis=1, keepdims=True) + best[t] = np.abs(g[:, 0]).max() + ser_est = float(np.mean([ser_of_rho(b) for b in best])) + rows.append((Lp, K, float(best.mean()), ser_est)) + print(f" L={Lp} done") + write_csv(DATA / "sec_brute.csv", + ["L", "K", "best_rho", "eve_ser"], rows) + + +def main(): + print(f"device={DEVICE}") + stage_A() + stage_B() + stage_C() + stage_D() + stage_E() + stage_F() + print("[done] full-scale security CSVs in", DATA) + + +if __name__ == "__main__": + main() diff --git a/code/exp_kpa.py b/code/exp_kpa.py new file mode 100644 index 0000000..dd538c3 --- /dev/null +++ b/code/exp_kpa.py @@ -0,0 +1,155 @@ +"""Stage H: known-plaintext attack on the keyed masking. + +The masking is linear in the keys, so an attacker who knows the indices +carried by some frames can write one linear equation per dimension per +frame and solve for the keys by least squares. This script measures how +much known plaintext the attacker needs before the recovered key is good +enough to decode, and how receiver noise slows that recovery down. + +Per dimension k the observation of frame n is + y_k(n) = (1/c) sum_u e_{s_u(n),k} m_{u,k} + noise, +so stacking N frames gives A m_k = y_k with A(n,u) = e_{s_u(n),k}/c, an +N-by-U system that is solvable once N >= U in the noiseless case. The +attacker solves it per dimension, then correlates the estimate with the +true key and runs the correlation receiver with the estimated key. + +Outputs: + kpa.csv : key correlation and eavesdropper SER against the number of + known-plaintext frames, at several SNRs +""" +from __future__ import annotations +import math + +import numpy as np +import torch + +from sse_lib import (DATA, DEVICE, SSE, rayleigh_gain, snr_to_sigma2, + set_seed, write_csv, eval_ser_sse) +from exp_full import get_model, eval_ser_eve + +SNRS = [0.0, 10.0, 20.0] +NFRAMES = [1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 24, 32, 48, 64] +SEED = 4242 +EVAL_FRAMES = 50_000 +# The spread across independent key-recovery attempts dominates the +# spread across channel realizations within one attempt, so the curve is +# smoothed by drawing many attempts rather than by lengthening each one. +TRIALS = 40 + + +@torch.no_grad() +def collect_known_plaintext(model: SSE, n_frames: int, snr_db: float, + gen: torch.Generator): + """Return (digits, raw observations, channel gains) for an attacker + that knows the transmitted indices. + + The raw observation is returned rather than an equalized one. A + maximum-likelihood attacker keeps the channel gain in the design + matrix instead of dividing by it, which weights every frame by its + own quality and is the strongest use of the collected material. It + also avoids the numerical blow-up that equalizing a deep fade would + cause. + """ + digits = torch.randint(model.vu, (n_frames, model.users, model.P), + generator=gen).to(DEVICE) + Bn = model.unit_codebook() + m = model.masks() + e = Bn[digits] / math.sqrt(model.P) + y = (e * m[None, :, None, :]).sum(dim=1) / model.c # (N,P,L) + h = rayleigh_gain((n_frames,), device=DEVICE) + sigma = snr_to_sigma2(snr_db, model.d).to(DEVICE).sqrt() + noise = torch.randn(n_frames, model.P, model.L, device=DEVICE) + obs = h[:, None, None] * y + sigma * noise + return digits, obs, h + + +@torch.no_grad() +def solve_keys(model: SSE, digits, obs, h): + """Maximum-likelihood key estimate from known plaintext. + + Each period of each frame is an independent observation of the same + per-period key, so the P periods multiply the effective number of + equations. For entry l the system is A x = b with + A[(n,p), u] = h(n) e_{digit(n,u,p), l} / (c sqrt(P)) and b the raw + observation, so a frame in a deep fade contributes a small row on + both sides and is downweighted rather than amplified. + """ + Bn = model.unit_codebook() # (Vu, L) + N, U, P = digits.shape + L = model.L + c = float(model.c) + est = torch.zeros(U, L, device=DEVICE) + for l in range(L): + # design matrix over all (frame, period) pairs + A = Bn[digits, l] / (c * math.sqrt(P)) # (N,U,P) + A = A * h[:, None, None] + A = A.permute(0, 2, 1).reshape(N * P, U) # (N*P, U) + b = obs[:, :, l].reshape(N * P, 1) # (N*P, 1) + # A pseudo-inverse with an absolute tolerance is used instead of + # a least-squares driver. Training can leave a codebook entry + # numerically dead, with every codeword value below the smallest + # normal float. That entry carries no information about the + # digit, and inverting its system would amplify noise without + # bound, so the absolute tolerance discards it and the estimate + # for that entry stays at zero, which is what a careful attacker + # would do. + sol = torch.linalg.pinv(A.double(), atol=1e-12, rtol=0.0) @ b.double() + est[:, l] = sol[:, 0].float() + est = torch.nan_to_num(est) + # normalize to the key norm convention + est = est / est.norm(dim=1, keepdim=True).clamp_min(1e-9) * math.sqrt(L) + return est + + +def key_correlation(est: torch.Tensor, true: torch.Tensor) -> float: + """Mean absolute normalized correlation over the users.""" + a = est / est.norm(dim=1, keepdim=True).clamp_min(1e-9) + b = true / true.norm(dim=1, keepdim=True).clamp_min(1e-9) + return float((a * b).sum(dim=1).abs().mean()) + + +def main(): + set_seed(SEED) + model = get_model(iters=4000) + model.eval() + true_m = model.masks().detach() + legit = eval_ser_sse(model, [10.0], frames=200_000)[0] + print(f"[kpa] legitimate SER at 10 dB = {legit:.4g}, U={model.users}, " + f"L={model.L}") + + # Nested known-plaintext sets with common random numbers. Within a + # trial the attacker collects one pool of frames and the N-frame + # estimate uses the first N of them, so more material can only help, + # exactly as an attacker accumulating traffic would experience. The + # evaluation noise is also shared across N within a trial. Both + # choices remove the between-point variance that would otherwise make + # the averaged curve jagged, without changing what is being measured. + nmax = max(NFRAMES) + rows = [] + for snr in SNRS: + acc = {n: [[], []] for n in NFRAMES} + for t in range(TRIALS): + gen = torch.Generator(device="cpu").manual_seed( + SEED + int(snr) + 1000 * t) + digits, obs, h = collect_known_plaintext(model, nmax, snr, gen) + eval_seed = 777 + 31 * t + int(snr) + for n in NFRAMES: + est = solve_keys(model, digits[:n], obs[:n], h[:n]) + acc[n][0].append(key_correlation(est, true_m)) + acc[n][1].append(eval_ser_eve(model, est.cpu(), [10.0], + frames=EVAL_FRAMES, + seed=eval_seed)[0]) + for n in NFRAMES: + ks, ss = acc[n] + kappa = sum(ks) / len(ks) + ser = sum(ss) / len(ss) + rows.append((snr, n, kappa, ser)) + print(f" snr={snr:4.1f} N={n:5d} kappa={kappa:.4f} " + f"eve_ser={ser:.4f}") + write_csv(DATA / "kpa.csv", + ["snr_db", "n_frames", "kappa", "eve_ser"], rows) + print("[done] kpa.csv") + + +if __name__ == "__main__": + main() diff --git a/code/exp_real_sec.py b/code/exp_real_sec.py new file mode 100644 index 0000000..be33794 --- /dev/null +++ b/code/exp_real_sec.py @@ -0,0 +1,195 @@ +"""Stage G: security on real language-model token streams. + +AG News test headlines are tokenized with the bert-base-uncased +WordPiece tokenizer (vocabulary 30,522). Four users carry four disjoint +headline streams, each frame transmits one token per user, and the token +identifier is carried by its base-16 digits, so the digit space +16^4 = 65,536 covers the vocabulary. The keys and codebook trained on +uniform indices are reused unchanged, so this stage tests the design on +a real, highly non-uniform source without retraining. + +Two metrics are reported. The token error rate is the symbol-level +measure used in the rest of the paper. The headline recovery rate is a +meaning-level measure: the fraction of complete headlines a receiver +reconstructs without a single token error, which is what an +eavesdropper actually needs to read the message. + +Outputs: + real_sec_ter.csv : token error rate vs SNR for legitimate, outsider + eavesdropper, insider, and OMA + real_sec_stats.json: stream statistics and headline recovery rates +""" +from __future__ import annotations + +import json +import math + +import torch + +import sse_lib as L +from sse_lib import (DATA, DEVICE, SSE, rayleigh_gain, snr_to_sigma2, + set_seed, write_csv) +from exp_full import get_model, eve_wrong_mask + +SNR_GRID = [0, 4, 8, 12, 16, 20, 24, 28] +# headline recovery is meaningful only where the legitimate user clears +# most tokens, since a headline averages tens of tokens and needs every +# one of them correct +REC_SNR = (20, 24, 28) +N_TEXTS = 2000 +REPEATS = 8 +REC_RUNS = 4 +SEED_EVAL = 777 +P_MAX, VU, U = 4, 16, 4 + + +def load_streams(): + from datasets import load_dataset + from transformers import AutoTokenizer + tok = AutoTokenizer.from_pretrained("bert-base-uncased") + ds = load_dataset("fancyzhx/ag_news", split="test") + texts = [ds[i]["text"] for i in range(N_TEXTS)] + streams = [[] for _ in range(U)] + bounds = [[] for _ in range(U)] # (start, end) per headline + for i, t in enumerate(texts): + ids = tok(t, add_special_tokens=False)["input_ids"] + u = i % U + s = len(streams[u]) + streams[u].extend(ids) + bounds[u].append((s, s + len(ids))) + n = min(len(s) for s in streams) + streams = [s[:n] for s in streams] + bounds = [[(a, b) for (a, b) in bu if b <= n] for bu in bounds] + return streams, bounds, tok.vocab_size + + +def ids_to_digits(ids: torch.Tensor) -> torch.Tensor: + """(N,U) token ids -> (N,U,P) base-16 digits, most significant first.""" + d, x = [], ids.clone() + for _ in range(P_MAX): + d.append(x % VU) + x = x // VU + return torch.stack(d[::-1], dim=-1) + + +@torch.no_grad() +def wrong_keyed(model: SSE, digits_all, snr_db, seed, rx_masks=None, + chunk=50_000): + """Per-frame per-user error indicator (N,U) for a receiver that + correlates with rx_masks. rx_masks=None means the legitimate keys.""" + torch.manual_seed(seed) + Bn = model.unit_codebook() + true_m = model.masks() + rx = true_m if rx_masks is None else rx_masks.to(DEVICE) + c = model.c + N = digits_all.shape[0] + wrong = torch.zeros(N, U, dtype=torch.bool) + sigma = snr_to_sigma2(snr_db, model.d).to(DEVICE).sqrt() + for n0 in range(0, N, chunk): + dg = digits_all[n0:n0 + chunk].to(DEVICE) + n = dg.shape[0] + e = Bn[dg] / math.sqrt(model.P) + y = (e * true_m[None, :, None, :]).sum(dim=1) / c + h = rayleigh_gain((n, U), device=DEVICE) + noise = torch.randn(n, U, model.P, model.L, device=DEVICE) + y_rx = h[:, :, None, None] * y[:, None] + sigma * noise + r = y_rx / h[:, :, None, None].clamp_min(1e-6) + cand = Bn[None, :, :] * rx[:, None, :] + sc = torch.einsum("nupl,uvl->nupv", r, cand) + wrong[n0:n0 + chunk] = (sc.argmax(-1) != dg).any(dim=2).cpu() + return wrong + + +@torch.no_grad() +def wrong_oma(ids_all, snr_db, seed, bits=16): + """Antipodal signaling on the actual token bits, same frame energy.""" + torch.manual_seed(seed) + N, Uu = ids_all.shape + b = ((ids_all[..., None] >> torch.arange(bits)) & 1).float() * 2 - 1 + b = b.to(DEVICE) + sigma = math.sqrt(1.0 / (10.0 ** (snr_db / 10.0))) + h = rayleigh_gain((N, Uu, 1)) + y = h * b + sigma * torch.randn(N, Uu, bits, device=DEVICE) + return ((y * b) < 0).any(dim=2).cpu() + + +def headline_recovery(wrong: torch.Tensor, bounds) -> tuple[int, int]: + """A headline counts as recovered only if every token is correct.""" + ok = tot = 0 + for u in range(U): + wu = wrong[:, u] + for (a, b) in bounds[u]: + tot += 1 + ok += int(not bool(wu[a:b].any())) + return ok, tot + + +def main(): + set_seed(SEED_EVAL) + streams, bounds, vocab = load_streams() + ids_all = torch.tensor(list(zip(*streams)), dtype=torch.long) # (N,U) + digits_all = ids_to_digits(ids_all) + N = ids_all.shape[0] + assert int(ids_all.max()) < VU ** P_MAX + + print(f"[real] {N} frames, {int(torch.unique(ids_all).numel())} " + f"distinct tokens, max id {int(ids_all.max())}") + + # keys and codebook trained on uniform indices, reused unchanged + model = get_model(P=P_MAX, vu=VU, d=64, U=U, iters=4000) + model.eval() + + eve_m = eve_wrong_mask(U, model.L, seed=20260813) # outsider + ins_m = model.masks().detach().roll(1, 0).cpu() # insider + + schemes = { + "legit": lambda s, k: wrong_keyed(model, digits_all, s, k), + "eve": lambda s, k: wrong_keyed(model, digits_all, s, k, eve_m), + "insider": lambda s, k: wrong_keyed(model, digits_all, s, k, ins_m), + "oma": lambda s, k: wrong_oma(ids_all, s, k), + } + + rows = [] + for s in SNR_GRID: + ter = {} + for name, fn in schemes.items(): + e = 0 + for r in range(REPEATS): + e += int(fn(s, SEED_EVAL + 1000 * r + int(10 * s)).sum()) + ter[name] = e / (N * U * REPEATS) + rows.append((s, ter["legit"], ter["eve"], ter["insider"], ter["oma"])) + print("[real]", [f"{v:.4g}" for v in rows[-1]]) + write_csv(DATA / "real_sec_ter.csv", + ["snr_db", "ter_legit", "ter_eve", "ter_insider", "ter_oma"], + rows) + + rec = {} + for s in REC_SNR: + rec[str(s)] = {} + for name, fn in schemes.items(): + ok = tot = 0 + for r in range(REC_RUNS): + w = fn(s, SEED_EVAL + 5000 * r + int(10 * s)) + o, t = headline_recovery(w, bounds) + ok += o; tot += t + rec[str(s)][name] = ok / tot + print(f"[rec] {s} dB {name}: {ok}/{tot} = {ok/tot:.4g}") + + stats = { + "vocab_size": vocab, + "n_texts": N_TEXTS, + "frames": N, + "repeats": REPEATS, + "decisions_per_point": N * U * REPEATS, + "distinct_tokens": int(torch.unique(ids_all).numel()), + "max_token_id": int(ids_all.max()), + "headlines_scored": sum(len(b) for b in bounds), + "headline_runs": REC_RUNS, + "recovery": rec, + } + (DATA / "real_sec_stats.json").write_text(json.dumps(stats, indent=1)) + print(json.dumps(stats, indent=1)) + + +if __name__ == "__main__": + main() diff --git a/code/feasibility_security.py b/code/feasibility_security.py new file mode 100644 index 0000000..2ced3eb --- /dev/null +++ b/code/feasibility_security.py @@ -0,0 +1,208 @@ +"""Feasibility study for paper 11 (TIFS): the per-user mask as a +physical-layer key. + +Three questions, all under the shared-embedding multiple-access model of +sse_lib.py (real-vector convention, flat Rayleigh fading): + + Q1 (encryption): a legitimate receiver knows its mask mu_u; an + eavesdropper (Eve) does not. How far above chance can Eve decode? + We measure the legitimate symbol error rate (SER) against Eve's SER + when Eve applies (a) a wrong mask drawn from the same distribution, + (b) no mask (mu = 1), (c) the average mask. Chance level is + (Vu-1)/Vu per digit, 1-(1/Vu)^P per frame. + + Q2 (key entropy vs dimension): as the per-period length L grows, two + independently drawn unit-norm masks become more nearly orthogonal, + so Eve's residual after de-masking with a wrong key grows. We sweep + L and report Eve's SER and the mean absolute mask cross-correlation. + + Q3 (jamming robustness): a jammer adds h_J * w to the frame, where w is + an arbitrary unit waveform (worst case: aligned with the victim's + masked codeword direction; and random). We sweep the + jammer-to-signal ratio (JSR) and report the legitimate SER, to show + the mask spreads a mismatched jammer and bounds its effect. + +This is a CPU-sized feasibility run (small V), not the final experiment. +Seeds fixed; results written to ../data as CSV. +""" +from __future__ import annotations + +import math +import numpy as np +import torch + +import sse_lib as L +from sse_lib import SSE, rayleigh_gain, snr_to_sigma2, write_csv, set_seed, DATA, DEVICE + + +# ---------------------------------------------------------------------- +# Eve: apply a chosen (wrong) set of masks to the SAME received frame the +# legitimate users see, then run the correlation receiver. +# ---------------------------------------------------------------------- +@torch.no_grad() +def eval_ser_eve(model: SSE, eve_masks: torch.Tensor, snr_list, + frames: int = 400_000, chunk: int = 50_000, seed: int = 777): + """eve_masks: (U, L) the masks Eve uses in place of the true ones. + Eve observes the same physically transmitted frame (true masks used at + the transmitter) but correlates with eve_masks.""" + model.eval().to(DEVICE) + Bn = model.unit_codebook() + true_m = model.masks() + eve_masks = eve_masks.to(DEVICE) + c = model.c + out = [] + for snr_db in snr_list: + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * snr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + digits = torch.randint(model.vu, (n, model.users, model.P), + generator=g).to(DEVICE) + # transmit with the TRUE masks + e = Bn[digits] / math.sqrt(model.P) + y = (e * true_m[None, :, None, :]).sum(dim=1) / c # (n,P,L) + h = rayleigh_gain((n, model.users), device=DEVICE) + sigma = snr_to_sigma2(snr_db).to(DEVICE).sqrt() + noise = torch.randn(n, model.users, model.P, model.L, device=DEVICE) + y_rx = h[:, :, None, None] * y[:, None] + sigma * noise + r = y_rx / h[:, :, None, None].clamp_min(1e-6) # (n,U,P,L) + # Eve correlates with her (wrong) masks + cand = Bn[None, :, :] * eve_masks[:, None, :] # (U,Vu,L) + scores = torch.einsum("nupl,uvl->nupv", r, cand) + wrong = (scores.argmax(-1) != digits).any(dim=2) + err += int(wrong.sum()); tot += n * model.users + out.append(err / tot) + return out + + +@torch.no_grad() +def eval_ser_jam(model: SSE, snr_db, jsr_db_list, frames: int = 400_000, + chunk: int = 50_000, seed: int = 777, mode: str = "aligned"): + """Legitimate SER with an added jammer h_J * sqrt(JSR) * w. + mode='aligned': w points along user 0's masked mean codeword direction + (a structured, mask-matched worst case for user 0). + mode='random': w is an isotropic random unit frame each transmission.""" + model.eval().to(DEVICE) + Bn = model.unit_codebook() + true_m = model.masks() + c = model.c + sigma = snr_to_sigma2(snr_db).to(DEVICE).sqrt() + # aligned jammer direction: mask-0 applied to a fixed unit codeword, + # i.e. what an attacker would build if it copied the public codebook + # but guessed the (secret) mask wrong -> here we give it mask 0 exactly + # as the strongest realistic structured jammer. + w_fixed = (Bn[0][None, :] * true_m[0][None, :]).repeat(model.P, 1) # (P,L) + w_fixed = w_fixed / w_fixed.norm() + out = [] + for jsr_db in jsr_db_list: + jsr = 10.0 ** (jsr_db / 10.0) + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * jsr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + digits = torch.randint(model.vu, (n, model.users, model.P), + generator=g).to(DEVICE) + e = Bn[digits] / math.sqrt(model.P) + y = (e * true_m[None, :, None, :]).sum(dim=1) / c # (n,P,L) + h = rayleigh_gain((n, model.users), device=DEVICE) + hJ = rayleigh_gain((n,), device=DEVICE) + if mode == "aligned": + w = w_fixed[None].expand(n, model.P, model.L) + else: + w = torch.randn(n, model.P, model.L, device=DEVICE) + w = w / w.reshape(n, -1).norm(dim=1)[:, None, None].clamp_min(1e-8) + jam = (hJ * math.sqrt(jsr))[:, None, None] * w # (n,P,L) + noise = torch.randn(n, model.users, model.P, model.L, device=DEVICE) + y_rx = (h[:, :, None, None] * y[:, None] + + h[:, :, None, None] * 0 # keep shape clarity + + jam[:, None] + sigma * noise) + r = y_rx / h[:, :, None, None].clamp_min(1e-6) + cand = Bn[None, :, :] * true_m[:, None, :] + scores = torch.einsum("nupl,uvl->nupv", r, cand) + wrong = (scores.argmax(-1) != digits).any(dim=2) + err += int(wrong.sum()); tot += n * model.users + out.append(err / tot) + return out + + +def mean_abs_cross_corr(masks: torch.Tensor) -> float: + """Mean || / (||mu_i|| ||mu_j||) over i str: + try: + return f"{float(x):.3f}" + except ValueError: + return "--" + + +def compare_table(): + print("% Table: scheme comparison (from sec_compare.csv)") + rows = list(csv.DictReader(open(DATA / "sec_compare.csv"))) + order = ["public_mask", "perm_key", "index_cipher", "oma_plain", "proposed"] + rows = sorted(rows, key=lambda r: order.index(r["scheme"])) + for r in rows: + cells = [f3(r["legit_ser"]), f3(r["eve_out"]), f3(r["eve_in"]), + f3(r["jam0_ser"])] + if r["scheme"] == "proposed": + cells = [rf"$\mathbf{{{c}}}$" for c in cells] + else: + cells = [f"${c}$" if c != "--" else "--" for c in cells] + print(f"{NAME[r['scheme']]} & " + " & ".join(cells) + r" \\") + + +def maskfam_table(): + print("% Table: key families (from sec_maskfam.csv)") + for r in csv.DictReader(open(DATA / "sec_maskfam.csv")): + print(f"{NAME[r['family']]} & ${f3(r['legit_ser'])}$ & " + f"${f3(r['eve_ser'])}$ & ${f3(r['mask_xcorr'])}$" + r" \\") + + +if __name__ == "__main__": + compare_table() + print() + maskfam_table() diff --git a/code/replot_security.py b/code/replot_security.py new file mode 100644 index 0000000..d5191b5 --- /dev/null +++ b/code/replot_security.py @@ -0,0 +1,253 @@ +"""Canonical replot script for paper 11: regenerates every result figure +from ../data/*.csv and writes paper-ready PDFs to ../fig/. No experiment +is rerun. All result plots share one canvas and axes rectangle (8:6 box). +Label dictionary is fixed here and copied verbatim into tables and prose. + + fig_sec_snr.pdf : legitimate vs eavesdropper SER vs SNR (Fig. 2) + fig_sec_keylen.pdf : SER vs key length L (Fig. 3) + fig_sec_jam.pdf : target-user SER vs JSR (Fig. 4) + fig_sec_sens.pdf : Eve SER vs key correlation (Fig. 5) + fig_sec_brute.pdf : Eve SER vs number of key guesses (Fig. 6) +""" +from __future__ import annotations +from pathlib import Path +import csv + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +ROOT = Path(__file__).resolve().parents[1] +DATA = ROOT / "data" +FIG = ROOT / "fig" +FIG.mkdir(exist_ok=True) + +plt.rcParams.update({ + "font.family": "serif", + "font.serif": ["DejaVu Serif", "Times New Roman"], + "font.size": 9, + "axes.labelsize": 9, + "legend.fontsize": 6.6, + "xtick.labelsize": 8, + "ytick.labelsize": 8, + "axes.grid": True, + "grid.linestyle": "--", + "grid.linewidth": 0.4, + "grid.alpha": 0.6, + "lines.linewidth": 1.3, + "lines.markersize": 3.4, + "figure.figsize": (3.15, 2.36), + "pdf.fonttype": 42, +}) +AXES_RECT = dict(left=0.185, right=0.965, top=0.955, bottom=0.195) + +C_LEGIT = "#c0392b" +C_EVE = "#2c5fa8" +C_OMA = "#7f8c8d" +C_CH = "#95a5a6" +C_MATCH = "#8e44ad" +C_PUB = "#16a085" + +# fixed label dictionary: tables and prose copy these strings verbatim +LBL = { + "legit": "Legitimate", + "oma": "OMA", + "eve_pub": "Eve, public masks", + "eve_key": "Eve, wrong key", + "chance": "Random guess", + "jam_m": "Matched jammer (public masks)", + "jam_b": "Blind jammer (proposed)", + "nojam": "No jammer", +} + + +def load(name): + with open(DATA / name) as f: + return list(csv.DictReader(f)) + + +def col(rows, k, f=float): + return [f(r[k]) for r in rows] + + +def save(fig, name): + """Write the figure and assert that no axis label is clipped. + + A long y label, or wide minor tick labels such as 6x10^-1 on a log + axis that spans less than a decade, silently pushes the label off + the canvas under the fixed axes rectangle. Reading the plotting code + cannot reveal this, so the check is made on the rendered geometry. + """ + fig.subplots_adjust(**AXES_RECT) + fig.canvas.draw() + fbox = fig.get_window_extent() + for ax in fig.axes: + for lbl in (ax.yaxis.label, ax.xaxis.label): + if not lbl.get_text(): + continue + b = lbl.get_window_extent() + if (b.x0 < fbox.x0 or b.y0 < fbox.y0 + or b.x1 > fbox.x1 or b.y1 > fbox.y1): + raise RuntimeError( + f"{name}: axis label '{lbl.get_text()}' is clipped " + f"(label {b} outside figure {fbox}); shorten the " + f"label or widen the margin") + fig.savefig(FIG / f"{name}.pdf") + plt.close(fig) + print("[OK]", name) + + +def fig_snr(): + r = load("sec_snr.csv") + x = col(r, "snr_db") + fig, ax = plt.subplots() + ax.semilogy(x, col(r, "legit"), color=C_LEGIT, marker="o", ls="-", + label=LBL["legit"]) + ax.semilogy(x, col(r, "oma"), color=C_OMA, marker="^", ls=":", + label=LBL["oma"]) + ax.semilogy(x, col(r, "eve_public"), color=C_PUB, marker="v", + ls="none", markersize=5.2, markerfacecolor="none", + label=LBL["eve_pub"]) + ax.semilogy(x, col(r, "eve_wrong"), color=C_EVE, marker="s", ls="--", + label=LBL["eve_key"]) + ax.plot(x, col(r, "chance"), color=C_CH, ls="-.", lw=0.9, + label=LBL["chance"]) + ax.set_xlabel("SNR (dB)") + ax.set_ylabel("SER") + ax.set_xlim(min(x), max(x)) + ax.legend(loc="lower left") + save(fig, "fig_sec_snr") + + +def fig_keylen(): + r = load("sec_keylen.csv") + x = col(r, "L", int) + fig, ax = plt.subplots() + ax.semilogy(x, col(r, "legit_ser"), color=C_LEGIT, marker="o", ls="-", + label=LBL["legit"]) + ax.semilogy(x, col(r, "oma"), color=C_OMA, marker="^", ls=":", + label=LBL["oma"]) + ax.semilogy(x, col(r, "eve_ser"), color=C_EVE, marker="s", ls="--", + label=LBL["eve_key"]) + ax.set_xlabel("Key length $L$") + ax.set_ylabel("SER") + ax.set_xscale("log", base=2) + ax.legend(loc="center right", bbox_to_anchor=(0.98, 0.72)) + save(fig, "fig_sec_keylen") + + +def fig_jam(): + # the target-user SER spans 0.3 to 1.0, less than one decade, so a + # linear axis is used: a log axis here produces wide minor tick + # labels (6x10^-1) that crowd out the y label under the fixed + # axes rectangle + r = load("sec_jam.csv") + x = col(r, "jsr_db") + fig, ax = plt.subplots() + ax.plot(x, col(r, "matched"), color=C_MATCH, marker="P", ls="--", + label=LBL["jam_m"]) + ax.plot(x, col(r, "blind"), color=C_LEGIT, marker="o", ls="-", + label=LBL["jam_b"]) + nojam = col(r, "nojam")[0] + ax.axhline(nojam, color=C_OMA, ls=":", lw=0.9, label=LBL["nojam"]) + ax.set_xlabel("JSR (dB)") + ax.set_ylabel("SER") + ax.set_xlim(min(x), max(x)) + ax.set_ylim(0.2, 1.02) + ax.legend(loc="lower right") + save(fig, "fig_sec_jam") + + +def fig_sens(): + r = load("sec_sens.csv") + x = col(r, "rho") + fig, ax = plt.subplots() + ax.plot(x, col(r, "eve_ser"), color=C_EVE, marker="s", ls="-", + label=LBL["eve_key"]) + chance = 1.0 - (1.0 / 16.0) ** 4 + ax.axhline(chance, color=C_CH, ls="-.", lw=0.9, label=LBL["chance"]) + ax.set_xlabel(r"Key correlation $\kappa$") + ax.set_ylabel("Eavesdropper SER") + ax.set_xlim(0, 1) + ax.legend(loc="lower left") + save(fig, "fig_sec_sens") + + +def fig_brute(): + r = load("sec_brute.csv") + fig, ax = plt.subplots() + sty = {8: ("#c0392b", "o"), 16: ("#2c5fa8", "s"), + 32: ("#16a085", "v"), 64: ("#8e44ad", "P")} + for Lp in [8, 16, 32, 64]: + rows = [row for row in r if int(row["L"]) == Lp] + ks = [float(row["K"]) for row in rows] + ser = [float(row["eve_ser"]) for row in rows] + c, mk = sty[Lp] + ax.semilogx(ks, ser, color=c, marker=mk, ls="-", + label=f"$L={Lp}$") + ax.set_xlabel("Number of key guesses $K$") + ax.set_ylabel("Eavesdropper SER") + ax.legend(loc="lower left") + save(fig, "fig_sec_brute") + + +def fig_real(): + r = load("real_sec_ter.csv") + x = col(r, "snr_db") + fig, ax = plt.subplots() + ax.semilogy(x, col(r, "ter_legit"), color=C_LEGIT, marker="o", ls="-", + label=LBL["legit"]) + ax.semilogy(x, col(r, "ter_oma"), color=C_OMA, marker="^", ls=":", + label=LBL["oma"]) + ax.semilogy(x, col(r, "ter_insider"), color=C_PUB, marker="v", ls="-.", + label="Insider") + ax.semilogy(x, col(r, "ter_eve"), color=C_EVE, marker="s", ls="--", + label=LBL["eve_key"]) + ax.set_xlabel("SNR (dB)") + ax.set_ylabel("TER") + ax.set_xlim(min(x), max(x)) + ax.legend(loc="lower left") + save(fig, "fig_sec_real") + + +def fig_kpa(): + r = load("kpa.csv") + fig, ax = plt.subplots() + sty = {0.0: ("#c0392b", "o"), 10.0: ("#2c5fa8", "s"), + 20.0: ("#16a085", "v")} + for snr, (c, mk) in 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="-", + label=f"{int(snr)} dB") + ax.axhline(0.304, color=C_OMA, ls=":", lw=0.9, label=LBL["legit"]) + ax.set_xlabel("Known-plaintext frames $N$") + ax.set_ylabel("Eavesdropper SER") + ax.set_xscale("log", base=2) + ax.legend(loc="upper right") + save(fig, "fig_sec_kpa") + + +def main(): + fig_snr() + fig_keylen() + fig_jam() + try: + fig_sens() + fig_brute() + except FileNotFoundError: + print("[skip] attack-difficulty CSVs not present yet") + try: + fig_real() + except FileNotFoundError: + print("[skip] real-token CSV not present yet") + try: + fig_kpa() + except FileNotFoundError: + print("[skip] known-plaintext CSV not present yet") + print("[done] figures in", FIG) + + +if __name__ == "__main__": + main() diff --git a/code/sse_lib.py b/code/sse_lib.py new file mode 100644 index 0000000..ee2a3bf --- /dev/null +++ b/code/sse_lib.py @@ -0,0 +1,388 @@ +"""Shared library for the scalable shared embedding (SSE) letter. + +System model (real-vector convention, declared in the paper): + d-dimensional real embedding frame, U users, single transmitter. + Proposed SSE: the frame is split into P periods of length L = d/P and + one unit codebook B in R^{Vu x L} is reused in every period, so the + vocabulary size is V = Vu^P while the codebook stores only Vu*L + numbers. Index v maps to base-Vu digits (i_1,...,i_P). + Per-user periodic masks mu_u in R^L are repeated over the P periods. + Tx: y = (1/c) * sum_u e(s_u) .* m_u, c fixes unit average frame power. + Channel: user u sees h_u * y + n, h_u^2 ~ Exp(1) (Rayleigh magnitude, + known at the receiver), n ~ N(0, sigma^2 I), sigma^2 = 1/(d*snr). + Rx u: equalize by h_u, per period correlate with the masked unit + codewords b_i .* mu_u and take the argmax digit. + +Device: CUDA when available (run under WSL), CPU fallback. +""" +from __future__ import annotations + +import math +import time +from pathlib import Path + +import numpy as np +import torch + +ROOT = Path(__file__).resolve().parents[1] +DATA = ROOT / "data" +FIG = ROOT / "fig" +DATA.mkdir(exist_ok=True) +FIG.mkdir(exist_ok=True) + +DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +# ---------------------------------------------------------------------- +# global configuration +# ---------------------------------------------------------------------- +D = 64 # embedding dimension (real) +U = 4 # users +VU = 16 # unit codebook size +P_MAX = 4 # periods for the main configuration, V = 16^4 = 65536 +SEED = 1 + +TRAIN_ITERS = 4000 +TRAIN_BATCH = 256 +TRAIN_SNR_DB = (0.0, 20.0) +LR = 3e-3 + + +def set_seed(seed: int = SEED) -> None: + torch.manual_seed(seed) + np.random.seed(seed) + if torch.cuda.is_available(): + torch.cuda.manual_seed_all(seed) + + +def snr_to_sigma2(snr_db: torch.Tensor | float, + d: int = D) -> torch.Tensor | float: + """Per-dimension noise variance for unit frame power and E[h^2]=1. + Pass the model's actual frame dimension d when it differs from the + module default, otherwise the effective SNR shifts with d.""" + snr = 10.0 ** (torch.as_tensor(snr_db, dtype=torch.float64) / 10.0) + return (1.0 / (d * snr)).float() + + +def rayleigh_gain(shape, device=DEVICE) -> torch.Tensor: + """|g| with g ~ CN(0,1): h^2 ~ Exp(1), E[h^2] = 1.""" + u = torch.rand(shape, device=device).clamp_min(1e-12) + return torch.sqrt(-torch.log(u)) + + +# ---------------------------------------------------------------------- +# proposed scalable shared embedding +# ---------------------------------------------------------------------- +class SSE(torch.nn.Module): + """Periodic unit-codebook shared embedding with per-user periodic masks.""" + + def __init__(self, P: int = P_MAX, vu: int = VU, d: int = D, users: int = U): + super().__init__() + assert d % P == 0, "embedding dimension must split into P periods" + self.P, self.vu, self.d, self.users = P, vu, d, users + self.L = d // P + self.B = torch.nn.Parameter(torch.randn(vu, self.L) / math.sqrt(self.L)) + self.W = torch.nn.Parameter(torch.randn(users, self.L) / math.sqrt(self.L)) + self.logit_scale = torch.nn.Parameter(torch.tensor(2.0)) + # transmit power normalizer, calibrated after training (buffer) + self.register_buffer("c", torch.tensor(1.0)) + + @property + def V(self) -> int: + return self.vu ** self.P + + def unit_codebook(self) -> torch.Tensor: + return self.B / self.B.norm(dim=1, keepdim=True).clamp_min(1e-8) + + def masks(self) -> torch.Tensor: + return self.W / self.W.norm(dim=1, keepdim=True).clamp_min(1e-8) * math.sqrt(self.L) + + def tx_frame(self, digits: torch.Tensor) -> torch.Tensor: + """digits: (N, U, P) ints -> unnormalized tx frame (N, P, L).""" + Bn = self.unit_codebook() + e = Bn[digits] / math.sqrt(self.P) # (N,U,P,L) + m = self.masks() # (U,L) + x = e * m[None, :, None, :] + return x.sum(dim=1) # (N,P,L) + + def calibrate_power(self, n: int = 65536) -> None: + with torch.no_grad(): + digits = torch.randint(self.vu, (n, self.users, self.P), device=self.B.device) + y = self.tx_frame(digits) + self.c.fill_(float(y.pow(2).sum(dim=(1, 2)).mean().sqrt())) + + def scores(self, r: torch.Tensor) -> torch.Tensor: + """r: equalized rx frame (N,P,L) -> scores (N,U,P,Vu).""" + Bn = self.unit_codebook() # (Vu,L) + m = self.masks() # (U,L) + cand = Bn[None, :, :] * m[:, None, :] # (U,Vu,L) + return torch.einsum("npl,uvl->nupv", r, cand) + + def forward(self, digits: torch.Tensor, snr_db: torch.Tensor, + h: torch.Tensor | None = None): + """digits (N,U,P), snr_db (N,) -> per-user scores and rx frames.""" + N = digits.shape[0] + y = self.tx_frame(digits) / self.c # (N,P,L) + if h is None: + h = rayleigh_gain((N, self.users), device=y.device) + sigma = snr_to_sigma2(snr_db, self.d).to(y.device).sqrt() # (N,) + n = torch.randn(N, self.users, self.P, self.L, device=y.device) + y_rx = h[:, :, None, None] * y[:, None] + sigma[:, None, None, None] * n + r = y_rx / h[:, :, None, None].clamp_min(1e-6) # equalized (N,U,P,L) + Bn = self.unit_codebook() + m = self.masks() + cand = Bn[None, :, :] * m[:, None, :] # (U,Vu,L) + scores = torch.einsum("nupl,uvl->nupv", r, cand) + return scores + + def n_params(self) -> int: + return self.B.numel() + self.W.numel() + + +# ---------------------------------------------------------------------- +# conventional scheme: full unstructured codebook (prior shared embedding) +# ---------------------------------------------------------------------- +class FullCodebook(torch.nn.Module): + """Directly trained V x d codebook with full-d per-user masks.""" + + def __init__(self, V: int, d: int = D, users: int = U): + super().__init__() + self.Vc, self.d, self.users = V, d, users + self.E = torch.nn.Parameter(torch.randn(V, d) / math.sqrt(d)) + self.W = torch.nn.Parameter(torch.randn(users, d) / math.sqrt(d)) + self.logit_scale = torch.nn.Parameter(torch.tensor(2.0)) + self.register_buffer("c", torch.tensor(1.0)) + + @property + def V(self) -> int: + return self.Vc + + def codebook(self) -> torch.Tensor: + return self.E / self.E.norm(dim=1, keepdim=True).clamp_min(1e-8) + + def masks(self) -> torch.Tensor: + return self.W / self.W.norm(dim=1, keepdim=True).clamp_min(1e-8) * math.sqrt(self.d) + + def tx_frame(self, idx: torch.Tensor) -> torch.Tensor: + En = self.codebook() + e = En[idx] # (N,U,d) + m = self.masks() + return (e * m[None]).sum(dim=1) # (N,d) + + def calibrate_power(self, n: int = 65536) -> None: + with torch.no_grad(): + idx = torch.randint(self.Vc, (n, self.users), device=self.E.device) + y = self.tx_frame(idx) + self.c.fill_(float(y.pow(2).sum(dim=1).mean().sqrt())) + + def forward(self, idx: torch.Tensor, snr_db: torch.Tensor, + h: torch.Tensor | None = None): + N = idx.shape[0] + y = self.tx_frame(idx) / self.c # (N,d) + if h is None: + h = rayleigh_gain((N, self.users), device=y.device) + sigma = snr_to_sigma2(snr_db).to(y.device).sqrt() + n = torch.randn(N, self.users, self.d, device=y.device) + y_rx = h[:, :, None] * y[:, None] + sigma[:, None, None] * n + r = y_rx / h[:, :, None].clamp_min(1e-6) # (N,U,d) + En = self.codebook() + m = self.masks() + cand = En[None, :, :] * m[:, None, :] # (U,V,d) + scores = torch.einsum("nud,uvd->nuv", r, cand) + return scores + + def n_params(self) -> int: + return self.E.numel() + self.W.numel() + + +# ---------------------------------------------------------------------- +# training +# ---------------------------------------------------------------------- +def train_sse(model: SSE, iters: int = TRAIN_ITERS, batch: int = TRAIN_BATCH, + lr: float = LR, log_every: int = 0, eval_snr: float = 10.0, + eval_frames: int = 20000, seed: int = SEED): + """Digit-wise cross entropy under superposition; cost independent of V.""" + set_seed(seed) + model.to(DEVICE) + opt = torch.optim.Adam(model.parameters(), lr=lr) + ce = torch.nn.CrossEntropyLoss() + curve = [] + t0 = time.time() + for it in range(1, iters + 1): + digits = torch.randint(model.vu, (batch, model.users, model.P), device=DEVICE) + snr = torch.empty(batch).uniform_(*TRAIN_SNR_DB) + model.calibrate_power(8192) + scores = model(digits, snr) * model.logit_scale.exp() + loss = ce(scores.reshape(-1, model.vu), digits.reshape(-1)) + opt.zero_grad(); loss.backward(); opt.step() + if log_every and (it % log_every == 0 or it == 1): + ser = eval_ser_sse(model, [eval_snr], frames=eval_frames)[0] + curve.append((it, time.time() - t0, float(loss.detach()), ser)) + model.calibrate_power() + return curve + + +def train_full(model: FullCodebook, iters: int = TRAIN_ITERS, + batch: int = TRAIN_BATCH, lr: float = LR, log_every: int = 0, + eval_snr: float = 10.0, eval_frames: int = 20000, + seed: int = SEED): + set_seed(seed) + model.to(DEVICE) + opt = torch.optim.Adam(model.parameters(), lr=lr) + ce = torch.nn.CrossEntropyLoss() + curve = [] + t0 = time.time() + for it in range(1, iters + 1): + idx = torch.randint(model.Vc, (batch, model.users), device=DEVICE) + snr = torch.empty(batch).uniform_(*TRAIN_SNR_DB) + model.calibrate_power(8192) + scores = model(idx, snr) * model.logit_scale.exp() + loss = ce(scores.reshape(-1, model.Vc), idx.reshape(-1)) + opt.zero_grad(); loss.backward(); opt.step() + if log_every and (it % log_every == 0 or it == 1): + ser = eval_ser_full(model, [eval_snr], frames=eval_frames)[0] + curve.append((it, time.time() - t0, float(loss.detach()), ser)) + model.calibrate_power() + return curve + + +# ---------------------------------------------------------------------- +# evaluation (Monte Carlo) +# ---------------------------------------------------------------------- +@torch.no_grad() +def eval_ser_sse(model: SSE, snr_list, frames: int = 2_000_000, + chunk: int = 100_000, seed: int = 777): + """Frame (vocabulary-symbol) error rate: any wrong digit is an error.""" + model.eval().to(DEVICE) + out = [] + for snr_db in snr_list: + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * snr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + digits = torch.randint(model.vu, (n, model.users, model.P), + generator=g).to(DEVICE) + snr = torch.full((n,), float(snr_db)) + scores = model(digits, snr) + wrong = (scores.argmax(-1) != digits).any(dim=2) # (n,U) + err += int(wrong.sum()); tot += n * model.users + out.append(err / tot) + return out + + +@torch.no_grad() +def eval_ser_full(model: FullCodebook, snr_list, frames: int = 2_000_000, + chunk: int = 50_000, seed: int = 777): + model.eval().to(DEVICE) + if model.Vc >= 4096: + chunk = max(512, (1 << 23) // model.Vc) + out = [] + for snr_db in snr_list: + g = torch.Generator(device="cpu").manual_seed(seed + int(10 * snr_db)) + err = tot = 0 + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + idx = torch.randint(model.Vc, (n, model.users), generator=g).to(DEVICE) + snr = torch.full((n,), float(snr_db)) + scores = model(idx, snr) + err += int((scores.argmax(-1) != idx).sum()); tot += n * model.users + out.append(err / tot) + return out + + +# ---------------------------------------------------------------------- +# conventional digital scheme: OMA with BPSK per real dimension (QPSK +# per complex subcarrier under the declared real-imaginary stacking) +# ---------------------------------------------------------------------- +def oma_ser(snr_db_list, bits: int = 16, n_grid: int = 200_000): + """Semi-analytic expression under the real-dimension convention. + All bits of a vocabulary symbol share the same flat-fading gain, so + SER = E_h[1 - (1 - Q(h sqrt(snr)))^bits] with h^2 ~ Exp(1); the + expectation is evaluated by numerical integration on a dense grid.""" + x = (np.arange(n_grid) + 0.5) / n_grid # uniform quantiles + h = np.sqrt(-np.log(1.0 - x)) # inverse-CDF transform + out = [] + for s in snr_db_list: + g = 10.0 ** (s / 10.0) + q = 0.5 * np.array([math.erfc(v / math.sqrt(2.0)) for v in + np.clip(h * math.sqrt(g), 0, 38)]) + out.append(float(np.mean(1.0 - (1.0 - q) ** bits))) + return out + + +@torch.no_grad() +def oma_ser_mc(snr_db_list, bits: int = 16, frames: int = 2_000_000, + chunk: int = 200_000, seed: int = 777): + """Monte Carlo check of the closed form (same channel conventions).""" + out = [] + for s in snr_db_list: + sigma = math.sqrt(1.0 / (10.0 ** (s / 10.0))) # per-dim, unit Es + err = tot = 0 + torch.manual_seed(seed + int(10 * s)) + for n0 in range(0, frames, chunk): + n = min(chunk, frames - n0) + h = rayleigh_gain((n, 1)) + b = torch.randint(0, 2, (n, bits), device=DEVICE) * 2.0 - 1.0 + y = h * b + sigma * torch.randn(n, bits, device=DEVICE) + wrong = ((y * b) < 0).any(dim=1) + err += int(wrong.sum()); tot += n + out.append(err / tot) + return out + + +# ---------------------------------------------------------------------- +# analysis: union bound with residual-interference Gaussian approximation +# ---------------------------------------------------------------------- +@torch.no_grad() +def sse_union_bound(model: SSE, snr_db_list, n_mc_h: int = 200_000): + """P_e <= 1 - (1 - min(1, sum_pairs)) ... digit union bound averaged + over the Rayleigh gain, with measured residual interference treated + as additional Gaussian noise (approximation stated in the paper).""" + model.eval().to(DEVICE) + Bn = model.unit_codebook() + m = model.masks() + c = float(model.c) + # residual interference power per dimension at user u (measured) + digits = torch.randint(model.vu, (65536, model.users, model.P), device=DEVICE) + e = Bn[digits] / math.sqrt(model.P) + x = e * m[None, :, None, :] # (N,U,P,L) + y = x.sum(dim=1) / c # (N,P,L) + # per-user: signal = x_u/c, interference = (y - x_u/c) + interf_pw = [] + dmin2 = [] + for u in range(model.users): + su = x[:, u] / c # (N,P,L) + iu = y - su + # project interference onto the normalized candidate directions + cand = Bn * m[u][None, :] # (Vu,L) + cn = cand / cand.norm(dim=1, keepdim=True).clamp_min(1e-8) + proj = torch.einsum("npl,vl->npv", iu, cn) + interf_pw.append(float(proj.pow(2).mean())) + # pairwise distances of the scaled candidate set (tx side scaling) + cs = cand / (c * math.sqrt(model.P)) + dd = torch.cdist(cs, cs) + dmin2.append(float((dd + torch.eye(model.vu, device=DEVICE) * 1e9).min() ** 2)) + res = [] + g = rayleigh_gain(n_mc_h) + for s in snr_db_list: + sig2 = float(snr_to_sigma2(torch.tensor(s))) + pe_users = [] + for u in range(model.users): + # effective noise per dim after equalization: sig2/h^2 + interf + sig_eff2 = sig2 / g.pow(2) + interf_pw[u] + arg = torch.sqrt(torch.clamp(torch.tensor(dmin2[u], device=DEVICE) + / (4.0 * sig_eff2), min=0.0)) + q = 0.5 * torch.erfc(arg / math.sqrt(2.0)) + p_digit = torch.clamp((model.vu - 1) * q, max=1.0) + p_frame = 1.0 - (1.0 - p_digit) ** model.P + pe_users.append(float(p_frame.mean())) + res.append(sum(pe_users) / len(pe_users)) + return res + + +def write_csv(path: Path, header: list[str], rows) -> None: + with open(path, "w") as f: + f.write(",".join(header) + "\n") + for row in rows: + f.write(",".join(f"{v:.10g}" if isinstance(v, float) else str(v) + for v in row) + "\n") + print("[csv]", path) diff --git a/code/verify_math.py b/code/verify_math.py new file mode 100644 index 0000000..05bb7eb --- /dev/null +++ b/code/verify_math.py @@ -0,0 +1,201 @@ +"""Numerical verification of the closed forms in Sections IV and V of +paper 11 (mask-as-key encryption and jamming robustness). + +Every claim that enters the manuscript is checked here against Monte +Carlo, with a PASS/FAIL verdict and the achieved agreement level printed. +Real-vector convention, dimension d, U users, codebook of V unit-norm +codewords, per-user masks with zero-mean entries normalized to +||m||^2 = d (so E[m_k^2] = 1). + +Notation matches the tex: + y = (1/c) sum_u e_{s_u} .* m_u transmit frame + legit score z_{u,i} = r_u^T (e_i .* m_u), r_u = y + n_u/h_u + eve score zE_{u,i} = (y_E/h_E)^T (e_i .* mtil_u) + jammer adds h_J sqrt(rho) w to the victim observation + +Run on CPU (NumPy); no training involved, pure algebra checks. +""" +from __future__ import annotations +import numpy as np + +RNG = np.random.default_rng(2026) +D, U, V = 64, 4, 256 + + +def unit_codebook(V, d, rng): + E = rng.standard_normal((V, d)) + return E / np.linalg.norm(E, axis=1, keepdims=True) + + +def masks(U, d, rng): + """Zero-mean entries normalized so ||m_u||^2 = d.""" + M = rng.standard_normal((U, d)) + return M / np.linalg.norm(M, axis=1, keepdims=True) * np.sqrt(d) + + +def report(tag, claim, emp, tol, extra=""): + err = abs(claim - emp) + ok = err <= tol + print(f"[{'PASS' if ok else 'FAIL'}] {tag}: claim={claim:.5g} " + f"emp={emp:.5g} |err|={err:.2g} tol={tol:g} {extra}") + return ok + + +def v1_legit_self_alignment(): + """Claim: E[e_s^T diag(m^2) e_s] = 1 (signal self-correlation).""" + E = unit_codebook(V, D, RNG) + vals = [] + for _ in range(4000): + m = masks(1, D, RNG)[0] + s = RNG.integers(V) + vals.append(float((E[s] ** 2) @ (m ** 2))) + return report("V1 legit self-alignment", 1.0, float(np.mean(vals)), 2e-2) + + +def v2_eve_uninformed(): + """Claim: with an independent substitute mask, the eavesdropper's + correct-index correlation has the same mean as any wrong index, so + the mean advantage is zero and the eavesdropper SER = (V-1)/V, + independent of SNR.""" + E = unit_codebook(V, D, RNG) + # mean advantage of the true index over the wrong indices, noiseless + adv = [] + ser_by_snr = {} + for snr_db in [0.0, 10.0, 20.0, 80.0]: # 80 dB stands in for noiseless + sigma = np.sqrt(1.0 / (D * 10 ** (snr_db / 10.0))) + err = 0 + trials = 6000 + for _ in range(trials): + s = RNG.integers(V, size=U) + M = masks(U, D, RNG) + c = 1.0 # scale-invariant for argmax + y = np.zeros(D) + for u in range(U): + y += E[s[u]] * M[u] + y /= np.sqrt(U) # any fixed scale + # eavesdropper targets user 0 with an independent wrong mask + mtil = masks(1, D, RNG)[0] + hE = np.sqrt(-np.log(RNG.random())) + rE = y + (sigma / hE) * RNG.standard_normal(D) + scores = (E * mtil) @ rE # (V,) + if snr_db == 80.0: + adv.append(scores[s[0]] - scores.mean()) + if scores.argmax() != s[0]: + err += 1 + ser_by_snr[snr_db] = err / trials + chance = (V - 1) / V + ok1 = report("V2a eve mean advantage", 0.0, float(np.mean(adv)), 3e-3) + ok2 = True + for snr_db, ser in ser_by_snr.items(): + tag = f"V2b eve SER @ {int(snr_db)}dB" + ok2 &= report(tag, chance, ser, 1.5e-2) + return ok1 and ok2 + + +def v3_leakage_vs_correlation(): + """Claim: if the substitute mask has normalized correlation + rho = /d with the true mask, the eavesdropper's true-index + bias grows linearly in rho; independent random masks give + E|rho| = O(1/sqrt(d)); orthogonal masks give rho = 0.""" + E = unit_codebook(V, D, RNG) + # (a) bias vs prescribed rho + slopes = [] + for rho in [0.0, 0.25, 0.5, 0.75, 1.0]: + bias = [] + for _ in range(3000): + m = masks(1, D, RNG)[0] + mp = masks(1, D, RNG)[0] + mp = mp - (mp @ m) / (m @ m) * m # orthogonalize + mp = mp / np.linalg.norm(mp) * np.sqrt(D) + mtil = rho * m + np.sqrt(1 - rho ** 2) * mp + s = RNG.integers(V) + # noiseless single-user useful alignment for the true index + bias.append(float((E[s] ** 2) @ (m * mtil))) + slopes.append((rho, float(np.mean(bias)))) + # claim: bias(rho) = rho * bias(1); check linearity + b1 = slopes[-1][1] + lin_ok = all(abs(b - rho * b1) <= 3e-2 for rho, b in slopes) + print(f"[{'PASS' if lin_ok else 'FAIL'}] V3a bias linear in rho: " + + ", ".join(f"rho={r:.2f}->{b:.3f}" for r, b in slopes)) + # (b) random independent mask correlation: E|corr| = sqrt(2/(pi d)) + # (the folded-normal mean of a N(0, 1/d) variable) + corrs = [] + for _ in range(5000): + m = masks(1, D, RNG)[0] + mt = masks(1, D, RNG)[0] + 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) + return lin_ok and ok_b + + +def v4_blind_jammer_spread(): + """Claim: a mask-blind jammer (w independent of m_u) contributes a + zero-mean term to every candidate score with variance + (hJ^2/hu^2) rho * sum_k w_k^2 e_{i,k}^2, i.e. it is spread with no + systematic bias toward any index.""" + E = unit_codebook(V, D, RNG) + rho = 1.0 + # (a) structural claim: the mask projection g_i = (w .* m)^T e_i is + # zero-mean, decoupled from the positive gain factor hJ/hu. + g, var_emp, var_cl = [], [], [] + for _ in range(20000): + m = masks(1, D, RNG)[0] + w = RNG.standard_normal(D); w /= np.linalg.norm(w) + i = RNG.integers(V) + gi = (w * m) @ E[i] + g.append(gi) + var_emp.append(gi ** 2) + var_cl.append(np.sum(w ** 2 * E[i] ** 2)) + ok1 = report("V4a blind jammer projection mean", 0.0, + float(np.mean(g)), 3e-3) + # (b) variance of the projection matches sum_k w_k^2 e_{i,k}^2; the + # 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))) + return ok1 and ok2 + + +def v5_matched_jammer_concentrates(): + """Claim: a mask-matched jammer aligned with the victim key for a + target index t creates a bias of order one on index t, while the + blind-jammer projection has zero mean and RMS of order 1/sqrt(d). + The physically meaningful separation is matched bias over blind RMS, + which is sqrt(d) (the sample mean of the blind bias estimates zero + and is pure Monte Carlo noise, so it is NOT a valid denominator).""" + E = unit_codebook(V, D, RNG) + bias_matched, blind_sq = [], [] + for _ in range(3000): + m = masks(1, D, RNG)[0] + t = RNG.integers(V) + wm = E[t] * m; wm /= np.linalg.norm(wm) # matched (needs m) + wb = RNG.standard_normal(D); wb /= np.linalg.norm(wb) # blind + bias_matched.append(float((wm * m) @ E[t])) + blind_sq.append(float(((wb * m) @ E[t]) ** 2)) + bm = float(np.mean(bias_matched)) + brms = float(np.sqrt(np.mean(blind_sq))) + ratio = bm / brms + ok = abs(ratio - np.sqrt(D)) <= 0.25 * np.sqrt(D) and bm > 0.9 + print(f"[{'PASS' if ok else 'FAIL'}] V5 matched bias / blind RMS: " + f"matched={bm:.3f} blind_rms={brms:.4f} ratio={ratio:.1f} " + f"(claim sqrt(d)={np.sqrt(D):.1f})") + return ok + + +def main(): + print(f"config d={D} U={U} V={V}\n") + results = { + "V1": v1_legit_self_alignment(), + "V2": v2_eve_uninformed(), + "V3": v3_leakage_vs_correlation(), + "V4": v4_blind_jammer_spread(), + "V5": v5_matched_jammer_concentrates(), + } + print("\nsummary:", {k: ("PASS" if v else "FAIL") for k, v in results.items()}) + print("ALL PASS" if all(results.values()) else "SOME FAILED") + + +if __name__ == "__main__": + main() diff --git a/data/feas_q1_eavesdrop.csv b/data/feas_q1_eavesdrop.csv new file mode 100644 index 0000000..2cee08e --- /dev/null +++ b/data/feas_q1_eavesdrop.csv @@ -0,0 +1,6 @@ +snr_db,legit,eve_wrong,eve_none,eve_avg,chance +0,0.55692125,0.995261875,0.992021875,0.95962875,0.99609375 +5,0.26456,0.9946975,0.990336875,0.94351625,0.99609375 +10,0.099379375,0.994283125,0.989521875,0.93188,0.99609375 +15,0.0334,0.994011875,0.989031875,0.925765625,0.99609375 +20,0.010784375,0.9939975,0.988625625,0.922928125,0.99609375 diff --git a/data/feas_q2_keyentropy.csv b/data/feas_q2_keyentropy.csv new file mode 100644 index 0000000..ef57c24 --- /dev/null +++ b/data/feas_q2_keyentropy.csv @@ -0,0 +1,6 @@ +L,d,legit_ser,eve_ser,mask_xcorr +8,16,0.5546,0.9975366667,0.07264538854 +16,32,0.1181416667,0.99724,0.006702715065 +32,64,0.09873416667,0.9943241667,0.01185981557 +64,128,0.08845333333,0.9922383333,0.009370678104 +128,256,0.08771083333,0.9851966667,0.008488235064 diff --git a/data/feas_q3_jamming.csv b/data/feas_q3_jamming.csv new file mode 100644 index 0000000..fb76b31 --- /dev/null +++ b/data/feas_q3_jamming.csv @@ -0,0 +1,8 @@ +jsr_db,ser_aligned,ser_random +-10,0.1924166667,0.1780558333 +-5,0.2540891667,0.2948208333 +0,0.3063416667,0.4912158333 +5,0.3530991667,0.7022516667 +10,0.4284433333,0.8538791667 +15,0.5548433333,0.935385 +20,0.71272,0.9718341667 diff --git a/data/kpa.csv b/data/kpa.csv new file mode 100644 index 0000000..9a4bdf1 --- /dev/null +++ b/data/kpa.csv @@ -0,0 +1,43 @@ +snr_db,n_frames,kappa,eve_ser +0,1,0.2374871574,0.99874975 +0,2,0.6126027606,0.96312825 +0,3,0.7285515711,0.921628875 +0,4,0.8244251639,0.85221925 +0,5,0.868628718,0.797125 +0,6,0.8920436099,0.745713875 +0,8,0.9208301157,0.67688775 +0,10,0.9429872826,0.592138625 +0,12,0.9557282105,0.534421875 +0,16,0.9700051412,0.44833975 +0,24,0.9802580416,0.38197025 +0,32,0.9852379695,0.351050875 +0,48,0.9904022858,0.32166525 +0,64,0.993118532,0.307348 +10,1,0.3489475794,0.989224875 +10,2,0.8794977516,0.704872 +10,3,0.9473693997,0.547376875 +10,4,0.9682661489,0.455776875 +10,5,0.9782963678,0.3962285 +10,6,0.9843041778,0.359232 +10,8,0.9900029436,0.326613375 +10,10,0.9934537426,0.306601375 +10,12,0.9949941516,0.2992645 +10,16,0.9965374678,0.291205125 +10,24,0.9978871465,0.285018125 +10,32,0.9984912023,0.28255425 +10,48,0.9990138412,0.280105125 +10,64,0.9992718786,0.279036875 +20,1,0.596763967,0.861350125 +20,2,0.984469898,0.34732075 +20,3,0.9948319912,0.300176375 +20,4,0.9975389287,0.286598125 +20,5,0.9984581739,0.282405125 +20,6,0.9988854468,0.2803655 +20,8,0.9992000297,0.279362875 +20,10,0.9994319767,0.278179625 +20,12,0.9995499209,0.277694875 +20,16,0.9996712342,0.277181875 +20,24,0.9997934118,0.276410875 +20,32,0.999845539,0.2763615 +20,48,0.9999018267,0.276363875 +20,64,0.9999270439,0.276194125 diff --git a/data/real_sec_stats.json b/data/real_sec_stats.json new file mode 100644 index 0000000..68db78e --- /dev/null +++ b/data/real_sec_stats.json @@ -0,0 +1,31 @@ +{ + "vocab_size": 30522, + "n_texts": 2000, + "frames": 24998, + "repeats": 8, + "decisions_per_point": 799936, + "distinct_tokens": 10486, + "max_token_id": 29599, + "headlines_scored": 1948, + "headline_runs": 4, + "recovery": { + "20": { + "legit": 0.1985369609856263, + "eve": 0.0, + "insider": 0.0, + "oma": 0.19815195071868583 + }, + "24": { + "legit": 0.5103952772073922, + "eve": 0.0, + "insider": 0.0, + "oma": 0.5160420944558521 + }, + "28": { + "legit": 0.7630903490759754, + "eve": 0.0, + "insider": 0.0, + "oma": 0.7583418891170431 + } + } +} \ No newline at end of file diff --git a/data/real_sec_ter.csv b/data/real_sec_ter.csv new file mode 100644 index 0000000..d40b202 --- /dev/null +++ b/data/real_sec_ter.csv @@ -0,0 +1,9 @@ +snr_db,ter_legit,ter_eve,ter_insider,ter_oma +0,0.8937765021,0.9999699976,0.999212437,0.8927576706 +4,0.6685672354,0.9999337447,0.9977085667,0.6680284423 +8,0.3903512281,0.9999224938,0.9958434175,0.3898399372 +12,0.1875025002,0.9999362449,0.9946258201,0.1874349948 +16,0.08110023802,0.9999349948,0.9938970118,0.08109648772 +20,0.03404147332,0.9999337447,0.9936357409,0.03380395432 +24,0.01362108969,0.9999274942,0.9934882291,0.01364484159 +28,0.005464187135,0.9999312445,0.993449476,0.005405432435 diff --git a/data/sec_brute.csv b/data/sec_brute.csv new file mode 100644 index 0000000..9925c1e --- /dev/null +++ b/data/sec_brute.csv @@ -0,0 +1,29 @@ +L,K,best_rho,eve_ser +8,1,0.2918601623,0.9961626487 +8,10,0.6307837307,0.9703819549 +8,100,0.8190062809,0.8850038404 +8,1000,0.9077793813,0.7200369393 +8,10000,0.9535904264,0.5318095675 +8,100000,0.9757162716,0.4169265965 +8,1000000,0.9872786315,0.339091505 +16,1,0.2228791779,0.9991641146 +16,10,0.4570522499,0.9957471368 +16,100,0.6321070191,0.9833336645 +16,1000,0.7417848118,0.9546712761 +16,10000,0.8164950053,0.9000406219 +16,100000,0.8673534005,0.8378011935 +16,1000000,0.9048131336,0.7494679145 +32,1,0.1399813941,0.9997996279 +32,10,0.3205750013,0.9991500426 +32,100,0.4660256564,0.9971309056 +32,1000,0.5620279439,0.9934165308 +32,10000,0.6393936736,0.9852959659 +32,100000,0.6993164916,0.9746142481 +32,1000000,0.7479539255,0.9565757219 +64,1,0.0987436915,0.9998965347 +64,10,0.2263401688,0.9996584104 +64,100,0.3389944824,0.9991447783 +64,1000,0.4155608514,0.9984268536 +64,10000,0.4757575011,0.9974241507 +64,100000,0.5299797378,0.9957096073 +64,1000000,0.5741312045,0.9933056882 diff --git a/data/sec_compare.csv b/data/sec_compare.csv new file mode 100644 index 0000000..d762ce3 --- /dev/null +++ b/data/sec_compare.csv @@ -0,0 +1,6 @@ +scheme,legit_ser,eve_out,eve_in,jam0_ser +proposed,0.303585,0.99983,0.99998,0.80612 +public_mask,0.303585,0.303585,0.303585,0.95359 +perm_key,0.303435,0.9999775,0.303435,0.8065225 +index_cipher,0.303585,0.9999847412,0.9999847412,0.95359 +oma_plain,0.2747696909,0.2747696909,0.2747696909,nan diff --git a/data/sec_jam.csv b/data/sec_jam.csv new file mode 100644 index 0000000..8ab7cfa --- /dev/null +++ b/data/sec_jam.csv @@ -0,0 +1,8 @@ +jsr_db,blind,matched,nojam +-10,0.468186,0.720358,0.302716 +-5,0.633112,0.874476,0.302716 +0,0.806548,0.9534,0.302716 +5,0.918778,0.984432,0.302716 +10,0.970874,0.994914,0.302716 +15,0.989928,0.9984,0.302716 +20,0.996858,0.999468,0.302716 diff --git a/data/sec_keylen.csv b/data/sec_keylen.csv new file mode 100644 index 0000000..6c2664e --- /dev/null +++ b/data/sec_keylen.csv @@ -0,0 +1,10 @@ +L,d,legit_ser,eve_ser,mask_xcorr,oma +4,16,0.9997925,0.999963,0.01188752614,0.2747696909 +6,24,0.9921175,0.9996935,0.09415384382,0.2747696909 +8,32,0.9297855,0.999972,0.007307400461,0.2747696909 +12,48,0.416604,0.999781,0.005153660662,0.2747696909 +16,64,0.2762895,0.9999285,0.007116591092,0.2747696909 +24,96,0.1829615,0.999975,0.002973971656,0.2747696909 +32,128,0.131901,0.9998895,0.005575809628,0.2747696909 +48,192,0.090206,0.999845,0.005743456539,0.2747696909 +64,256,0.0635265,0.9997915,0.006678360514,0.2747696909 diff --git a/data/sec_maskfam.csv b/data/sec_maskfam.csv new file mode 100644 index 0000000..c3c5f69 --- /dev/null +++ b/data/sec_maskfam.csv @@ -0,0 +1,5 @@ +family,legit_ser,eve_ser,mask_xcorr +random,0.64962,0.998488,0.2709003091 +hadamard,0.2568,0.9995605,0 +learned,0.2762895,0.9999285,0.007116591092 +learned_reg,0.315952,0.9999555,0.01121100038 diff --git a/data/sec_regjam.csv b/data/sec_regjam.csv new file mode 100644 index 0000000..3ad7086 --- /dev/null +++ b/data/sec_regjam.csv @@ -0,0 +1,8 @@ +jsr_db,plain,regularized +-10,0.46879,0.4691633333 +-5,0.6335366667,0.6307333333 +0,0.8056466667,0.8018166667 +5,0.9187366667,0.91602 +10,0.9708533333,0.9693866667 +15,0.9902133333,0.9896433333 +20,0.9967333333,0.9965933333 diff --git a/data/sec_sens.csv b/data/sec_sens.csv new file mode 100644 index 0000000..38a01d2 --- /dev/null +++ b/data/sec_sens.csv @@ -0,0 +1,23 @@ +rho,eve_ser +0,0.99997875 +0.1,0.999955 +0.2,0.99976375 +0.3,0.99947625 +0.4,0.99873 +0.5,0.99717375 +0.6,0.992395 +0.65,0.983195 +0.7,0.9776825 +0.75,0.9594925 +0.8,0.91810625 +0.84,0.88158125 +0.88,0.8247575 +0.9,0.792455 +0.92,0.67340125 +0.94,0.602535 +0.96,0.50181875 +0.97,0.47287375 +0.98,0.37558375 +0.99,0.32493625 +0.995,0.30185625 +1,0.27494375 diff --git a/data/sec_snr.csv b/data/sec_snr.csv new file mode 100644 index 0000000..80c5a7e --- /dev/null +++ b/data/sec_snr.csv @@ -0,0 +1,7 @@ +snr_db,legit,eve_wrong,eve_none,eve_public,oma,chance +0,0.8944596875,0.9999515625,0.999990625,0.8943865625,0.8933480658,0.9999847412 +4,0.66980875,0.9999575,0.99998625,0.670624375,0.6686275787,0.9999847412 +8,0.39054875,0.9999425,0.9999865625,0.3902384375,0.3892153151,0.9999847412 +12,0.1880821875,0.9999284375,0.9999890625,0.1877565625,0.1870712987,0.9999847412 +16,0.0811665625,0.9999203125,0.9999875,0.081488125,0.08092517452,0.9999847412 +20,0.033519375,0.999921875,0.999988125,0.0334946875,0.03334949917,0.9999847412 diff --git a/fig/fig1_system.pdf b/fig/fig1_system.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dadb1ca269e4094933ae64939c934317a6a62ff8 GIT binary patch literal 134748 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

6})_K%^DpP1h?X$R~~OkPMNXa0}tIy?D{uF zc&AeO*_NPxz=?k zqZ^ofv*lu-5wg!By7N)tlNidRGTKrw;tO@!6@f#ZrMp3D!sVw&Q@lSMg-n>&v^vl8lvdoELv~Z5R0Z)3H1KM-HW4_P9d3$mHD$v=HC_^u%yVUzyz zl^LJTF0n-3amqM|?**u+!ZzIEMh|DMqO{(0fGjhKVtPfr+?GF|DYG!kT2*gvq-Q-( z*7l8KTP^*h%(1IeTnM2J|A#EkxB+^m$HSPfcgQMfZ$Wl%V=Z=o!OW(A6<>5Gxr)STrIMX+z2G|8tmhTe8+B32KcmTtRe0mzj67CgVq z*6!!kM25QDgm^R=eF+|8N7&cx!(=6;YcXl{LgykHmwL{tYV&k^6Z=za!KWaUm?TPr zlDV| z8cnU>@6)5-Ot~Y+w`A%3J!(f&as7a)mjH6{iY7d?5(34%W4)Eu?dMT-`0coBn7% z#Witx9F#+CwniUOIy7{}yiBf|G|a+7-9jMKhDNkz@Z)P7^Kv@G!!DCje(S!Wwoib{ z+EyXeto53S_ynbwGOC!B^wFTl>N;XTdUW1Po-~58Gv;4Utebzu?;AS9>8&3UxeJ?p zbix~x&AC)%R{e4LadgJ`uSx%XJjd!Pt-y`;&UGm}*Yjw!F&Uv-rlx#}ZU!vwL*1G; zyP3rb)w^l@RX&(_L`HltPI7a0OHjZg^2}!$M7x%925g3#Tz=p0z3lr-DPDL1aWH15rYu_fm9ZnpSe0Mp|3qkY`u7%&wbjRrsu+knmT8Z1WzpK15h? zBm*=K7u^-izBNrHfAbp-`yRS#+PR!`qRru#5z`v*DF_~Zwbv=!j=`O}GOSEbMY~6P zbZ;lQiBEAAcs2)^#YGbsFCX>8{g!!zZ+;cgUwxz>NZ2|Yl90-8wS`{q6BdbJ@I z75W~v-Lu?_kGu1J7Mc&`9;*d`r=a$d4wZEfR)Jr;nSa1Iioz=LWU3RnLT*qNDg*lt z0X6%C1b_r@h*C|MI|{e+EK5{p!tx`#^^nKxiP`4&hbA

XV?E)T6&4#H%SLY2mI= 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 literal 0 HcmV?d00001 diff --git a/fig/fig_sec_brute.pdf b/fig/fig_sec_brute.pdf new file mode 100644 index 0000000000000000000000000000000000000000..05b84539440ca3c20f1f4bf57b79aad7733c89a7 GIT binary patch literal 38358 zcmcG!byQu=^5-2A2tg9u-JOHG1b27WgS$Jy9fG^NyIXK~cXxM(A&z9 zGfP8UfV7Sw&=!~OeSj=37Z)VZLjU(bmVf*}(9*&Vm;R3d0A(p%6QG_QF7uza0#0^9 za&|g)KwO4DJEV2&?0_~FxQxGVApvqmI{L;IhPX_BJ+-malLOk}s=Y7EFZeD6=wycr z5HWw3!28#g@2{%}uEsy)(EhstzjgmsZv%W+_osY-EYQ}{-bU};p5OZ4*Ovh58|&~| zI=!z*^ZucuW1?okrDbBJW~F1NAKRfxmUz+Sveg%psjpdejD@FzexV8r!nMx4lqH zAlBDE8H6E=W4O zn7NI3L-l9wnn7TA1l_I1W0R9ZuKr;GUmz>et(>cgn-Iksao1i6r^)Z84 zqUu@;PMT)5h&Uu;{>9^r)r}9vkkgBS)BP__^zyZ@1M{+C(Dw^;8ylb4x57zPFO8vz zzc)5o(=jln8?9-!2ayYHV+XVq7C z{LKB}Fem)OkldrBnQDXrt*?aUs~b+z(~uGNxOndmG!~_!Pb+4|$1TivNZ&hw-4Y8< zeO!dG2kVXaI0qJTX5F{PoyU`R1THP1`$XtRu;f1Sg+6=19y!et6P4ZDyZua+gB$`Hd4rY3N7Gt3obQ3`8*5h5`S6UoJa2x|uiBOn?Y zMjoLgWa(<+sRBrFX+%b>e(>WB0U^X?S~K;lMXkW{3MQPA)nyu0`VbitV+O=P*a(9H zVTqax5^C?ndQ?r>n|ACq3|mXJq@N=HW1r&R$=ygp8E{~+C~s>}Gm$a-mQUK{d0 zWpv^EVNMQ02EH5}wi-U^0cb&gpu?=o*-Xm2VwMtkQS4m*4~%G2Aw-4qFPcpHR2vvF@n!jz7GZJvAsK#OrR{Iz z8+OG0S4=ih+mYM&_J?Q*V$)NrY`M~&=46N;m89BU*-5k-Wl3W+$c6xCO8~Gw6<yC;P;<-V@%X9x_g4a@V51S-aDH5tSE0*G;_E-YC9_R}5A9 z^cBEz5iqacq0;aJbx!+bFq_W$u>q(4}JM zMvxp@BPe_4YLZ9A-Bc($t$GEW~Pnj)OJ~p{*-Z?n944DTgrRL(_y#q&Q5YqJ;a$SNl zOCK4us#e1LWwGN5F*cPds;I4wLBJh7xV+#)%F5(4*37i11oyf7!+nB~T{n_dl8v2w z1KMWE!c$Vk7+-B=n`bwLpPI5f94RFZ*F6To0_`8Gt=qg(ghU=e-UHt)Yg}kt5y$dux9LzZBnc@glwWJyhbP9Gc)Gll@3^v zag865(#G=1-YHLWR$BM`!BpMhEn+<=qR*5GVNTtiL1*DkD~n#%EwB=!B+n>tboeY$ z2(K6+5TuUPbFWL1bdY5$Vgq8l=@VGIW)s-M5sAfDTxJFbu{cuZRJQXNnG3Rzv~YvUs^lR)pZU86Oi{U#1fF~hQ+M=8uOV|L{ogr zd;w)!&h-CDPYf`8WptaDoamX2V;jbqz})i-puL~7n-1X1+;>z@IN2`=Y352vO0PvU zz0lF-dXRQ>M}5^a6G*Dv>I!m?Z53^%(fYJ_9A5&o*@&LaS8u3Cty48?qJi2Rhg7Rg z9I||@uq9K)9228lHRu{}ijI%pdC=1}M5nkX@2%IO*`T!IKo8l!_W6{DHAv$j z)0y-Dk#4jYkySgL0WLmdtA@-^ZvHuAepgsbe8u2uloVSlMVmXmHq!F5+F@4fPMnkB z#wdF|&BN(Z)7f2XDby-N`Gdpk;#e5j4g+;?-9!x{yV$ zC5K!9DiX27iRr+msbKgJpctC|N9yMt^9`fc?`T*cgImi)S}lzb37=1XjnGwoTe%z} zNQ`G7oC?$$t&E`m zC^$v%OhLwy*H6CV?`t*J%6r-pNK>5?oeHu-a9tnCC%n-ify$R|BBL`wwewt|J)zs* zl8wHnc+Eh;6KBvwbdh|^nJQ}8D@Ftv9x^*Y?}kB?L5`QPLu7g0QQrRPWw}bch7cXH z4~mT0gN{$97z)=5ETpjN604nZ74!Dz>i`MOVotGRR8YFEz&_LusFD%?S#CQ+Zt%U# z&JUTGq9CJi>9CeTfCpHk*LD_w_nw#eESyZf@*Z zcnCw^GtKfBYzQU}%@L#0ehN3kw}53xooM?ZB9#MXZF9?!r^74qa%a7Z5Dhf4f+LJ# zzN6l#aZW`3kW%MsdzpWSN5jH%3@Lnf_B`> zXWl2OXJ`8XGaV1{Xqm}bi;Zuk$Z_MG(@;bF6KP2@m;O8s`Nr;o*Gdll7ocRJ9$I{CfVjQszk>%b2qR zm^X0SO&rzVS;=1!^6zZ+ zf52an{CiTs^d7(empFb#(Og=74$WiC{j||hMOy zCwzkB9Y6EoKxc*5)PoOGiRK#aFZ62}YxFOaQJ zoj8|{V75?7eu*COw2iJ!u20?RwLbhZp85|RX;u|``(lf3_=eeG6RH?cg$fL1>*S>I zaaNWCDKVnPgoEU>vr#@uKZmxrYhGiXNwKm))!O=SZkZ>3axWugW#(11r}`(oWNMx+ zdFz~lccwB-qaW{Do3b>d`Y%4?%^E{7(Hb^$Z|7%9de-+HKF#yRx0i?c^Da?IIu^Hw z_;<4Nl`PD`o9wiWT)utCGFERAYY~nTM(#(DC!H)g(`PM{3+bgO6~Op#Z6uMN*3~Mz zB8#mpiB!r6FYk@Y*xVg(cc9&ryGT!>YEd31aI}p_(PfvcX-ZI(l#=pnwdi6JCdXZE zqY#H(uTD(g4c{aj-}sU=Iz@B>pPGkXCN){!9T?XYRecTJO2YVvmWtSe&x2TfT@??^I&F;hCiVTo+U zqcKKzeax$2$r_ki&oopj9t55a*4UqDS1v8{x?WWX?q1d&AIjNr`F+ayO!CC1=@`q0 ztq@HFYzp;iOQM%*9TosjSlLNSL8L1T2BspybWy{Ui9n|juyA~HwBT)}(4Ad$`9q{C zYGx?Rw46C1dIKp z>?oQIl;ta|B_}O%c29aIkEsF-wTcPrwNdiNVjK2&#-%=#6HGFGWg;5q!6tM)6?zZuQ%Mma?lq?}oQ#m}o(i%tCYT312@ncV1D@)_c$?1iu zXX&~?55m_@>AleFiHPWqUC(ETTgNC~s7&&GLdWS)~+GBMobv7|O$cfLe_SrHF=$5}Gf?XjdX)^)pr zxnenleJ!WwdXQ^B^~j!p@r;Qz_DL1P+_zQSaY^P1%@BmDb?mXseDqTt`r2!{)l#3z z#hPeZs@!a|KY;l)Ut%6 zF?Gt-COBM5>aRNzE5Qv{qWiK=$4l!+`7jQwj>0~rK{>{I2QE#KUjtv-cDf5XgPbsN zx|#dnWLSF9`#xV(bxy>S?@aKt$OoZB|oQ%B_?)8Y3AVQaXjv(?a;&5`jQu`AJ|W$bK`T1%Xn&9*I}Yng^RjLf(#dG&`4+0T{$sU$iQ)-k{A|k6 zwNgyS5Y!#yx(Rl5BX;A1!*%x%mgaSLcCwDW6z+Di{J!kI{Crwq_$~Yb+;{dqBLL45 z!bBAnL@5>ZLQ(`WiZ=-8JS8koHE%SxAQRcW-gpC*3e)Eb^I|m%v0g=H^pyE3Rz(Y$ zdCU+Avr01WN4EG9tw1)EHYTqyjNTnVzpu4lZMs;PFvm?zTdL|nYPni_Lr9QjmG%a2 zAZHqt`*3H8)`N^VMhmdDf@+^tiluLqQ%Wv3D_Kfplr_*ulqlqTGkG)BGsSfj4l>kp zrP%^wA=@BI5`HO>RJ2scQ!6=LW5t{ouw4-b-b{ay#ZQPnjph?)H=a8i| zsu{!&Fd!o&9Zvb~rd}1Q6sT8jJzzyKENxW@t^`_%N#g)ZJ3&iF3^74#Mb4tU9r#Pz zo{#5}QXj%D?;7*hh$VUccEArS-g`SyzXsBeU4XzIEsIRR!W#;e?b}z^h4%b^53T5a z)6f4&I~o6bgruj98uLAZ2j>Hb+y~A7Fzs)G{6D6pqhtB+^J++QT6W>Wt~?+y=kf8w z+t>Uovbz|EnHi9`|7E2teBnid{e0&7b6UX$J_Y-%b!uz7(%pQ(@Mk(%!Z&&rDW(m? zU42*=Opc%zkP_wx|3h;@EI)nQdU3SAICWTwPnRJBWcgrB0H*7E!Vlj)2tx*@J|tgN zHgnnAhN56b(jEKCYEN7=Fk`LV1mYGuFRAXjYu1@PDW${(S`|2XhUt6vkeT?1O#R4O zuqHFYjE5J#^=fZ)sUJ*tjkBePY&%<*s(gbO%DFsY%uAHp^tESZRE5}qn7iqL4Jl61 z@?Nxe`gdp1{*%A|3GDx%@Ble`UAsT|y$JvBp5M>jLs?!OTi~Aqcx6RJl@uxXfhIbN z_HsHFwp3EOX2#a`Ku7?e2)~@OtsT%@#KOQ5_jf5k7HDYv9#=c#lJdM$e;^qyK*~lR zX!D!clZxoSlW}7^=l4!Idn+q5p!sjmPV*aX1AZ^X546>@F}AX^w85qQs~Vv64%pvE z$i9Ph5q^0~ArXEF9V^^F_R~LUI_*Dk`hPU;cPGvNrBwnJ@67$TV!+>usf2L>ztz2` z3OW{czqQ)F^Z!3wD*K!I%Udc~82He&0{HyHohb4b+(tk<&hpm6uF8R(--{t-9 zT>VEi!0^4Q!1Sl9c>k@5XOi-xHbl9q~un z^Zp_vbexoo_226iOpHwbsHgn#o_^b@hRe+O?wsFG85x=1)%+`Q`sWt>J8@#9V||zP zSK>s^$oRhX{%hi-Gn(TkqO2mcdv#D!nRH*bKrV0WPI^cVC%JfNM^ z{W>15;8#Jo3o6(V!Ys!7lAdMtvPw}xW{E7~O5a)e{#GUtxoi;$KKP^BN=H#94a4u* z2XnW#&7Rjs3&-@PrLDKBNAEszT>v)S4fJbKEjsx(0yR?&bgS{9Uc`fO=3%+dlU(4Dt+iy6cLjpL+IWJmvVIkDmy1=oNl~Z;xX5fGMzbg@VK?wz22r zcR$j7rYWzYj?#Aeg7z$rLYz?rWt<(m8lPo@)_nAjl2`iE?%=kke$;u^|wyR6$g{?D+) znqN%H`jhS=e|(bF)Ak0r{+8K`8-xCd;vGYrcxZcBX&1tb41?lGZ~3mSdSJM3js3Eq zaqd%MA4-AB>{U^ehh~HtN(sp{h^%f%S@m-UUTZ4UL7PBciUv}X4yi#h`i<&Nk`1c~ zN9B&{lIS?ZDbF~9sgT+zBJxUH$STOnu2Xs^RU!4{s6=Y1e?Q}$dA-ALVlG?zWuNeA zz-8QH8%$k-u|Jo??uM-Jx^)aI4e563YW<9BIQ>}h)t%F+L`vzURcuXfi|aw}?i{!_ zG0F0Sdj>Am&GAsWC~va|V_6GO>tOR%z|U}C6||~236>?ycWZbf@461*1|tD+_SEy{ z?MC*K_<$jhtBP=7Jif1aEakb7+Ul24LJlnig6TAJW$}B~=Bae&jdLS@b|~wN*6R%9 zLW~C0!wtF@SxpLSJ9L!!Dif3;IH*b^ccZq=S3$z2MU7f~P7LEoo9N9x z*>zlziWyg=+ryPP+<#`$&bwyF<>DF4zh5I(!(wQM8w9Ez4a4{%iqQq9xlvuWbXW>Xqe;X+mKDY{T^*gdwXLd`64!j!Hu(EQ{iHJT{k@)+5| zm?v2(#4M!ka_)0^cbIT`G|>FP!NjC}rm(S)aHt<&c1KwJvaoQKcE%X0eq!x<8TlxS z_ec?FdhJ^(y6W4|_9FV^;|v2K+hS0NIYbnimN@bJiQMEM0yJl`&_ z9#r3;m3J`QdSPYHrAer(-{PtCbo5kao0~m275di)l|eKN2F{i7PwCXpq5J4xd?Xuv>P2Uuei4FJyxFj{e4!EKHhHCWb_G{YCnWdy(NW zy6-#^36s&Qx})Nj5ToipS9J%~zej4H9c@*O**mnqHqlzSc{0?uOc)`(=Eivrs8R-7 z|8fc*(Mcy6+qrXub*dP&_TaY*w11q~2!Q}f7ViiLM(SpSwi@lcD!<2^X@F_5F1-IbwY3eJ9_Nj?^ z)L-E0laiB_s{A1Y#w4^3Boi-Bjh=3pakypCiQ90mpIpiZcYHlaW7sx3Ft?SCFl0=> zn$Te+xj7nBO3Z3Zd`&vpwkJQ16_ zW2*Z(y+(D7{bJhM-oCM5Fu+(sMEl20IE}&gPq^r^AM6*2N3B``Q&Yy}7m+uwg8>Ir zY#$BIKTZ|@Vv8QLUkWqPD7PneT!ILxuebywKLxAJ>9VK6oW#XI?h>7cT+~K}@=>8A zu2eCr^QhC|8ZxAqH(Bn7mKW7R4ua?fwXLCDL`@7t$D@rTZEB)+djhS$QSS*)^VQ1= z+DXfGIx66`DEj$L7k3B_AqRx76g$bAQ6g@gKs4GzOx_3BEP=CQ3IPFArLE6jAaQVz zN2i{RE)C&Q=C1T1AV?B)7SCQgV0ml5@SLE4aQjaXDa;`0fSaqcx)rXJmPHdgnxEIX;H-+iy>nZgbdsQ@od z?rI*+%GQPNBLrKK$+#ghFXpz%X?xv=v(9M(aq)bqG*W&W#N6(XKzAZNSSU*70&@OSOW003GR0MtkTejw9j7zximyW<1aL!mvsZf0oG#tzZ3U z{B=eAQU@}%C$}QFtsI#T#JT)@l^kWF&=ib4G%N1=H1A{uFXVyzxQIH>qVu{hJ}S@T zfwcJJ1;2zpaJq!%uB_As5HHm3%#a_oNPf=`}V z7n4&oXERB4p;{Gv1}fZQIh)EVyOy=DarA}l5)a*N{kDSEMS{Sbr;q@!`Vcf4g z>r`HEdR@t{_pZ#V6&rJEBv<8N9y`5&mHCqn0LMMMSGv@%BeHunuk?kBDO0p(Ic80Q z9#b@@o9M{rB5-cBASKXO!Sz0e=UNDEo2`J4++Vu26gGC4o-Mu3q930W=4V*L92Io- z7+S7}q&-B|0elynUMOI%yz66N4h8NJ@f&K11OKaQbZ#HwO=3TPi4Fs+iGUl(F}G<}sSkCuAr?v>hMak+@$ zdky+31?jdBMgsa8@C(`NjryDjI9fU%L#tSg7C(nYtC$LxPh^Jfsb9d_HrGoQTy!nE4Y;HHr zbz6&1o{||$KgK3=3|AUltl0k3Mo(bkg`X%etM) zw2WumY*SM)@Fs0#wndV%Z0Xt$x}e>qYc2 z1dKYQJNIKes@#1Pv^r%)1te7907?SMIFVK4FTane2sCp(Qv0+*>mR)$AcjXTw-&I6 zFS~?%`0leEQUF%i&S~-9i3Y>kkYlKUwi5UKp}4PszgXE)sH|qYAk&G?b-)ZE#q%TW zyy){N+yr4IVd&2fAoI|yl70m&v&@7Qe#{rPb_)iVTePxaV*}+PJ@*pvdImv|6#cdy z{gKu=%Zr5F<&#ww2+0>rfYq`x0?uAXr3fUBX=e^UmXs`wOn_b|ZO4z>2{sE97S(`k z!NYsfPvO%#ZYh8WC7Mwbp?O+|hOoXStNV)YT+9AlAFcOcF>u(>0_LqMB>KR?Gb93N zKW2jof@u?OghKNdLlJPGO2T$(pc;IK0*>R;O#ArA()cF8dVSJh`9a6{U7JP%@*7X} z_vl}^US2t{q~pTMVPpmJIzOOZz|gNdmT{$}79X{zA+F`dl`>!oAHGZ{NpJBceg>+7 z7!Z;{KAOljAO?u@!1k*qnr?kVekwoz#m)Ys{lWJI?Q(M)^54+~-ESE1cMAP?iH-Tc z=ZSjS8LY56us~QnSnw)BFJ*MEf>|05wrBgg>Ac{ z*lpl6Q(g(X&=zM}3JKtnU6Pyf=`<21hwb)xYa^(rBZCm%b^SH`%W_07I~M%)Fw|(G zE2GAaCAkN}7h5P-CC*2_GoLa=_mFZ+-(qfIYkI$WcD_{EYnCIz2W8TqK*F5>qO12jBFg(Wv+yY|uO&gLgWRXT3Ys)M=!IZgxF5op}rS?kK~M(J-gAH8|z*^>6!Z*{<|;fexKC*`*r<` zc>IPw|AjP3^U8_wi2j2#{XZm3bblQ$eJ4zR9o78*5vD)+)4wnd-S6|J|3{<#jWGQO zYyNM^(jPATA7tr|E&5OB^@j!jF6lp$rGFFizO~JC-iZ=D-Tx#?@1Tc@frA^f%N~!)0LoO_bjG)jz))xQq;cb-y>6{=X&@?R)e0 zRR2Iv^#9zGf1@WRI!1HU8RbQz^^iJad)Gq zLEU?Iu4#K$uTO1_a|`tJu7+)UaStA2i3K4vyrhaAG%<@*>!7XS^(4G3Vriwvv*l+$ zhRsKMhqh+EM1HRa@d-W}EXN9meNpz%nrSxDc092$ZER_1=HQxg{BCIa42X`y>xSC7 zSf4-;C8<2HCc9MDj3`IrEG4!tJe!#M0@1jEq(>4fb#E{__5>%pH*^a%B$hA98(bnB z65nUwJTqJwvA24Y%^@jJu#jU7%+(u~x|853sO|pVxV0TLKTYg7w57CTePoSbV!&~4 zFiqO%3Xiw8T68#(+t>bVhr-K;%~x;`k05F&9(>T{{zbyNTq;$WEwg07)B`V~UevQ! zvM5be?zRgD2Ty(qG_whYM1m|?o?R}5XFujTUMpm|l1?TEcAH0DF;rK-hx8j`eEP}z zRY)=PnN-Q+^G^cq=FGIq>WC85n`or$SEC=#n7*Hf#_)^^o?8SJ&0dXONzcMMmDvUb zHQ=B?%TWWPgvL^2{i25QW5R?66ml66WU5l=RjAd!)c0%+<%#o?s|W2kMm84&u2Wlx zaiEsRI9_MG$x^Got*K^=z8%@yNT@q4zC71EdOWtTKCEdy;ha*mOFTrZ3BKf8@^QZe z0BGs9Lw9}mssd74Uu}B*vrIc}bKW?|Je*@FC}PcB`YRpw5{K$uB7dHM4MD>8C) zsXFM(Q!9;WA8f#? zjL-$Hx!FSiPvCb1!uHI5bmjG7=N zr+06ZvNJdyDM||L?H!WzW0-w!25(HTLGZmaN1IsUkBFD-uYRShygJ=qb?U4m&}<&6 za@Bbd1%}w|c)_B8kNx(vkg?epMjw-W^RkSM@=|0FU%A+y-96=ldwtu>1?8kmpI-d* z-r8QL*4}dY8>~n$1p+GZlaCxp=5@E@sOmp9_6&@8m8LE~{)!{0f3?BDWo};<-63{X z=Ry#63DqzE=|=bSnzO2LPW(q{`f||@6T~Ur4bLrCRh-GrZdojzO)|t1qjLNj!ol59 zRU5@!+4oo@x}<>Fp_lUUlJf_YghNH=T~f!Twh)I+@rCdPq-JR0aSLah^ygEG1&2_-KoV+HGEcr5P~X&tED*-5wvPh<(N^AhvPNjDsMIkhYGUwSsrTH26?9~R+($C zv!O66gUOb;=F_Dm5|1cvr$YcXgPTKULi-~Sk`Ipdf}gh=LHM@ITnVLyt|T)EAje`- zoFA?mq?Vyj!Z+q7$Oft(ma_FLv|V7*m)1;8mt*v z)vH}@&>f!`uL;5*ZWwO;Js>wdoIYR&KKa%8V?%LbFS4PR_aay`YGR?IsA4y9GDzND zmbe*7iNV-0WLL0a5U_@X!?iFYLEFk?ZWap5>E@WBt#&=#r7xxXu%*{Xo<)!alJ&>w z6;$9L0-kh?D3(o&xvcuHstEjaE*PkfMa8yb88swK%j!LRGs>0wbY;`PizLG=N zi(KXRSb1V-iK~8;?4!JSt+db1A zM--duL}x0kvP7r4fwq8Gn>&loDJOKmO9(};DO8!`bN#$6Fb9Qy<#C#G2dw{;4_URP zZn*-MThk43L0PJ>6pE@P=1i^Bv<&h@z&`0n^b)&BFy~=sFtwOk9?%ByBJ;G+E%LbQ zI%l?2Y42ML9IA4@It@+gRx+@6dEIc9$|c5ezCIbF#IdL~>#1w5<6?ApIAI2)*!rla z#}8Srkw5VeCYMu~@%0)t`S(UDr>EaMdOj#y8I2i*jqlI4Gm&ny|vmo*Bz%j+xYT+rEL#WFLijIB@%_ za!F?a$99XrB^EvAjs+jvFaqlGn8L+%9m%ehyyG?!vz+9O4KU*q2tgYFcB*ZWg#e=E znXtm>g!1YF@m$1W2y5bKn*wqM_hhN7UQYQtrqI%|$1mo+%@#1sGnTU3*`v@;1Kkia z2&x21%-~QS=$?mjn!@l~&5km$cQ>#%WH^fQ3rQBHhNqUNI;SSDabYBR$YcZ9^fqo) z9HunjN%62>Y-xSxzC$DIfiFUVzj-J7wl)12VCN4_>CQFFEgUq^pQ zz7>d%R0)wc?u3wCiWwD+vLITvD0enAF+gpWov11gePvUAPEKo*f`+macI(oznvft) zPhTV@nm)~CT-miW{geuuE_}oui%s0fKtW4}*NPC=Ep)2U;&QW@OQFP#;8b!*FV06I znF90T8)BW@mRz1@w#s0=cDkPF{`9T&@tNW*I^E?arj?zT%$m3jd8{v4t&T%Z5$#d> zTm3Nf!iY_;0z+;EnEgYVbf}D_$l6q_jIs&5fVhyi(J4Jz^mf_K6vB;^6`Id0mH)LJxJDtzy0dXk{!@z^G<8bOO- zrVs0>Cj%-~X0B7QGf>ZM>XmIvclh=s6K!L&U!c}^q>I}pj;VWkRqv`lqXcVs}N&T`bWRK#@hE%jmR zZrrjNN5g&%M=0Xe8b`C$W2x@u&U{HQe?+U*<<)zp7={o_{cf~U@2rG9VcKly`6S?* zd3t+~h7dEaR??t7LrVpts3cXkwL&F*^dJXAqjztJqE-wnBc{+0lJ_%HVAj+3`z{!M z%CfU+bsam$fnA7nf9mxdguP0V8usf-b=K%Ci=+xmN29wah2l6$mD;4`sbUhQc20ji z-Yed_00ZC0db0;16(ox;)q$RyS&+tt?H0*zLT_gStcP0jTzI3ldc!FN7+(dF`HCM% z)v=iS8bF*Sq-qY~F4Fk@Rr?NU2}fe>jvDM)#INHh3QqNGE!yv#_8S~MZ*PzD+>_xs zmPraJHORA@b358hNzPVB(h}_3xVdOe6-k4R(-a0K?#FNI`F3sb&TRMM+prc-=@t{9 z`nm-V)G(9e=O>Pkf~B_!_6|-IDhek}QX_&pW+sG9OS|iC(Myq}Vy?%I@Qg1eIp>h$Hw0LZWlbW*nQy{4G?i z&V*0k=VokA3cA<{&hJ&vn}_nslB@d*L&K`G*QUNO<{hJ8jst7@Y4j1mvBf?*qXGaZ z-$}cu1}tC&jueL_Pi++;2=?$-nnXw^<<-;3$Dxm~m?s6wW`kLxuPlm(S)iYpuPlcK zNtnuUFIKU;-t~4P_xBUk;Sw_y;!;XkjE$yL@#gD7EiaxQ#ErGM{ZiY^VbS76Kk;R6 zc=?g|g`32D5|4-wzSJL%Htwtjf- z4aX4Gpi~8 zTKFV#HhV_ey?}Na6P=O4-e_@LF;+EJ6DXg!mED^!pR1UwP+KINo;yZokXW5%AUGzP z7|TXsu2`IS;C#excJh52e<(zxD86ZQo~V2_swGOd6Muv2h^&E&cabxeyM8ZdkNC{# z;Dw6i@w$NG3k=qXZctI(lv!SNFo>8_7hK!7rceDa@jK_25ZO8hOpD@X_Zc1`4QM za+*l%RH`;22vi_wDL(=0ZE)BgrW-52??v}@L5&?zw|F0u7~~HD<52SG=Q`$nof5}t zMt*Aix`94%IN4@Wk9-<0dGUO%^ql2u%v5OD3>OHA2WYkIhl^?|J9~5{z-7*jrhUai zr8UqaDqC?~ABy09c&_EVskVcDK2e)zigeCxmr&x*Es@qe+{|eo>@N@?WTNO0qqjo7 zWR{v;YW|iUmuV8e_13k)`!&~f$}rzj!qCYn`7x8&gPo~r{n>bW?Yn%UrKwTv(S5pS z3nA88Xy0jz-bB>SP`q#-1#>u>*VSlRPa{F^&*8y#&GPxH#l3X5=N*u9mkM>Yi>S9p z#5zI~UM$(U^IU`I-2Kyef!+SyqPU--NgMi7PrIk*qBl-m?j>U)sWF|_gBqNbg;bDg z!xlU+nSA%KtT9#vXpVEDs@=65TA$qIJ7I!5Kc_$KzPcK&rdHt}1)xa!wsi(+y@n3x zRJy$$FSXJQab8XwAJv=nw2iZx1%#Wq-af31HMq^l8H7depfU?ZLoJa9kt&wU$=KG_ z9O##;pp=(|&1P8%Ap%L!NSQ|olmzO;2b(bKw_*AEmmgwwCQqLLu2L$Mr%lR>vSm;r zED#pU)A*QDwLcl*r8qg^!@9RG z*V!M<8m3VustqUK9@0BMcwg)>DJf3AZdtnP3PtB_)WVZ%_iY#CXHYWKjmHyp9kEzm z$tMLJs_K^o%AF|;=Tf>0$UVqcyQ-F)6xhqF8sswF>En7X=@S7e-TQi)Yvg+C)1gqAm*)?plB_Y54hK9y| z_xPlwp|0ShZe;&bl+`?{@iLQczU0AVu|4$^uc@w$(HDT+acR?cDT{XIL10)ymZrf% zXq=iyTqY(wEkDLqE;KW}Z=aOc+Y>$STc%mwH^sOZoscljK9Ma8pF4wAA}MYGf0mmw zs*Djrlb;moAg<9(NM1?%1xQ4O#t~vb;<{qkKciBZE32*71?hUJAGPx>_@@56;N}rM zQq`IC4I%(B&7kbFdqF{xkeGZl{EWVojjkHwRCHp(8JRGp@Zl+1iRKQO(h%oP&{kAl z@fCuSi$j4#Lf(FGhXgiJmQ2lgfwf>u6l!tLfwh0KWw)SfHUh`UW-=imQQg$y!AWS{ zL}FU_>MiYw9(%VTkv_45MV#rb;Eo`Q(~C72L_9N;2?#wbQlP`8zX{(pUavx02d$4D zcwg95Z<1d2VD=El&gx{s#MGi5w~XL?(@M+ zruz_cQ;Os0ue(qjoJZwJJ0cGg&HdDV+X8ipIZGy&oC;D#R_frOZ-L}gE%lS3O~bY3 zlS$ne>V-%AD7hpi1;!~Ji3{Wu3L|v%-8&-jj3dJR!Obliiciy_vnuA*w#&6d&*3x4$8mXj9*T|48TnMt`NU7EatbU>Mp?-IM3GjW!T_aQCmSB0tYl9b$|ojK zIZZT2%)pA5A!5>c-!`IAwXh_Ytk~S))V0h|n8piq5$!Eit~KciRwzEZXS!yzaM=X4 zKz}5@U%A*Kk;LSFT`?L+#xwIS3oy=jXmamUTq*BFWrw9cY3>>t0sn2Mlb>8j)A7!lBp@;_{yipoX%YtW>@}!%-!US@oEi-!gGWv1SMw9;@;k4Nu8youG$=ExBS!wFJifn{x}`+dQE6exPy4w5 z&$lM;{pQ#fsq%-RHFnQ&4Z6nUL$+{(#7uhkr{hJ{_U}b~Ld}CrH=VSPzQ=mRY^utL z;oZ%=xT`Y_sDWz%vsbxjL3czYQgKIny11*fnF2}?Ns+K-5^OF%uiC*k_avJN9}+#k zb{}n>Pg`Mf5fTs)FcMH@D+oT)xF^sKV39DHZUB}W5f1pXR}tT4>N5z3hQ=u{TAHl$R!QnXR4_TfFSvT)xD= z(z-96XLfY3VpUt9xjyxl+^)sVU7u;$0H4BBQIyJEIEJt$I39-G39~!%3hF8pWJ77P zHwQ{p5gPX=RLu#a4?F0MklP5^hLUw0Bps&4Dnj`+vD0eQXRQOMn_pk7ZCJoX1P5*a z3I@zei=of0g%%{!J8}-O zD9JV!S3UlMlcjlmPJN0yae>F-yYEyfOs@t4vL;45KWY#hHWloX0#l{4au15gPjLiU z;WSnpg(2w_B&|~==d$)mB@{rrgs)J$w>X~#w-us}m80x0%w?mHWO@SWh*fOR3Ywas zo1lnf2Bc+UK?aS0Nm&I&MT~kQPTp}D^*kpkuB)1+<@FJxLJO;>1#0s3`^Dow_iY%c zUC@(z^Fz=~loPU&hK!|(QBo>8?#+yL#octH#m(4Dy2SDW3??KYf9pB=a?8(bDj7Aw7D2K&9#luYh)`N4C+}R~Fe5KcgTj9x`sK8=4mVAo zA0A=*3N9Cd*+$z`@64D7KFgjJH;Pq0f(!>Gy6zl%)$?9ooQDwaE)6;&ROz!nwN!Wa z>k?j(rn_CKHQC2B%>d; z!!!z_`Hvif#;oN3o!g0%Ux3?4=A$yfL*qGuk&{wcVAnP>WJiRuo+Z^bl5 zgM64=sF|(Otw+K(bufzRCe~f}UaT6DO*Igs>H`ROrhjh8EbBavPU_t|&{O zqHfeDZR;Yjskz(B8ny8S6Ig!qB6fi&ef48G9%F>`NG(WtJ)t60GR!izoNXAyH7T2| zV9fSOeSKk0g{&}G@&pnaJJkV=5K`x`+86LydD%p@ac+~wznD4M>wkau;PYmi-D|Ok zv(t9G2k$?iTM;3eErn8AaMQO&KYGI%iJV%1E{oeU1}h2pevf$BKMpQ|qtg7&tC5Ge z{W?RF0s@?#fkzkzb}rdxr&T5{Z&~jRU3$uRy6~fqtm{*?#XPV-I`7{yc^^_bpagM29=5Ho)Me9{6QX`; zm?xnPn_6RipgF4BRKgb1KA?J6Qs4AZNXCDjKsIT?V>&(E_HlK?*K~eP_ZABJPj)mG`2kq0DA3@6ApPPi0PIdWVQQ5wRs7#&qeI zL##sf*hktYQ~~DtmiZwSB^-a7IP+AS(z)5Pb)FMql8vFhd4_pwFO7Zc92QIhS8>@m zLq_}f)iix-Wvgid+#Bo24&)8msB4;r@ox-bepU1JU^)_b<>7s^pX8ZOZvO+eThc;z zvPnaP*=g@o2&co_hG~vOy9jf#RV#CZ6qh)zM88vDLpSUyYdZ~(0=I2IGM zh^sMuAvj~KKbP-L`DiDyc$Jka=JDsCAhuP1Z>ig_(!yzwCw?Wgcx~yIxf-9^)+eSJ z4B@bgG0I6s-S-d|E|B9k3z>dwt{k01%#hp~i zzKm?_S{w(F*!0I-&^FtVFFIp5X;#^Fr02=mM75U=L_OqmhVZpW&Z2v~=XA#F>5&YH zEq%i)ciBj_UW=xNmyU+L!|G#PQHJrV2R4e>_1`QfnDQkT02CcGVE}GMmG09O8+)_{AC6CIBq1?fBraN^vw17*_E#Ic@zTKk*SKP~ z)2jL=OBaWm*bea9f2;&Q@|_RJFuc^KE&3 zPNU+)c4~e5!Z<0!uK1P5SUV)?_5KTfrsmjG=6;|%-Ifn?i`MQ^H389_o~94R*ax96 zxK15>eahvyN39JzcdEf#z9;h#xWpF-ep{JG$<7$bJ0hpTo`EamhoA z+NgHKHG{}vAj_jX|KSUTU+eo3@I?M$cb7rQXIOXhr~ z@m5i5-i}#4=FF?@cJp06xOP2WQOD8T$u5R7286)66@Sium&*ATNg*VDJDjb_IQ z?&f~;+)H+jVpkS!jKn^>lhWQa2ZB2xvCeL#w0X|i!FloKu(x{e+KknI`8SlS zqP3Ca?`c*=3Mm_&QVhhxs8k}(4A4l#F~dJB(zCwAp>F9MUcAeiq$w%-Cj5O=@cr~I zVg=Fm2wT?BXKy4}lb?lOGq|7gFtXEt^_3Jg`}-Ivs=+QC*2tl7wMA}Qz8dfDhjyJI ziw|unsMJ8LYn&j5K zqX-8BzM8NvvgDM2PG18mmjGTV@_UJ$>5ITU&T*;AHw6X&7a!h0enFi#n~QX%zP!?o z5yqWmi(I9zd1W0V`Btc4K*VK_(9pErPVK!*<6_zmPP!x)4fn3QM3Yh$g^zXt7AajK zN$*>SS9S3$YT3rsi%rvrbz&{j9=~ya!v8Skjck|kqTSw=;|Nl!jxLo&^F7?-m?X-X z@a?Xrdl+0IkOu>d4Z zwhXS>0PS5=Tp>w)lSd)xyKLSM2Odnkh=B*HLN8t%O4d$(~+jBO=gr-uN(vgXX z4Fb!9Lo=4_Nefb=?Rg8*Zmm2~m!|3OvcLXT!rX-Mt!UODiT%TZ^s*HPn5!$sTj{TT zfK_Rjkt=pX^yiHI757@NX;Gp95qqH4dDeZDYh*MLTmnau4zr`6{Oa*q`9 zcNBf;Fk!@v(>TaufsB;?-c=%)q-!vFmQH`sDj25W>H`sL%A#4thuuC6KYQYt+0>`A zYKj2x343OF_6e-2A&B_IdIt#_nh9EhS)jxVQY^1>r1ZH#ab0PuZ2K(Cub-DZ3T-R9 z9Mc)0dTS(#y38n_%lw0S>FpTkfGR`GXZ13Ue8x|@o2n1Zd%24rjf6Ysy;bA*^qg=X zn0Tzl^hy6X-%INwlcCm_VLn4$(w)-#%H0yGUR;klYfHBBvDUj>OBhtGNBj>APsgJ3 z1pv*Mr9u`gbwRk#g~wSO+3WmpjYmswSUg}bOdm7h@QW@f$xjN=zmp#kVyt9wDX}wm z`~gS2^m9cu+&sgsp!n#ncUMty*y6e@!mjjPId#;!ZkXmlx;3|rvVy`JhBDRmobuprau-O@iQ!y3apq@3&|*TXLp z8+&+2>lV!SnWK!+f?={fSy#4nbAztZm#@dM)Of6HgRAm2U$0{sp9Qm<_ohB`>FEab zA*Jf3y$K8_QT1dh!d=YJ~`E`!s^KAc@mIhwGjy+ED-doQ1W#^@x6_dLYcbDt0Sa&Hp z)5|UtICER~Ozu?j`c^H(*Yj;RmpO|~2Rbc}^ZILi>9E}TTEiRmb^j9NT2qwMTDC` zKS}44*iLwTRM>p_F|l@g$DS>JsLGB6f3nK%HTU~P%aL#c{#UX~?Da9S3xmfv{E?%( zYDjJfUz2z5vK>4G`49qXdNl+6y657~uhVS3fPH+wF^+jo@|d+TY3B3xECc+lJGD-m z%04@i2?EyngmO`P4(@zSVKcoHvjDiSJC$dEKsUu)B0L=lJmZ|{uG%SZ2YC7jbXDzV z!ST-6X1Y@5diTDeEK1dJj<;&)8bqQ!|&AyxX74FVkRE0zW{K^1jMqpu0RJ(~a05rg_$WB~7O5BH^@z)b}Y#Z`_`G;?yq;yWP-w zC#`CQ3K0aEm+05QA;4&(1gdIM`vttyi>p@Gr1E=h-gXtJ5EUe^S58a?ZB>TK>xeE5fP(jW$i7 zY&Q{htEJvM)dz&Hsr7PHAI7|%Y$MZqRjrtRJFnHOMDz>w7NL0?-@JB-Og_<3;7J>X zp0Bf<#cljR|28VUNats~56OuV+XzdPEN;mL(6l-3MvdJ|Cgf=Y&8zJujZr5P)wPkA zsMJ#)1`@SFb|akC>hEjc!D=<1ci8pgq@BL)->NZhxf|-NLQ1$Dc+_@d*PD}`|29Qn zSR2i};%+=#)BRrK?T%KP-DtSFJ5}QynpUTIHyZ^crA#12o9w*t?rXSG5@AyyXx?ep zAFh~m$1~7wzW!<;_H~8g$G3A?UNJnDzpZrb{6(l9y}U&EynMYx@Xfqdx?KsMi0lV+ z(ovZbr2|r?h2?VU^mG!r5t-!*1JNTAfQ*8Ocjbz#(T5UP)RL>&_6pn#;}W5Ibo_0~ zNQuITtVM<^P-vU5RK` zq4?})43SY?(A$Q&3h6`igHfwc9K%e7tZs!u#X=P;IU@$UC_r>#RARJ7lty$7l-IDa zRIo-`E&GuIA%kR829(vX#z=8 zm&2QCAxHj%r*F`tsq}`WnC!dQDE~fb6N-c^-hAFPi^pN~sGTm1Au*Z}sthYFm3DdT zqA*^_o3SC6tn8RJWfHa*yqCY1REoW+kgVd!;1<;Y#fI`Pi5NERMeLRC1?}b93c5(U zXt@Y;W!LABDoiU(D^JT$E8#J0(`_?|Md3%KL;ay*&<-dKGz)4B{R$<5#zKKh)qBx< z6?-9j1-6fmWsbGEa*(M>3Xo?I1&A_49-<_}&_rh(H4`lmB@kT()q!#?)!$TL$`)^< zm(PJdE4>w9tmVY;^J@1-HctZBW9OKcwirh3+Ag(Afw6>B-;Ji8&laN zq7)H?$aNL;koM5>5a!En%pq5pQJ7Jlk)ILC8*W*1TX}xqaS(v;c71kAFqHv$Ig&~- z95yUFBs<(Y)H}@F=eriW20Y-b)jE|pRX-IyRpxsK$$}ImKl7B6eOIv-wkEsQyT-g$ zv}Sq$J_ttCA+TJo>Pdt})Fy%I5hG8`bE(aH%9qu#3o>HTGR#cX85p(93o802%t+LE7!}Qn z9QsPjL)B>t%3=zZOk$P?EqaQU%v{tPl~c9Sv~nH#nFedkV$ENvhb!kto1pjf`>2Bp z>PCdua}EXy`&`XE${W=MHYEz0I0OONxC5BxDyG8a?&opCKFW`_)EbQqsGIN-Cw8_2cx`}C7 z$stxJU-z_5txlv)DKW2SaM>KYe6sx2#C^+>$|oARjDs=eRpw464COo((G&ER6_uiO zl64vyc~j|Ac?E+b=0~PS=J+Ona;%Dw3E_#B395;QoAR5$O&iOyN|DK2%faNnD~ zO~y^jO|ng`&Emu4!$!v^CxSe=9@!r6J@P%$JaRoUJqkVEdE}4{hMMb`>X^@%%$U)X zZ*rp31Njs}Z{PS!DC-Uv#MVn{Uq6N+5?!J?6( ze*g8+H7Z!RYYx8zML}5qCs>JV4ZloLAH%_}Yc#)5O18>+B&-W@+ap&yeRORQwu->< z$kfj29Vi+s8nx~-Ublk*4iaIB2O2PqgBk>{M`NR4leA7Y^8nGhBrF5L>QMu!gZMW- zZc^0ADH>2&H;2{1>JBOpe24}Fw?_jc1=4ip)hOgCHH|zhUh@hAhHm~h_47DL@WY$T74FM zR&f?`RseZ?E_1FekaM1zGT=GnIp8_s+3z_lyWX^F44XL+fC(IwA#@O2r}g9m%*36| zn8550I96AMfzO0N_AM+@RL}qpUcb=*pk4?k)wDRv&5#G_f&D|`90?>nA%vomRBhty z1HsCowfz$&`sM7b!H%Mt{nIPD1|(!5GNQ&*lbygvEyiPhGo9>v!S3nJ)veV-D|(tn z_UugH>mm2k$7q3<{PZt}Scy8N`}Ys77-~L;aUh62LLlwYqMrI*z&>IF9F9U(KVspK z=k3Go?CmcW)b(Ei2WZ(vNzy}rqVd2HT5vnb9nlQnbT;cl;#(nR`VqkKI6WzLvtV`o z1mINM^KQ1aV6}FK_JelZb_@Mbn{=BoXqM-EDPWXF%C8k`5LU%zTa-8A67Ez{9(+v-ed!;&8p3z z4b*1GBQ7E-0$3Acg@8kZ+cnxJ+j-jS+Mh4*EqE*h?0VY_!TaEy@G*ERd-7K3C_$N-| zB=F<*E4Sju9z0}^?~;B_pJ`^6X>~W#R5ZRnvjdg@G|DG2Zcn^slooHm0ZdHjG6I#= zjDNH+&5X-2N*ISqfi)5>yDN?S#y@wnO(v3cKPpQf@7l01O61BkL`Y4-5^Ic-V-r4gFD-8_lPzE0m$A#JfofV70=HSWIYtwX;*Jv5yAPHdrs<~X*<4m!#@jcw%Q_A|&Oc77`Q$$R#c~UHl)xN! z(oNKJx-7Z;X_;X;Zy9}`ecxdpcR%$w)1}k>ll!E5hx;h6MWb<}H91g#B`kp=fg+wF zF(ob~AtgQ~Q729(p`&|YS!H>28N6Jzd~Kg+-);Z>v9Ajh*^lf(jw9QUN{QT+Mqj$0 zEt#{QMcg|qb3yJ8zqbNEmL#(01(L(HD zqr*(1sHMp5YCqn3*8?_Fcb}zps9`BC;9BQN>sqwg@jVyK%vcCMH%U=dGNQ zy2dS~sU2}x7@UQAUijRPU&?ev_&fk#@xGDZVs6fJeH;^(U_}7VLbIP!o~d({clhMc z6H$Xyo(%S_D7+vkQ%eI0ETJN^cPhU38**_0{3a4@t+v|h5K&x&7`{1xoX%Hw&3rDW zCfB=a5U_!7SuC(W-$+cjYOXc5(!#{FP}}6>qIA%@mm{&+8nlswv?%7%Wh~||=1>(F z(=2w;-Ty%7#dt{rr}DA|T0RB`amf`g9W?kAFAcQnzgI%jPMQZ%f%Oxo!AT50{6y%E zH+26-g|}e60-7`H5ej?0Mz13-{(JRqrj2Eq8YNyjm*D@TDA15-vsh>XXmIpqd^8B! z4u;oXK-*}I7;wB<9xs%!Ks0q<*2872SxwLhZ3^8UtB>qA!`F-aGK?}63!U%kiqMJ& zfh)z!X)JUB)l{MyshcjHlIPP(K}i9OjIUp4&EzO$D0YY(<}q*iZ|fNv`}UxldmngL zd_a6y_UXY$#IHoNxG|x&M`arn{k3ZgAa!^ zA7M07?3{XSW4Q~={sr{)5`<~?-%;og^4YKdtb~bmh5qMq2aW$F2H`)6GWskLI^@Qz zFzVZ!f08>F8Hq6XUtS^nj|83Y<)5Xq@k*(+_l5@L31Mgb6;^9+3k}Lq!p@2-wwB(S zC^H5F!u5gzYYW52(py)9vM)x_({n}OYT1>?7FYJm_vkVPq3=tB2R=ruZoO*SH`Gw) zoV9+@j=7GNh|Pg-0U4@ZTieY@&&^`5&%J5^9J^VJUW_*u5XS#TlA<#Me{lfIb`_%r z=BbdB<8)|lZkEo*ZQ2a{ zr~xdARg4Unw*o?t&LcI7UrvJJU%_85=A*A1LXg&jGK!x-g5qih{>uTZ$Ez6cVBVAn z!D@F(UVZ`simL(mSEpiCJaHhG-ko^$c?hoXQ`%Dy)Z$4HQ{o%(9)T0&`VX^_HTJX^)%O!v9LTt$qTqijFEvhA1G z!OufTam@Nuw|U;>^A6BvKIS;bBE;7(nJ-OHm@asRse7a2fg%Pu;9*nR%`kjYnxi=E zPPb^8glF`Hv~O9=r07<)BoRXq_wHPG7DOoZoh{@Zdj;)X%dpoqEx0t@2U(yu3H*YP zE?{wE+iAtXT?;!HXu@iKWInc8im*}{a^h(`OoEhUG@*NH|BE#tYCoEpQPy~?e)oi*;>7B?KhVz2sr*sm?FV~=9zyM!5P1QA<0DtFATSI8#9Uh#g*FoY>xZ|%X>$r>R#spq>o*iWgzvtF#eaa2g7B6-ZO($s zDhll6{C0E?Q(zGn(g{Gm0smIVpKJUf^$K-1IA{1lWF*;~nyFp0x~_+=Wih0u$<$tr< zB&R_eK?kfFQ~t0x`n%-JC3ox{#^x%te`R37`J0b^Tps-y!eG8)(OiW-gXs>~vHW}E z?^i(IFN*BY1&DV3R_&*1k(YnU6TpWodF!~$s*uB@@tv>qHKI)r37%Xs(Lvi3(z%q% zjNTWEwjzlJqeesAMDw`j)p%L(e+3q}luF@!v)c38m!`{G6fQz33uxP1&2D%*$r$xt z|7?yQ95MXy3NT;vQ-;4T_TNJfcH{n^wILE4UgMSWO<}=Zyi&eb%~^OmIgu9#K5`AM ziMzQ7ZznI3=(ftM^9brpv2LYsPXPS0MEx2 zOQ^v&by`Snn=;#pV2I}jIFB43f%R|Y{F@4Xg}JYqkzKC9^HIkVD)3Dm5t92#nQccf z#C3Iz^s)n<4>y+3Ti?{rLUK!#**1MTo;o`eL*T1xfXfHCJ_t-958u>AA-NgKY-@u5 z4F2HW{0R&7-xt3r-+Y>@W`N5TxIPnSDMp`9B}3C|7b3RH-+P#;)M3Vtl{Qb0={~Za zNls`q3Yf`^B(>zUT1PRH?B2~clC)6K15d^a6eJ(COH?)wMF!nu=;gToTTm%_6mF^onjr=)KyVxliYdo28-1m|^qb}N>p?AymAitYXtkJq>|TZF z_PD9$Xn%&-a8pguq%lnH3J#(rV9K$1rJ>)(O*KIi!Jxe>*pC+UFQ6w^Fyud=Sz+$5 zdc~sG1F{yCgH4J)Y;FnKDR_fgy?g#56EESCDLKVuc~ zOpwu5Z>k5cIH)*|z^_G{>Kj>?O#(LZt=c+>PC&A#-(C(y=^pyN)sAI-mNmXHvP^p? zw`zR5pf%RWDP@}5UXm{O*>Ag9&wxH)J@Mokd&6*nw7rqNwBK72t;l}%cxhO&+Gdf( zlf>g!2+&&5;JAZXwxaOcyKDAVZ$B64Ta&r152;X$`Zt7rupincmJ(|SwZ-Lb5<13Q z0z_H&eZ)K+7WBk8#f5?UW>Tkwq1V!xK@ePSMq8GhOy+r>IrQ$41{mz2WMY~RBJ zjKL<)pI}p|6Ze0-8sk^qd^P5(!d6sN9qoEqp8O;Nx^y+Y&J6>R)*R#0s7rlsU#6>G zk##$&n@75XLDHM#icwUYyq;(v3AIraOysFf)CzOIPFm9w&%m>rr_=~ZSnLY3@Nn!6 zCo!G&MYxf*n~{6Xxd&;~U61=%;Pj&Rxmh7vmK$dJDuB9)vElYY4#$d;yl>DTGZ`X7 zxXFGc7VmW6oeuZPc50LF86JY?2gB>^Z+A$w(Sx_Qs+B|LMFx)Cz(4eQn!?r;Td zEVV9uFuAp}ytS*{R0V|27I4^yG0ARh6trKlGmQNhef{QI)MajJZzc(F!_7R3{B6x~ z)#tnwK_8y1hF>X7nkKifw8nKDt>REYMDFTYM!l{dkX7bjKFaG7H%f{i$uejc8IRkr z*3#C|BB6dO`=W+DPJ8AH*^QxL`HZKJ)C`}|$JF|Pv(hxZ^K(YeqZxsl}3z0D@o*Z zYSZ`A>!@WnY6_9Aynqxf??>SaGd!Kp`C!PWm8x$F$KaD-Wia`tm6D&8Ak`r%s)+!P z4gdR3pY%tE8MD$U280C+I=Kh#0Xj)d#ltM_p?+c5o4Y>QiN_jz-JprKS-kiN2n`QO zw_otR6o(e*Xv$A7C-4jnpgYVoRrLYyPP5-_z>f3VJx!nx@Oe{Wn!l|a`oi|?S3JlT zoIFVn-F<4c@k)sB9bNS4k`^9El3vgwuh}|_86PCkomtv4JH_#uoQ*Hf9Ifbi!0BJA zn#pp}uwUF6tIe^PdRA#guK|uONQ90^8?I-TIw+3+B@BZ0JIT$QiD8p{SBJ`Wyb>`DSjc5w7CTB}P0W799zjs%3BSZ^e#K9dBxXaa|r;*i8pGalEcH z57`EKiA?fs{X>1A1BI{-de)DOWMS)b(9e(#gYw*v5f1f96U(raK{H+)fB(6O<5tA-@N2gcYbP-k zf2Dat&UzgG*ts26Qf9O9QUF*fPFaA1Ur z?Iqla`!^&M4=fR>%kok+(V;cux|s&MvtyF zrW+`&z^}^m4cNDyWU+_R8q)>TnOG7*;S@on|S?I$%Xpx8OPD6805=BywR;|jL8EU zi~kLJOY$r9xKXro^xMHdtTTIkfxQ z5`>0=iA!!sv&1EQ7{bXkVqy2qA(86QH4}X_7H|bnqU)PM@~B7G6jKtUn($!&N0Z~* zM~qQ18x^5Ns}F9F(QJ+PS4&W!IlIr3<> z3G18>zWu=y|Lp%m|7s*gatKj8$h?+7Sq=9r#);uHtt;!IA8O@`t#0Q7{>uEcfRHo* zj0-6r{!ND8itX`5x#LsM2z5Ehv2IZ>XtQn^>LVd2*KKKlr8chfD|T^UntDO<R#o z{$5ED=0?2AHF!s_mM!t$H9hIZH6;#XA{sIbtWAwI8`VcOS|6%^leBIIwE`#kOmQd= zYFAm;U?@WHNuU-C*aj%351vlBuG|^aJ3~34>6N`e5vj8}S5KvU=$H-e-oY4;QAfwVFz7WVP6BUfhUa1dreaM`7d6QvU}SP`tf8Nl3g{%NQ!B6Wr@#a_`F>& z9bBGJ+-+%IRq`IpyOgDJMW*O_lJ*_W2KpDSO0%%s|NeoY+&$+*=_W50?CsXI7Kpohnj=>siE>Nd(rY{OXM4m*XI4;o~b!iYS&J=Yu zNp}^{9q)z_MpEPLL3kWnA)Zo5Nj;6(la3%l%Y6G-gFI&^+tm z#(D?F<2^=~rG3RNhW$N>vP0W?*W>5M1Cmt{%(zP#M9dGEry^ntN44Fb)4A;W)Q{yi z5Nx_Wf0}$g@4km5aXDM=oiRJBKWuYxVakORGU%wr2)M)|cX5xAQJUM1k?X?8nx0I@ zU&!{x&C9xsl?r>H#{3?v$K5{ei1)~TTo*^}R4qn8Z2Mejp|C>|i3=v}PdRgFY8I#8cYn z$e>06omj%|nqX9`)2?$jrK@olVgj4T#=IxOK9~--Qc<>!eJ!j;0;LhKVLD!vw_Nt-!tg*b6lygz`R*6#FPU3Z%;u9+GA1z1N3I&ZkQ|Nx0#}!_l z`JU@ukGw!~(J2(yrTkELZ>0$8PoXBok9^O&_pWO(T*T$Q+DYGg-VIr5d>sPo{XhX~ z4(8)vHoy6`*MR^DJ`M4;*Ac4*5sU$uw*qB?loujpI`@RLB9|(8?Y9mW-wp2dX;j!5 zKa8}i`c$)Cfkji>-ola$i0?QHal*$TFRqoJNlZV`Y*S1>b^#O8O(3kep!FCvAWnmgbJy?-!(pHdsr|r zB|kp3Z+mnw5&x8HFn`J+?2C&6WL4Xxm+VuQ+viVYB_ljBOE9@{MXtL29?U!T`uotGanR= z4+1Mn*WHgS>0V@yUx5ZL>~{r{R0ihR%*n?0mwSb;^Y>^k|Ll#f}=&la}a zzh%cv;W2x@*+g|diis>b-{Q7i^h6`SrF!q@pzENEaOS@S1OGLmH7Dqw!&#$Z3m7ZH8hDez2EcrV)@ee5k;dS!0WgxETC;_;k}RM2bx_Fqq#bA7irMC zD;=Bkf|i{g*AqFCbx~ zsZeb!*b!bk@@B10p^5EH(l{NhrdnzNd7jh*e*woTUOo*S%3@lMx?zJ85&0$)G6w6@J#6>F62=plRpb$n2D zW8SHt2UcCZic{_DW~Keq;TNf$@a@7}^iKoDE`W-~4?+=TYEiOXMCkw31Q9BdaEfh;T+=Rn!)T&$EJ)X;pxuLD^w@^PRB z=pxSrt-wXwQ8w^`HGqSK^|$iC3vK~6)cM$f7X%1E6p!aceQYSEfs4}tS%IiV{bK)4 zaQXdQ6J@3R#!8ABCQ%UOH~NSR6G-`OMt(m@Te`yp+=`R$i%+e^*(qBn9q)~%)QQyU!LJ?2=a%2Bd!M75BzF|~l^~?;UOUZSszi8)obA$Ppx%?koFA&%Nq@8ko7ftP4x)e^C)ROU9*XV@}mkl~v z#SN_Ezi8-p^YuS(DENX(ut=2(QQkUhb#+oTnrsV0@y|W^*?G%7H#W4RWR^5F_{LTI zi`zuq1;W-2C~Dwu&k+=z@x^RHQKkIhBZX}ZpI&5Z(*uO=?G#10-0DI zQJUD>zp&$GX14tO7?ZWFG2L}$Ia_N32Ytgo7kgn~M5*^&-yC(C->N`m{dNLVYpW+0 z4>sB-+^j6D94wqb5bBeim6d^oi-v`ThVHuujkB$x(RCI|)HGoEeM8X;v!lF_5#{gL z#Y5v_qqO=J1A$q=Cto?yLlNlw zxhxCns{B|V3kQhhr~a~YpgimkWkH~eNp-RP(O(V@&Yv)L@K4tW<%v;ABc?;{9}JXU=ZlL`s{6=qiDHpuV0X^E1J3* vqV5kA`?|ID#jX9#k$$6O|8{GCTWr|bKex62b}NCvY+Rhzsi{R|MX&!KB2s^} literal 0 HcmV?d00001 diff --git a/fig/fig_sec_jam.pdf b/fig/fig_sec_jam.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a1dc8e2cf7806bc51a101f1bfc46f49a52050d16 GIT binary patch literal 37939 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 literal 0 HcmV?d00001 diff --git a/fig/fig_sec_keylen.pdf b/fig/fig_sec_keylen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cf2f2ea041fc2b64b89f90ac8a8055e7e1ee0bad GIT binary patch literal 30709 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 literal 0 HcmV?d00001 diff --git a/fig/fig_sec_real.pdf b/fig/fig_sec_real.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fe58e0801ea94e66324d03967e19656e5589089c GIT binary patch literal 39106 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 literal 0 HcmV?d00001 diff --git a/fig/fig_sec_sens.pdf b/fig/fig_sec_sens.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fc4ebe5ab2f1b8ae8745e195471fa07918da666c GIT binary patch literal 20729 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 D>!nC< literal 0 HcmV?d00001 diff --git a/fig/fig_sec_snr.pdf b/fig/fig_sec_snr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2beb8034ee8272bfc16f4cddb649e9e1892b068a GIT binary patch literal 39316 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

ht6zgr>E!Ymn_7Q$8^c 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 literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..61b140b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +torch>=2.0 +numpy>=1.24 +matplotlib>=3.7 +# real-token stage only +datasets>=2.14 +transformers>=4.30