Konekäännös, jota äidinkielinen puhuja ei ole tarkistanut. Viitteenä on englanninkielinen versio.

Vastaanottimen luottamus ja meriliikenneMuokkaa GitHubissaLähde: docs/TRUST-TELEMETRY.md

GNSS-luottamus tietoturvatelemetriana

kshana trust-telemetry muuttaa epookkikohtaisen GNSS-luottamusvirran (pistemäärä 0-100, luokka, syyt) signaaleiksi, joita operatiivinen tai tietoturvakeskus jo vastaanottaa: Prometheus-mittareiksi, syslog-tapahtumiksi CEF- tai LEEF-muodossa SIEM:lle ja valinnaisesti OpenTelemetryksi. Se lukee virran; se ei koskaan muuta luottamusarviota eikä lähetä mitään muuta kuin telemetriaa.

Yksi luottamustulos kolmessa vientimuodossa, moottorin v0.40.0 todellisista ajoista (`kshana trust-telemetry`) aineistolla examples/maritime-trust: Prometheus-tekstiesitys (viimeisin luottamuspistemäärä on 5,9 ja epäluotettava kaista on asetettu) sekä viimeiset CEF- ja LEEF-viestit. Komento ei julkaise mitään, ellei sille anneta kohdetta, ei pidä hallussaan tunnistetietoja eikä lähetä radiosignaalia. Ohjeellinen ohjelmisto, ei tyyppihyväksytty navigointilaite (IEC 61108, IEC 61162): käyttäjä vastaa edelleen aluksen navigoinnista.Yksi luottamustulos kolmessa vientimuodossa, moottorin v0.40.0 todellisista ajoista (`kshana trust-telemetry`) aineistolla examples/maritime-trust: Prometheus-tekstiesitys (viimeisin luottamuspistemäärä on 5,9 ja epäluotettava kaista on asetettu) sekä viimeiset CEF- ja LEEF-viestit. Komento ei julkaise mitään, ellei sille anneta kohdetta, ei pidä hallussaan tunnistetietoja eikä lähetä radiosignaalia. Ohjeellinen ohjelmisto, ei tyyppihyväksytty navigointilaite (IEC 61108, IEC 61162): käyttäjä vastaa edelleen aluksen navigoinnista.

Aja se#

# live stream on stdin -> /metrics on localhost:9464
kshana receiver-trust live <args> | kshana trust-telemetry

# replay a batch result (the score is the epoch's own for a vessel platform, absent otherwise)
kshana trust-telemetry --result session.result.json --print-metrics
kshana trust-telemetry --result session.result.json --print-syslog --format leef

# SIEM over UDP, one event per band change
kshana trust-telemetry --input stream.jsonl --syslog-udp siem.example:514 --format cef --host ops-gw1

Syöte on live-JSON-rivien skeema v1.1, joka on dokumentoitu tiedostossa docs/MARITIME-TRUST.md. Luetaan: t_s; state (calibrating|nominal|degraded|untrusted, luokka); score (0-100 tai null); time (epookin aika sellaisena kuin se on ilmoitettu); gate (off|passed|withheld); position (lat_deg, lon_deg, height_m tai null); syyt ovat monitorit kentässä deductions, sitten mahdolliset muut kentässä alarms; skeemasta 1,3 alkaen geometry (status, hdop, pdop, n_used) ja kunkin vähennyksen class. Muut avaimet jätetään huomiotta, koska skeema kasvaa vain lisättävillä avaimilla. Rivi, jota ei voi jäsentää, lasketaan kohteessa kshana_trust_input_errors_total ja ohitetaan; arvot alueen 0-100 ulkopuolella hylätään, ei rajata, jotta muodon muutos huomataan. Ainoa koodi, joka tuntee tämän muodon, on src/telemetry/sample.rs.

/metrics tarjotaan ilman todennusta ja oletuksena osoitteessa 127.0.0.1:9464. Sitominen muualle tulostaa varoituksen; aseta se oman pääsynhallintasi taakse. Päätepiste käsittelee yhtä yhteyttä kerrallaan 2 s:n lukurajalla, joten joutilas asiakas voi viivästyttää kaavintaa enintään sen verran; se on tarkoitettu yhdelle kaapijalle, ei avoimeen verkkoon.

Home Assistant ja NTP-laitteet (MQTT)#

--print-mqtt tulostaa ja --mqtt-tcp <host:port> julkaisee JSON-tila-asiakirjan ja Home Assistant MQTT -löytöviestit. Löytö (säilytetty, hakemiston homeassistant/... alla) tekee kolme entiteettiä: luottamuspistemäärä, luottamusluokka (syyt attribuutteina) ja ongelma-anturi untrusted. Tila-asiakirja menee osoitteeseen <prefix>/state (oletus kshana/trust/state, säilytetty): state, score (null, kun ei ole), untrusted, t_s, time, reasons, gate ja ohjeellinen lausuma; paikkaa ei koskaan sisällytetä. Asetukset: --mqtt-prefix, --mqtt-node, --mqtt-discovery.

Julkaisija puhuu MQTT 3.1.1 -protokollaa QoS 0 -tasolla ja lukee vain välittäjän CONNACKin. Sillä ei ole tunnistetietoja eikä TLS:ää, joten käytä välittäjää paikallisessa verkossa (tai paikallista releä, joka lisää ne). Toimitus ajetaan omassa säikeessään 1024 jonon takana: kuollut välittäjä pudottaa viestejä, jotka lasketaan ja raportoidaan lopussa, eikä se koskaan jumita virtaa. NTP-laite tai mikä tahansa muu kuluttaja, joka haluaa pelkkää JSONia, voi lukea saman tilarivin. Mitään ei kirjoiteta vastaanottimelle tai kellolle. Python, WebAssembly ja MCP ottavat format = "mqtt" ja palauttavat samat rivit topic<TAB>payload (mitään ei julkaista siellä).

Pythonista, WebAssemblystä ja MCP:stä#

Enkooderit ovat saatavilla myös teksti sisään, teksti ulos -kutsuina ilman prosessia, pistoketta tai kelloa: Python kshana.trust_telemetry(input, format, host="", input_kind="jsonl", expose_position=False, syslog_all=False, unix_nano=0), WebAssembly-vienti trust_telemetry(input, format, host, input_kind, options_json) ja MCP-työkalu trust_telemetry (lisäosan komento /kshana-trust-telemetry). format on prometheus, cef, leef tai otlp; input_kind on jsonl (virta) tai result (eräntulos). Ne palauttavat saman tekstin, jonka komentorivi tulostaa (--print-metrics, --print-syslog), samoilla rajoilla: syslog-rivit eivät sisällä aikaleimaa, host on enintään 255 tulostettavaa ASCII-merkkiä ilman välilyöntejä (muuten evätään, sekä täällä että komentorivillä), ja käyttöpinnan rajaa suurempi vastaus (4 MiB MCP:ssä) evätään, koska CEF ja LEEF asetuksella syslog_all kirjoittavat yhden tapahtuman epookkia kohti. Mitään ei lähetetä, tarjota tai kirjoiteta; käynnissä olevat viejät pysyvät prosessina komentorivillä.

Toimitus ei koskaan jumita arviointia#

Syslog- ja OpenTelemetry-toimitus ajetaan omissa säikeissään. Syöttösilmukka vain ulottaa niille viestin tai tilannekuvan eikä koskaan odota, joten kuollut, hidas tai lukematon kerääjä ei voi aiheuttaa vastapainetta live-virralle eikä jäädyttää kohdetta /metrics:

  • jokaisella yhteydenotolla ja kirjoituksella on 2 s:n raja; epäonnistunut yhteys pudotetaan ja avataan uudelleen laiskasti eksponentiaalisella viiveellä 1 s:sta enintään 60 s:iin;
  • viesti, jota ei voi toimittaa (kerääjä alhaalla, kirjoitus aikakatkaistu, 1024 jono täynnä), pudotetaan ja lasketaan kohteessa kshana_trust_syslog_send_failures_total; hälytä sen nopeudesta;
  • OpenTelemetry-viejälle annetaan kopio rekisteristä, joten verkon I/O:n aikana ei pidetä lukkoa; jos vienti on yhä käynnissä, uusi tilannekuva ohitetaan (seuraava sisältää samat kumulatiiviset summat).

Syötteen lopussa lähetyssäikeille annetaan niiden jäljellä olevat aikarajat valmistua.

Prometheus-mittarit#

Mittari Tyyppi Tunnukset Merkitys
kshana_build_info gauge version vakio 1
kshana_trust_score gauge viimeisin pistemäärä 0-100; puuttuu, jos lähde ei anna sitä
kshana_trust_band gauge band 1 nykyiselle luokalle, 0 muille
kshana_trust_gate gauge gate off, passed, withheld, unknown: 1 nykyiselle tilalle, 0 muille; puuttuu ilman porttia
kshana_trust_position_latitude_degrees, ..._longitude_degrees, ..._height_meters gauge vastaanottimen ilmoittama paikka; vain asetuksella --expose-position (päätepiste on todentamaton ja paikka voi tunnistaa sijainnin tai aluksen)
kshana_trust_reason_active gauge reason 1, jos läsnä viimeisimmällä epookilla
kshana_trust_epochs_total laskuri band vastaanotetut epookit
kshana_trust_reason_epochs_total laskuri reason epookit, joissa syy oli läsnä
kshana_trust_input_errors_total laskuri jäsentämättömät syöterivit
kshana_trust_reason_overflow_total laskuri syyesiintymät, jotka on laskettu kohteeseen reason="other" (katso alla)
kshana_trust_syslog_send_failures_total laskuri toimittamatta jääneet syslog-tapahtumat
kshana_trust_epoch_offset_seconds gauge viimeisimmän epookin siirtymä virran alusta
kshana_trust_last_sample_timestamp_seconds gauge seinäkellon vastaanottoaika; hälytä sen iästä
kshana_trust_geometry gauge status satelliittigeometria viimeisimmällä epookilla, good, degraded, unknown: 1 nykyiselle (skeeman 1,3 syötteet)
kshana_trust_geometry_degraded gauge 1 degraded, 0 good; puuttuu, kun geometria on tuntematon (1.3)
kshana_trust_geometry_signal_loss gauge 1, kun näkyvissä olevia satelliitteja ei seurata vaikka niiden geometria on hyvä (signaali katosi, ei taivas; geometry_degraded näyttää yhä 1), muuten 0; puuttuu, kun geometria on tuntematon tai syöte ei kerro (1.3)
kshana_trust_geometry_hdop, ..._pdop, ..._used_satellites gauge HDOP, PDOP ja käytetyt satelliitit viimeisimmällä epookilla; kukin puuttuu, kun ei ole (1.3)
kshana_trust_geometry_epochs_total laskuri status epookit geometrian tilan mukaan (1.3)
kshana_trust_geometry_label gauge label geometriatunniste viimeisimmällä epookilla, good, fair, poor, unknown: 1 nykyiselle; ei koskaan pisteytetä (pistemäärä vähentää vain arvosta poor); syötteistä, jotka kantavat tunnisteen (0,36)
kshana_trust_geometry_vdop gauge VDOP viimeisimmällä epookilla; puuttuu, kun ei ole (0.36)

Geometriatunniste on pääotsikko. Piirrä kuvaaja ja hälytä kohteesta kshana_trust_geometry_label (OTLP kshana.geometry.label, CEF kolmas cs6-kenttä, LEEF geoLabel): poor on ainoa tunniste, josta pistemäärä vähentää. Geometrian tila on kuvaileva: degraded sisältää informatiivisen tapauksen sky-blocked, joka voi tulla hyvän tai kohtalaisen DOP:n kanssa, joten älä hälytä pelkästä kohteesta kshana_trust_geometry_degraded.

Skeeman 1,3 syötteistä kshana_trust_reason_active kantaa myös class-tunnisteen (geometry, environment, inconsistency) jokaisella syyllä, joka tuli sellaisen kanssa: vähennyksen luokka viimeisimmällä epookilla. Geometriasarjat tulevat kaikkien muiden jälkeen ja vasta kun syöteepookki kantaa kohdetta geometry (live-skeema 1,3, tulos moottorista 0,36 tai uudemmasta), joten 0,35-virta tai -tulos renderöityy tavu tavulta kuten ennen. Tunnisteiden arvot ovat kiinteitä joukkoja (tuntematon tila luetaan unknown; tuntematon luokka pudotetaan). Hälytä kohteesta kshana_trust_reason_active{class="inconsistency"} pelkän luokan sijaan, jotta huono taivas ei hälytä hyökkäyksenä; luokka geometry on lausuma taivaasta, ei havainto siitä, ettei hyökkäystä tapahtunut (katso docs/RECEIVER-TRUST.md).

Tunniste class on osa sarjan identiteettiä: kun syyn luokka muuttuu epookkien välillä (loss-of-lock luokasta environment luokkaan geometry, kun menetetyt satelliitit olivat matalalla, tai geometry luokkaan inconsistency, kun ilmoitettu HDOP on ristiriidassa ilmoitetun taivaan kanssa), vanhaa sarjaa ei enää viedä ja uusi alkaa. Kysele kentällä reason ja max by (reason), kun luokalla ei ole väliä, ja odota tällaisen vaihdon näyttävän yhden sarjan päättymiseltä ja toisen alkamiselta. Skeeman 1,3 sarjat, tunniste class ja CEF/LEEF-geometriakentät tarkistetaan moottorin omilla testeillä ja CEF-oraakkeleilla (pycef, Logstash); ulkoisilla Prometheus- ja OTLP-oraakkeleilla ei vielä ole 1,3-virtaa.

Syiden nimet typistetään 128 merkkiin, ja enintään 64 erillistä syytä saa oman sarjansa; myöhemmät lasketaan kohteessa reason="other" ja kohteessa kshana_trust_reason_overflow_total, joten vihamielinen tai viallinen syöte ei voi luoda rajatonta tunnisteiden kardinaliteettia.

band on yksi arvoista calibrating, nominal, degraded, untrusted, unknown. Syiden nimet ovat virran monitorien nimiä (kinematic, heading-course, ...; eräntuloksessa cn0-drop, agc, raim).

Esimerkkikojelauta on tiedostossa deploy/grafana/kshana-gnss-trust.json (tuo se ja valitse Prometheus-tietolähteesi).

Syslog: CEF ja LEEF#

Tapahtumat lähetetään RFC 5424 -kehyksessä (facility local0, sovellus kshana, viestin tunniste GNSSTRUST) UDP:n yli (yksi datagrammi kutakin; IPv4 tai IPv6) tai TCP:n yli, oletuksena rivinvaihtoon päättyen tai asetuksella --syslog-octet-counting kehystettynä <length> <message> kuten RFC 6587:ssä. Oletuksena yksi tapahtuma lähetetään luokan muutosta kohti; --syslog-all lähettää yhden epookkia kohti. Valmistaja kirjoitetaan Ashforde OU (ASCII), jotta mikään SIEM ei tulkitse sitä väärin.

Käsite Syslog-vakavuus CEF-vakavuus LEEF sev
calibrating 6 info 0 1
nominal 6 info 1 1
heikentynyt 4 varoitus 5 5
untrusted 2 kriittinen 9 9
unknown 5 huomautus 3 3

Kenttien vastaavuus (tapahtuman tunniste on gnss-trust.<band>):

Merkitys CEF LEEF 2,0 (erotin ^)
luokka cat=gnss-trust cat
lähettävä isäntä dvchost devHost
band (luottamusluokka) cs1 (tunniste band) band
syyt, pilkuilla erotettuina cs2 (reasons) reasons
edellinen luokka cs3 (previousBand) previousBand
pistemäärä cfp1 (trustScore), jätetään pois, jos ei ole trustScore
epookin siirtymä, s cfp2 (epochOffsetSeconds) epochOffsetSeconds
lokin aikatunniste cs4 (logTime) logTime
portin tila cs5 (gate) gate
geometrian tila, sitten ; ja epookin vähennysten luokat pilkuilla erotettuina (esimerkiksi degraded;environment,geometry) (1,3 -syötteet); syötteistä, jotka kantavat tunnisteen (0,36), kolmas kenttä, ; ja tunniste, jolloin luokkakenttä on aina läsnä (esimerkiksi degraded;;poor, good;;fair) cs6 (geometry) geoStatus (vain tila), geoClass (luokat) ja geoLabel (tunniste)
HDOP (1.3) cfp3 (geometryHdop) geoHdop
PDOP (1.3) cfp4 (geometryPdop) geoPdop (0,36, tunnisteen kanssa)
VDOP (0,36, tunnisteen kanssa) ei kuljeteta: neljä liukuluku-mukautettua kenttää on otettu geoVdop
käytetyt satelliitit (0,36, tunnisteen kanssa) cn1 (geometryUsedSatellites), kokonaisluku geoUsed
signaalin menetys: näkyvissä olevia satelliitteja ei seurata, vaikka niiden geometria on hyvä (1.3) ei kuljeteta kenttänä (mikään CEF-sanakirjan avain ei ole vapaa sille): tila on degraded ja geometriavähennyksen luokka environment kentässä cs6 geoSignalLoss=1, vain kun se pätee

CEF:ssä geometria käyttää vain sanakirjan mukautettuja kenttiä (ei keksittyjä avaimia); tunniste kulkee kentässä cs6 eikä kentässä flexString1, koska Logstashin CEF-koodekki ei kartoita kenttiä flexString. Geometriatapahtumat 1,3, tunnistetapaukset mukaan lukien, kuuluvat CEF-riviin, jonka taso on VALIDATED: kumpikin oraakkelijäsentäjä lukee ne takaisin sellaisina kuin ne on kirjoitettu (tests/cef_reference.rs, muutokset 4 ja 5, kukin rekisteröitynä ennen kuin kumpaakaan jäsentäjää ajettiin sen tapauksilla). Tunniste-, VDOP- ja satelliittimääräkentät liitetään kaikkien aiempien kenttien ja sarjojen jälkeen, ja vain syötteille, jotka kantavat tunnisteen, joten syöte ilman sellaista renderöityy täsmälleen kuten ennen.

Tyhjät kentät jätetään pois (ei kohdetta cs2= ilman syitä). Isäntänimi typistetään 255 merkkiin. CEF-otsikon arvoissa kenoviivat \ ja | escapataan; laajennusarvoissa \, = ja rivinvaihdot escapataan. LEEF-arvoissa ^ ja rivinvaihdot korvataan välilyönneillä.

OpenTelemetry (oletuksena pois päältä)#

Rakenna asetuksella --features otlp ja anna --otlp http://host:4318/v1/metrics. Viejä lähettää OTLP/HTTP JSONia (kshana.trust.score, kshana.trust.band, kshana.trust.epochs, kshana.trust.reason.epochs, ja skeeman 1,3 syötteille kshana.geometry.status, kshana.geometry.degraded, kshana.geometry.signal_loss, kshana.geometry.hdop, kshana.geometry.pdop, kshana.geometry.used_satellites ja syötteistä, jotka kantavat tunnisteen (0,36), kshana.geometry.label (attribuutti label) ja kshana.geometry.vdop; kumulatiiviset summat kantavat kohdetta startTimeUnixNano) joka --otlp-every epookki (oletus 10) ja syötteen lopussa. Se ei lisää riippuvuutta eikä sisällä TLS:ää: lähetä kerääjälle samalla isännällä tai luotetussa segmentissä, joka välittää eteenpäin TLS:n yli. Päätepisteet https:// evätään.