Машинний переклад, не перевірений носієм мови. Еталоном є англійська версія.

Довіра до приймача та морська галузьРедагувати на GitHubДжерело: docs/JAMMERTEST.md

Оцінювання Jammertest: опублікований план як запланована істина

kshana jammertest import читає каталог тестів Jammertest і план передавання та перетворює слоти однієї тестової зони на [[events]] для receiver-trust. kshana jammertest score пропускає журнал приймача через монітори довіри й оцінює його щодо цього розкладу, тест за тестом. Кожен результат — MODELLED: розклад каже, коли тест було заплановано, а не коли був увімкнений передавач.

Консультативне програмне забезпечення, не навігаційне обладнання із затвердженням типу (IEC 61108, IEC 61162): відповідальність за навігацію судна залишається на операторі. Нічого з цього не схвалено Норвезькою адміністрацією державних доріг, Nkom чи організаторами заходу; жодної угоди з ними не заявляється.

Оцінювання одного синтетичного журналу приймача за розкладом із трьох тестів, із реального прогону рушія v0.40.0 (`kshana jammertest score`). Журнал вигаданий: 1800 с NMEA зі спадом C/N0 на 20 дБ упродовж двох інтервалів. Розклад містить три слоти; у середньому слоті глушника в журналі немає. Оцінка позначає 2 із 3 тестів як виявлені (медіанна затримка 0 с) і 1 як пропущений, із 0 прогонів хибної тривоги за 0,25 год чистого часу. Тут нічого не сказано про реальний приймач. Консультативне програмне забезпечення, не навігаційне обладнання із затвердженням типу (IEC 61108, IEC 61162): відповідальність за навігацію судна залишається на операторі.Оцінювання одного синтетичного журналу приймача за розкладом із трьох тестів, із реального прогону рушія v0.40.0 (`kshana jammertest score`). Журнал вигаданий: 1800 с NMEA зі спадом C/N0 на 20 дБ упродовж двох інтервалів. Розклад містить три слоти; у середньому слоті глушника в журналі немає. Оцінка позначає 2 із 3 тестів як виявлені (медіанна затримка 0 с) і 1 як пропущений, із 0 прогонів хибної тривоги за 0,25 год чистого часу. Тут нічого не сказано про реальний приймач. Консультативне програмне забезпечення, не навігаційне обладнання із затвердженням типу (IEC 61108, IEC 61162): відповідальність за навігацію судна залишається на операторі.

План і каталог#

Джерело: репозиторій NPRA/jammertest-plan Норвезької адміністрації державних доріг (https://github.com/NPRA/jammertest-plan), ліцензія MIT (авторське право 2024 Норвезька адміністрація державних доріг; текст ліцензії перевіряється в xval/jammertest-plan/MANIFEST.tsv). Файли завантажують, а не вбудовують до репозиторію:

xval/jammertest-plan/fetch.sh <dest-dir-outside-the-repo>

Він завантажує каталоги та файли плану 2025 за закріпленим комітом 75c0b2ceea10e470c3799d14a8ef18842d8375a7 і відхиляє будь-який файл, чий SHA-256 відрізняється від xval/jammertest-plan/MANIFEST.tsv.

Тест каталогу має ідентифікатор із крапками, type.group.test (наприклад, 1.2.5: тип 1 глушіння, група 2, тест 5). План перелічує для кожної тестової зони та часового слоту, який ідентифікатор заплановано. Типи 1 (глушіння), 2 (спуфінг) і 3 (meaconing) передають; тип 0 (брифінги, пільговий період, бронювання та позачергові слоти) не передає і пропускається. Час у плані — місцевий настінний; --local-offset-h (типово 2, CEST) каже, наскільки він відрізняється від UTC. Файли плану містять поле контактної особи тесту з ім'ям людини: його ніколи не читають, і нічого, отриманого з нього, не записують.

Імпорт#

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> замінює --log/--format, коли журнал не вказує свого початку. Вихід — це TOML [[events]], який додають до сценарію receiver-trust; кожна мітка починається з scheduled truth: і несе рік видання, ідентифікатор каталогу та зону, а заголовок записує SHA-256 кожного вихідного файла. --attack-log <scenario.json> натомість читає істину про події однієї теки набору даних JammerTest 2024 (його attack_log, мітки зсунуто на --time-shift-h, типово -2: вони містять Z, але це місцевий час).

Оцінка#

kshana jammertest score session.toml --catalog testcatalog2025.json --plan plan-....json \
    --location 1 [--json] [--key signer.key --out pack/]

session.toml — це сценарій receiver-trust ([log] format/path, необов'язково [monitors], [compare]). Його власні [[events]] замінюються імпортованим розкладом. Для кожного запланованого тесту:

поле значення
outcome detected (тривога протягом compare.detect_tol_s, типово 10 с, від запланованого початку), late (пізніше, у межах слота), missed (жодної), not-evaluable
latency_s перша тривога мінус запланований початок
time_to_recover_s від кінця слота до початку першого відрізка щонайменше --recover-hold-s (10 с) без тривоги, перед наступним тестом

Тест піддається оцінюванню, лише якщо він починається щонайменше через calibration_s + guard_s після початку журналу; журнал із раннішим тестом позначається baseline_contaminated (базовий рівень міг формуватися під завадами). Хибні тривоги — це епохи тривоги після калібрування поза кожним слотом, розширеним на --guard-s (60 с) до і після (або після точки відновлення), що рахуються як епохи й як прогони, із прогонами на годину чистого часу. З --key і --out прогін записують як підписаний пакет доказів (docs/EVIDENCE-PACKS.md): таблиця оцінок і імпортований розклад лежать усередині config.json, а отже, усередині ланцюжка хешів і підпису. Пакет — це технічний запис, а не юридичний висновок.

Чого результат не говорить#

  • Запланований слот не є записом ефіру. Передавач міг запуститися пізно, зупинитися рано або не працювати зовсім; «пропущений» тест може бути тестом, який не передавав, а затримка відлічується від запланованого початку.
  • «Чиста» епоха — це «поза запланованими слотами», а не «доведено, що без завад».
  • Виявлення моніторами вимірювальної області нічого не говорить про виявлення малопотужного когерентного спуфера.
  • Жоден зовнішній оракул не називає істинного часу в ефірі, тому тут нічого немає VALIDATED.

Прогін набору даних 2024 (попередньо зареєстрований)#

xval/jammertest-score/PREREGISTRATION.md зафіксував вибірку, визначення та пороги до першого оціненого прогону; xval/jammertest-score/RESULTS.md фіксує цей прогін. Результат: зареєстроване правило мінімуму даних не виконано (4 придатні до оцінювання вікна глушіння з 4 із 12 тек .ubx: 5 тек відкинуто за правилом базового рівня, а 3 журнали UBX вказують свій початок лише як тиждень і секунду тижня GPS), тому жоден поріг не можна оцінити. Нічого не послаблювали і не запускали повторно. v2 (PREREGISTRATION-v2.md, закомічено окремо до свого прогону; лише обробка даних, ті самі пороги й правило мінімуму даних) розмістила журнали лише з часом GPS за датою теки, оцінила 12 тек лише з CSV і використала сеанс рухомої платформи для рухомих роверів. Результат (RESULTS-v2.md): збережено 14 із 24 тек, але лише 7 придатних до оцінювання вікон глушіння, тож правило мінімуму даних знову не виконано і жоден поріг не можна оцінити. Результат v1 не змінився. Лише описово: 3 із 7 вікон глушіння дали тривогу протягом 10 с, 4 пізніше, жодного не пропущено; медіанна затримка 18 с; частота хибних тривог на чистому 0,089. Визначальне обмеження тепер — правило базового рівня, яке відкидає 10 тек; подальша реєстрація потребувала б іншого правила для ранніх вікон. Набір даних (JammerTest 2024, Zenodo 15911589, GPL-3.0-or-later) завантажується через xval/oracles/setup.sh і ніколи не вбудовується до репозиторію; тест tests/jammertest_score_2024.rs закріплює записаний прогін, коли KSHANA_JAMMERTEST_DIR вказує на розпакований набір даних.

Набір даних SimulaMet NMEA 2025#

Набір даних SimulaMet Jammertest 2025, отриманий з NMEA (IEEE DataPort, DOI 10.21227/a7v4-xw11), у 0,38 не адаптовано. Його сторінка не вказує ліцензії і стверджує: «This dataset requires an IEEE DataPort Subscription to access» (цей набір даних потребує підписки IEEE DataPort для доступу): умови чітко не дозволяють повторного розповсюдження чи автоматичного завантаження, тому адаптера чи скрипта завантаження не писали. Його використання потребує рішення власника і, в ідеалі, письмової згоди авторів.

Поверхні#

CLI, Rust (kshana::jammertest), Python (jammertest_import, jammertest_score), WebAssembly (ті самі назви), інструменти MCP з тими самими назвами, а також команда /kshana-jammertest і навичка jammertest. Підписаний пакет доступний лише з командного рядка (потрібен ключ підпису). Див. docs/SURFACES.md.