Skip to content
docs.
WORKSPACE

Your documentation

Explore the project catalog
Localzet ServerАсинхронный PHP-серверTriangleФреймворк и компонентыMIX IDИдентификация и интеграцииHack APIПубличные API хакатонаACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / ClustercmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный языкinvariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet ServerPSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проектаzorin-client-intelДокументация проекта✓zorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Catalog
Documentation/zorin-client-intel

zorin-client-intel

Zorin Client Intelligence (ZCI) — self-hosted client-intelligence и device-fingerprinting engine, который объединяет сетевые, TLS, HTTP, QUIC и browser-side сигналы в единый evidence profile.

ZCI не сводит клиента к одному «visitor hash». Каждый observation хранит происхождение данных и независимые component fingerprints, а historical client graph оценивает вероятность того, что новый observation относится к ранее наблюдавшемуся client entity.

Возможности финального релиза 1.0

Section titled “Возможности финального релиза 1.0”
  • реальный peer IPv4/IPv6 и socket metadata;
  • trusted-proxy mode с allowlist CIDR;
  • offline CIDR enrichment: Geo/ASN/organization/network type/VPN/proxy/Tor flags;
  • Linux TCP runtime telemetry через TCP_INFO;
  • optional XDP/eBPF SYN sensor: TTL/Hop Limit, MSS, window, scale, SACK, timestamps, ECN, TCP option order;
  • ZTCP fingerprint.

Collector смотрит исходные ClientHello bytes до rustls termination:

  • ClientHello через один или несколько TLS records;
  • record/legacy/supported TLS versions;
  • cipher suites и их порядок;
  • extension IDs и детали;
  • groups, EC point formats, signature algorithms;
  • certificate signature algorithms;
  • key shares;
  • ALPN и SNI;
  • PSK modes, session ticket, early data;
  • padding;
  • certificate compression;
  • GREASE;
  • ECH/ALPS indicators;
  • raw ClientHello SHA-256;
  • JA3;
  • JA4;
  • ZTLS — нормализованный fingerprint;
  • ZTLS-WIRE — order-sensitive fingerprint;
  • negotiated TLS version/ALPN.

Случайные/секретные TLS values не сохраняются как fingerprint material.

После TLS termination используется wire-tap до Hyper parser:

  • H1 request line;
  • точный wire-order заголовков;
  • исходный header casing;
  • duplicate header observations;
  • ZH1-WIRE;
  • HTTP/2 client preface;
  • SETTINGS values и wire-order;
  • SETTINGS ACK;
  • initial WINDOW_UPDATE;
  • последовательность первых frames;
  • ZH2;
  • нормализованный application-level ZHTTP.

Credential-bearing header values redacted до хранения.

Отдельный listener на Quinn + h3:

  • UDP peer/local metadata;
  • address-validation state;
  • original destination connection ID length;
  • negotiated H3 ALPN;
  • runtime RTT;
  • max datagram size;
  • ZQUIC;
  • ZH3 для доступного H3/runtime material;
  • Alt-Svc discovery с HTTPS endpoint.

ZCI не выдумывает QUIC-поля, которых выбранный userspace QUIC API не предоставляет. TCP/TLS listener остаётся источником сырого TLS ClientHello/JA3/JA4.

web/probe.js — dependency-free first-party SDK с режимами essential, security, full:

  • User-Agent + UA Client Hints/high-entropy values;
  • navigator/platform/languages/hardwareConcurrency/deviceMemory/touch;
  • screen, viewport, DPR, orientation;
  • Intl/timezone/formatting;
  • media queries/input/display/privacy preferences;
  • WebGL/WebGL2/WebGPU;
  • Canvas;
  • OfflineAudio;
  • font metric inference;
  • codecs/media capabilities;
  • storage/permissions;
  • Network Information API;
  • Battery API;
  • Performance API;
  • browser/platform capability matrix;
  • automation indicators;
  • speech voices;
  • component fingerprints ZBROWSER, ZGPU, ZCANVAS, ZAUDIO, ZFONTS, ZINTL, ZCAP, ZSCREEN, ZMEDIA, ZAUTO.

Permission-gated/особенно чувствительные probes вынесены в отдельный explicit opt-in: geolocation, Local Font Access, media devices, keyboard layout, WebRTC candidate collection.

Каждый POST /api/v1/observe получает:

  • immutable observation.id;
  • tenant-scoped client_id;
  • resolution new_client, matched_client или ambiguous;
  • weighted similarity probability;
  • confidence по доступному evidence;
  • matching/conflicting component list;
  • consistency/anomaly profile;
  • automation/privacy/network risk scores.

Смена IP или одной нестабильной browser/TLS части не обязана создавать нового client entity.

  • PostgreSQL JSONB + in-memory development mode;
  • tenant-scoped public site keys и secret admin keys;
  • CORS allowlist;
  • observation retention;
  • Prometheus text metrics;
  • self-inspection UI /inspect;
  • health/schema endpoints;
  • Docker Compose;
  • optional eBPF sidecar compose profile;
  • CI для Rust, JS и Linux sensor;
  • smoke test.
Окно терминала
cargo run -p client-intel-collector

Открыть:

http://localhost:8080/inspect

В этом режиме browser/HTTP/IP сигналы работают, но TLS и HTTP/3 отсутствуют.

Окно терминала
./scripts/dev-cert.sh
ZCI_TLS_CERT=certs/cert.pem \
ZCI_TLS_KEY=certs/key.pem \
cargo run -p client-intel-collector

Открыть:

https://localhost:8443/inspect

HTTPS listener использует TCP :8443, native HTTP/3 — UDP :8443. После первого HTTPS-ответа ZCI публикует Alt-Svc для H3 discovery.

Окно терминала
cp .env.example .env
./scripts/dev-cert.sh
docker compose up --build

С Linux SYN sensor:

Окно терминала
ZCI_SENSOR_INTERFACE=eth0 docker compose --profile sensor up --build

XDP sidecar требует Linux, BTF и privileged access для attach.

Окно терминала
./scripts/smoke.sh

Полная release-проверка на машине с Rust toolchain:

Окно терминала
./scripts/release-check.sh

Или для другого endpoint:

Окно терминала
ZCI_BASE_URL=https://example.test ./scripts/smoke.sh

Минимально:

<script src="https://intel.example.com/probe.js"></script>
<script>
const observation = await ZCI.observe({
endpoint: "https://intel.example.com/api/v1/observe",
siteKey: "PUBLIC_SITE_KEY",
mode: "security"
});
console.log(observation.client_id, observation.resolution);
</script>

siteKey предназначен для first-party браузерной интеграции и не считается секретом. Чтение сохранённых observations защищается отдельным admin key.

Explicit sensitive collection запускается только интегратором:

const sensitive = await ZCI.collectSensitive({
geolocation: true,
localFonts: true,
mediaDevices: true,
keyboardLayout: true,
webRtcCandidates: true,
});

Не включайте эти probes без подходящего UX/consent/legal basis.

Основные endpoints:

GET /health
GET /metrics
GET /api/v1/schema
GET /probe.js
GET /inspect
POST /api/v1/observe
GET /api/v1/observations/:id
GET /api/v1/compare/:left/:right
GET /api/v1/clients/:id
  • POST /api/v1/observe использует X-ZCI-Site-Key, если настроены site keys.
  • read/compare/client endpoints используют X-ZCI-Admin-Key, если настроены admin keys.

Подробнее: docs/API.md.

ZCI принципиально различает:

  • observed — сервер увидел сам;
  • claimed — клиент сообщил о себе;
  • inferred — движок сделал вероятностный вывод;
  • enriched — данные пришли из явно подключённой внешней/offline базы.

Это не позволяет эвристике тихо превратиться в «факт».

По умолчанию ZCI:

  • не сохраняет значения Authorization, Proxy-Authorization, Cookie, Set-Cookie, ZCI/API keys;
  • не сохраняет query values: остаются только path + имена/порядок параметров;
  • очищает browser document.referrer от credentials/query/fragment;
  • не доверяет X-Forwarded-For, пока trusted-proxy mode явно не включён;
  • не запускает permission-gated browser probes автоматически;
  • использует finite retention;
  • не называет fingerprint криптографическим доказательством личности.

См. SECURITY.md и docs/PRIVACY.md.

crates/client-intel-core/ parser, fingerprints, models, correlation
services/collector/ HTTP/TLS/QUIC edge + API + storage
sensors/linux-tcp/ optional XDP/eBPF SYN sensor
web/probe.js browser SDK
web/inspect.html self-inspection console
migrations/ PostgreSQL schema
data/ offline enrichment example
docs/ architecture/API/deployment/privacy/catalog
scripts/ development/smoke helpers

Source