Ga naar inhoud

Trust Score

/[locale]/trust-score toont één getal en de breakdown per categorie. Het algoritme verwerkt elke signal_streams rij die in de laatste 30 dagen is binnengekomen.

Algoritme

  1. Verzamel alle signals waarvoor severity NOT IN (NULL, 'info') van de laatste 30 dagen voor de tenant.
  2. Severity → numeric weight:
    info=0 low=1 medium=4 high=15 critical=40
  3. Per categorie: category_score = max(0, 100 - sum(weights) * scaling_factor) met scaling_factor = 1.0. Eén critical alleen drukt -40 (100 → 60), drie criticals clampen op 0.
  4. score_total = gewogen gemiddelde over de acht categorieën, met trust_score_weights.config als gewichten.

Acht categorieën

KeyDefault weightBronnen die hier in tellen
cves15supply_chain (Fase 4.2)
compliance20license_check (1.8)
identity15secrets_scan, endpoint_posture, identity_audit, auth_geo
ai_risk10(ai_traces.pii_hits via aparte path)
process_dna10clock_check, container_posture
cert_dns10cert_scan(_internal), ct_monitor, dns_check
backup10backup_check
incident_response10(alert lifecycle, Fase 5.1)

Per-tenant override via POST /api/v1/trust-score/weights (admin/owner + TOTP in productie).

Reproduceerbaarheid

inputs_hash = sha256(window_start.Unix || window_end.Unix || sorted [signal_id|severity|category]).

Worker schrijft alleen een nieuwe snapshot als inputs_hash afwijkt van de vorige rij — geen lege time-series tussen findings.

Endpoints

GET /api/v1/trust-score/current
GET /api/v1/trust-score/history?window=90d 1h..365d
GET /api/v1/trust-score/category/:cat/contributors top 20 per categorie
GET /api/v1/trust-score/explain top 10 over alles
POST /api/v1/trust-score/weights admin + TOTP-prod

Window-default voor history is 90 dagen; weights-API accepteert exact de 8 keys hierboven, sum > 0.

Achterliggend

  • Tabel: trust_score_snapshots(computed_at, tenant_id, score_total, category_scores JSONB, weights_version, inputs_hash)
  • Weights: trust_score_weights(id PK, tenant_id NULLABLE, weights_version, config JSONB) — NULL tenant_id = global default default-v1
  • Calculator: hub/api/trust_score/calculator.go — testbaar via Calculator.CalculateAt(ctx, tenant, now)