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.

  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.
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).

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.

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.

  • 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)