Construită pentru podeaua uzinei, demonstrabilă în fața auditorului .
Spectors pornește de la cine are voie să fie un dispozitiv și cât de strâns este el izolat. Conectivitatea, identitatea și izolarea vin primele. Telemetria și tablourile de bord sunt răsplata. Iată cum funcționează cu adevărat fiecare parte.
Conectori nativi pentru protocoalele pe care le rulezi deja.
Modbus/TCP, OPC-UA (polling de citire) și Sparkplug B sunt conectori care trăiesc în afara nucleului, fiecare limitat la autoritatea unui singur dispozitiv. Un conector este un adaptor cu două metode peste un SDK înghețat. Când adaugi un protocol, nu adaugi niciun privilegiu nou la execuție și nicio suprafață de atac nouă în nucleu. MQTT este nativ în broker-ul încorporat.
De ce contează: Uzinele brownfield vorbesc mai multe protocoale în același timp. Faci punte între OPC-UA, Sparkplug și Modbus într-o singură flotă gestionabilă, fără să scoți echipamentele și fără să încredințezi totul unei punți monolitice.
Verificăm izolarea scrierilor către dispozitive (southbound) împotriva a 15+ vectori ostili: injecție, null-byte, nume supradimensionate, confuzie de tipuri. Le blocăm pe toate direct pe fir.
Un singur nod Sparkplug edge, multe identități izolate.
Gateway-ul UNS desface un singur nod Sparkplug edge în N identități Spectors izolate criptografic, fiecare cu propria adresare de comenzi per dispozitiv. Nu există niciun principal de gateway partajat care, odată compromis, să expună întregul edge.
De ce contează: Un Unified Namespace este locul unde uzinele moderne își converg datele. Dar o singură credențială de gateway partajată înseamnă o singură rază de impact. Spectors face raza de impact mai îngustă decât o punte monolitică: un dispozitiv compromis înseamnă o identitate, nu întregul edge.
Adresare de comenzi per dispozitiv, fără principal de gateway partajat. Rază de impact mai îngustă decât o punte monolitică.
Separare între tenant-uri impusă de baza de date și de compilator.
PostgreSQL impune izolarea multi-tenant prin Row-Level Security: ENABLE + FORCE de la prima migrare, pe un rol real non-superuser NOBYPASSRLS. O impune și sistemul de tipuri Rust. Fiecare interogare limitată la un tenant cere un parametru TenantCtx, așa că un filtru de tenant uitat nu compilează. Este structural, nu o clauză WHERE aflată la un bug distanță de o scurgere.
De ce contează: Operatorii reglementați (utilități, energie, infrastructură cu mai multe situri) au nevoie de o separare pe care s-o poată arăta unui auditor, nu doar s-o afirme. Aceasta rezistă și în condiții ostile.
Zero rânduri se scurg între tenant-uri. Îmbinarea a supraviețuit unui RLS-drop și compresiei Timescale în același chunk, plus 9 vectori de evadare Grafana pe un login real, doar-citire.
Autentificarea dispozitivelor în interiorul broker-ului, fără apel pe calea critică.
Dispozitivele se autentifică la MQTT CONNECT în interiorul broker-ului. Broker-ul validează JWT-uri per dispozitiv împotriva unui JWKS local, fără niciun apel către planul de control pe calea critică. Dacă o reîncărcare de chei eșuează, broker-ul își păstrează setul ultim-valid-cunoscut (STRICT). Așa, un hop al planului de control nu devine niciodată o cădere a autentificării dispozitivelor. Rotația cheilor se face la cald.
De ce contează: Când serverul de management clipește, dispozitivele din uzină trebuie să continue să se conecteze. Disponibilitatea autentificării este decuplată prin design de disponibilitatea planului de control.
10,000 de dispozitive concurente la ~5,400 msg/s QoS1 → p99 49.7 ms (de 20x sub țintă). O furtună de reconectări cu 10,000 de clienți a recuperat 10,000 / 10,000. Rotația cheilor la cald nu pierde nicio sesiune stabilită.
Fiecare dispozitiv este un principal de scurtă durată, legat de tenant, revocabil.
Fiecare dispozitiv poartă un JWT propriu, de scurtă durată. Unde ai nevoie, poartă și un certificat mTLS cu CA internă. Amândouă rezolvă spre același principal care nu poate fi falsificat. Tenant-ul este legat prin construcție din identitatea autentificată, niciodată din corpul unei cereri. Cheile sunt asimetrice după tip, așa că cheia privată nu poate structural să se scurgă.
De ce contează: Secretele de gateway partajate și credențialele de lungă durată sunt problema de identitate din OT. Spectors le înlocuiește cu o identitate per dispozitiv pe care o poți revoca rapid, fără fereastră de acces rezidual.
Revocare cu latență mărginită: am măsurat eliminarea unui dispozitiv la 601 µs, mult sub ținta de 30 s. TLS sigur la nivel de memorie prin rustls + aws-lc-rs, zero OpenSSL pe calea de transport.
mTLS cu CA internă peste un transport sigur la nivel de memorie.
Acolo unde un certificat este ancora de încredere potrivită, Spectors emite credențiale mTLS cu CA internă. Ele rezolvă spre același principal de dispozitiv ca și calea JWT: o identitate, două dovezi. Întreaga stivă TLS este rustls peste aws-lc-rs, fără OpenSSL nicăieri pe calea dispozitivului.
De ce contează: Echipele de securitate OT vor identitate criptografică de dispozitiv și un transport al cărui istoric de CVE-uri îl pot urmări. O stivă sigură la nivel de memorie elimină prin design o întreagă clasă de vulnerabilități de transport, în loc să le peticească.
mTLS și JWT rezolvă spre un singur principal care nu poate fi falsificat. Transportul este rustls + aws-lc-rs, zero OpenSSL.
Un motor de reguli în proces peste date fără pierderi.
Regulile de prag, fereastră, absență și geofence rulează în proces și citesc telemetria persistată, fără pierderi. Nu o magistrală live, care pierde date. Corectitudinea vine din evaluarea sursei de adevăr, așa că nu există niciun cluster CEP extern, niciun Siddhi, niciun Spark de ridicat și dădăcit.
De ce contează: Alertarea din uzină trebuie să fie corectă, nu aproximativă. Citim datele persistate, nu un flux eșantionat. Așa, o regulă vede exact ce s-a întâmplat, iar tu ai un sistem distribuit mai puțin de operat.
Prag / fereastră / absență / geofence evaluate în proces peste date persistate fără pierderi. Fără procesor de flux extern.
Stocare de serii temporale și tablouri de bord per tenant, incluse.
Telemetria aterizează în hypertabele TimescaleDB și este expusă prin Grafana per tenant, provizionat automat. Fiecare tenant își vede propriile date și fizic nu poate citi datele altuia. Aceeași garanție de izolare care rezistă în nucleu rezistă și în tablourile de bord.
De ce contează: Operatorii vor tablouri de bord din prima zi, fără să cableze o stivă de observabilitate separată. Și fără ca un consumator de SQL brut să devină o scurgere între tenant-uri.
Grafana per tenant provizionat automat. Un consumator de SQL brut fizic nu poate citi alt tenant (9 vectori de evadare au rezistat).
Unul sau două binare unice, configurare ca și cod.
Spectors rulează ca binare Rust unice: un broker încorporat și un motor de reguli în proces. Fără CEP extern, fără magistrală de mesaje suplimentară, cu imagini distroless non-root. Tipurile de dispozitiv sunt YAML declarativ, așa că un tip nou se integrează scriind, nu printr-un ciclu de cod-și-deploy.
De ce contează: O echipă mică de platformă din uzină nu poate dădăci o stivă distribuită de big-data. Operarea suplă și integrarea rapidă fac diferența dintre o platformă și un proiect de centru de date.
Tip nou de dispozitiv plus conector creat din documentație în sub o zi (fără compilare, fără tabel per tip). Imagine distroless ~20 MB (uid 65532, fără shell). Exercițiu complet de restaurare a bazei de date în ~391 ms, față de un obiectiv de 4 ore.
Capturi reale, nu machete.
Capturi reale ale consolei Spectors pe un tenant demo pre-populat, nu machete.
Vezi-o pe propriile tale protocoale și la propria ta scară.
Adu dimensiunea flotei tale, siturile și amestecul tău de protocoale. Parcurgem platforma în condițiile tale.
Hai să discutăm →