Per-stage invocation and the permutation-variant measurement
This commit is contained in:
@@ -90,6 +90,8 @@ Logarithms in an entropy or an information rate are base two.
|
|||||||
| Semantic similarity | `exp_semantic` | `semantic.csv` |
|
| Semantic similarity | `exp_semantic` | `semantic.csv` |
|
||||||
| Load and channel-estimate sweeps | `exp_users_csi` | `users.csv`, `csi.csv` |
|
| Load and channel-estimate sweeps | `exp_users_csi` | `users.csv`, `csi.csv` |
|
||||||
| Permutation-variant check | `exp_full.stage_M` | `perm_variant.csv` |
|
| Permutation-variant check | `exp_full.stage_M` | `perm_variant.csv` |
|
||||||
|
|
||||||
|
Run one stage on its own with `python code/exp_full.py stage_B`, or the whole chain with no argument.
|
||||||
| Closed-form and symbolic checks | `verify_math` | `verify_math.csv` |
|
| Closed-form and symbolic checks | `verify_math` | `verify_math.csv` |
|
||||||
|
|
||||||
## Security scope
|
## Security scope
|
||||||
|
|||||||
@@ -216,6 +216,18 @@ chk("degeneracy numbers in tex",
|
|||||||
and "overlapping by $0.10$ on average over user pairs" in " ".join(tex.split()),
|
and "overlapping by $0.10$ on average over user pairs" in " ".join(tex.split()),
|
||||||
"searched tex", needs_tex=True)
|
"searched tex", needs_tex=True)
|
||||||
|
|
||||||
|
# --- why the permutation key is granted a shared permutation ---------
|
||||||
|
pv = {r["variant"]: float(r["legit_ser"]) for r in rows("perm_variant.csv")}
|
||||||
|
chk("shared permutation legitimate rate", abs(pv["shared"] - 0.053) < 1e-3,
|
||||||
|
"%.5f" % pv["shared"])
|
||||||
|
chk("per-user permutation legitimate rate",
|
||||||
|
abs(pv["per_user"] - 0.129) < 1e-3, "%.5f" % pv["per_user"])
|
||||||
|
if HAVE_TEX:
|
||||||
|
chk("quoted permutation cost in tex",
|
||||||
|
"from $0.053$ to $0.129$" in " ".join(tex.split()),
|
||||||
|
"searched tex", needs_tex=True)
|
||||||
|
|
||||||
|
|
||||||
# --- key-length sweep floor ------------------------------------------
|
# --- key-length sweep floor ------------------------------------------
|
||||||
# The eavesdropper column is an average over eight substitute-key draws,
|
# The eavesdropper column is an average over eight substitute-key draws,
|
||||||
# so the quoted floor must track the data and not one lucky draw.
|
# so the quoted floor must track the data and not one lucky draw.
|
||||||
|
|||||||
+21
-12
@@ -18,6 +18,7 @@ Experiment scripts write CSV only, never draw. Fixed seeds.
|
|||||||
"""
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import math
|
import math
|
||||||
|
import sys
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
@@ -854,19 +855,27 @@ def stage_L_gap(rows):
|
|||||||
f"over SER {lo:.3f} to {hi:.3f}")
|
f"over SER {lo:.3f} to {hi:.3f}")
|
||||||
|
|
||||||
|
|
||||||
def main():
|
CHAIN = ["stage_A", "stage_B", "stage_C", "stage_D", "stage_E", "stage_F",
|
||||||
|
"stage_I", "stage_J", "stage_L", "stage_M"]
|
||||||
|
|
||||||
|
|
||||||
|
def main(names=None):
|
||||||
|
"""Run the named stages, or the whole chain when none are named.
|
||||||
|
|
||||||
|
The README maps every figure and table to its stage, so a reader
|
||||||
|
reproducing one figure runs that stage alone:
|
||||||
|
python code/exp_full.py stage_B
|
||||||
|
"""
|
||||||
print(f"device={DEVICE}")
|
print(f"device={DEVICE}")
|
||||||
stage_A()
|
todo = names or CHAIN
|
||||||
stage_B()
|
unknown = [n for n in todo if n not in CHAIN]
|
||||||
stage_C()
|
if unknown:
|
||||||
stage_D()
|
raise SystemExit("unknown stage(s): %s\nknown: %s"
|
||||||
stage_E()
|
% (", ".join(unknown), ", ".join(CHAIN)))
|
||||||
stage_F()
|
for n in todo:
|
||||||
stage_I()
|
globals()[n]()
|
||||||
stage_J()
|
print("[done] security CSVs in", DATA)
|
||||||
stage_L()
|
|
||||||
print("[done] full-scale security CSVs in", DATA)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main(sys.argv[1:])
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
variant,legit_ser
|
||||||
|
shared,0.05344
|
||||||
|
per_user,0.129035
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user