Hodnocení Jammertestu: publikovaný plán jako naplánovaná pravda
kshana jammertest import čte katalog testů Jammertest a plán vysílání a promění sloty jedné testovací oblasti na [[events]] pro důvěru v přijímač. kshana jammertest score pustí záznam přijímače přes monitory důvěry a hodnotí jej proti tomuto plánu, test po testu. Každý výsledek je MODELLED: plán říká, kdy byl test plánován, nikoli kdy byl vysílač zapnut.
Software pouze poradního charakteru, nikoli typově schválené navigační zařízení (IEC 61108, IEC 61162): za navigaci plavidla zůstává odpovědný provozovatel. Nic z toho není podporováno Norskou správou veřejných silnic, Nkom ani pořadateli akce; žádná dohoda s nimi se netvrdí.
Plán a katalog#
Zdroj: repozitář NPRA/jammertest-plan Norské správy veřejných silnic (https://github.com/NPRA/jammertest-plan), licence MIT (copyright 2024 Norská správa veřejných silnic; text licence je zkontrolován v xval/jammertest-plan/MANIFEST.tsv). Soubory se stahují, nikdy nejsou přibaleny:
xval/jammertest-plan/fetch.sh <dest-dir-outside-the-repo>
Stáhne katalogy a soubory plánu 2025 na zafixovaném commitu 75c0b2ceea10e470c3799d14a8ef18842d8375a7 a odmítne každý soubor, jehož SHA-256 se liší od xval/jammertest-plan/MANIFEST.tsv.
Test v katalogu má id s tečkami, type.group.test (například 1.2.5: typ 1 rušení, skupina 2, test 5). Plán uvádí pro každou testovací oblast a časový slot, které id je naplánováno. Typy 1 (rušení), 2 (spoofing) a 3 (meaconing) vysílají; typ 0 (porady, odkladná lhůta, rezervace a ad hoc sloty) nevysílá a přeskakuje se. Časy plánu jsou místní nástěnné; --local-offset-h (výchozí 2, CEST) říká, jak daleko jsou od UTC. Soubory plánu nesou pole kontaktní osoby testu se jménem osoby: nikdy se nečte a nic z něj odvozeného se nezapisuje.
Import#
kshana jammertest import --catalog testcatalog2025.json \
--plan plan-tuesday-2025-09-16.json --plan plan-wednesday-2025-09-17.json \
--location 1 --log receiver.ubx --format ubx --out events.toml
--log-start <UTC time> nahrazuje --log/--format, když záznam svůj začátek neuvádí. Výstupem je TOML [[events]] k připojení ke scénáři důvěry v přijímač; každý popisek začíná scheduled truth: a nese rok vydání, id katalogu a oblast a záhlaví zaznamenává SHA-256 každého zdrojového souboru. --attack-log <scenario.json> místo toho čte pravdu o událostech jedné složky datové sady JammerTest 2024 (její attack_log, razítka posunutá o --time-shift-h, výchozí -2: uvádějí Z, ale jde o místní čas).
Hodnocení#
kshana jammertest score session.toml --catalog testcatalog2025.json --plan plan-....json \
--location 1 [--json] [--key signer.key --out pack/]
session.toml je scénář důvěry v přijímač ([log] format/path, volitelně [monitors], [compare]). Jeho vlastní [[events]] se nahradí importovaným plánem. Pro každý naplánovaný test:
| pole | význam |
|---|---|
outcome |
detected (poplach do compare.detect_tol_s, výchozí 10 s, od plánovaného začátku), late (později, uvnitř slotu), missed (žádný), not-evaluable |
latency_s |
první poplach minus plánovaný začátek |
time_to_recover_s |
konec slotu do začátku prvního úseku o délce alespoň --recover-hold-s (10 s) bez poplachu, před dalším testem |
Test lze hodnotit, jen když začíná alespoň calibration_s + guard_s po začátku záznamu; záznam s dřívějším testem se označí baseline_contaminated (základ mohl být vytvořen za interference). Falešné poplachy jsou poplašné epochy po kalibraci mimo každý slot prodloužený o --guard-s (60 s) před i po (nebo po bodu zotavení), počítané jako epochy i jako běhy, s běhy za hodinu čistého času. S --key a --out se běh zapíše jako podepsaný balíček důkazů (docs/EVIDENCE-PACKS.md): výsledkový list a importovaný plán jsou uvnitř config.json, tedy uvnitř hashového řetězce a podpisu. Balíček je technický záznam, nikoli právní názor.
Co výsledek neříká#
- Plánovaný slot není záznam o vysílání. Vysílač mohl začít pozdě, skončit dříve nebo vůbec neběžet; „nezachycený“ test může být test, který nevysílal, a latence se počítá od plánovaného začátku.
- „Čistá“ epocha je „mimo plánované sloty“, nikoli „prokazatelně bez interference“.
- Detekce monitory v oblasti měření neříká nic o detekci spoofera s nízkým výkonem a koherentního.
- Žádné vnější orákulum neuvádí skutečné časy vysílání, takže nic z toho není VALIDATED.
Běh na datové sadě 2024 (předregistrovaný)#
xval/jammertest-score/PREREGISTRATION.md stanovila populaci, definice a prahy před prvním hodnoceným během; xval/jammertest-score/RESULTS.md tento běh zaznamenává. Výsledek: registrované pravidlo minima dat selhalo (4 hodnotitelná okna rušení ze 4 z 12 složek .ubx: 5 složek vyřadilo pravidlo základu a 3 záznamy UBX uvádějí svůj začátek jen jako týden GPS a čas v týdnu), takže žádný práh nelze posoudit. Nic nebylo uvolněno ani znovu spuštěno. v2 (PREREGISTRATION-v2.md, zapsána samostatně před svým během; jen zacházení s daty, stejné prahy a pravidlo minima dat) zařadila záznamy jen s časem GPS podle data složky, ohodnotila 12 složek jen s CSV a pro pohyblivé roverové platformy použila relaci s pohyblivou platformou. Výsledek (RESULTS-v2.md): 14 z 24 složek zachováno, ale jen 7 hodnotitelných oken rušení, takže pravidlo minima dat znovu selhalo a žádný práh nelze posoudit. Výsledek v1 je nezměněn. Pouze popisně: 3 ze 7 oken rušení vyvolala poplach do 10 s, 4 později, žádné nezachycené; medián latence 18 s; míra poplachů v čistém čase 0,089. Závazným omezením je nyní pravidlo základu, které odstraňuje 10 složek; další registrace by pro rané okno potřebovala jiné pravidlo. Datová sada (JammerTest 2024, Zenodo 15911589, GPL-3.0-or-later) se stahuje pomocí xval/oracles/setup.sh a nikdy není přibalena; test tests/jammertest_score_2024.rs zafixuje zaznamenaný běh, když KSHANA_JAMMERTEST_DIR ukazuje na rozbalenou datovou sadu.
Datová sada SimulaMet NMEA 2025#
Datová sada SimulaMet Jammertest 2025 odvozená z NMEA (IEEE DataPort, DOI 10.21227/a7v4-xw11) není ve verzi 0,38 převzata. Její stránka neuvádí žádnou licenci a říká „This dataset requires an IEEE DataPort Subscription to access“: podmínky jasně nepovolují šíření ani automatizované stažení, proto nebyl napsán žádný adaptér ani skript pro stažení. Její použití vyžaduje rozhodnutí vlastníka a ideálně písemný souhlas autorů.
Povrchy#
CLI, Rust (kshana::jammertest), Python (jammertest_import, jammertest_score), WebAssembly (stejné názvy), nástroje MCP stejných názvů a příkaz /kshana-jammertest a skill jammertest. Podepsaný balíček je jen z příkazového řádku (potřebuje podpisový klíč). Viz docs/SURFACES.md.