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
- Verzamel alle signals waarvoor
severity NOT IN (NULL, 'info')van de laatste 30 dagen voor de tenant. - Severity → numeric weight:
info=0 low=1 medium=4 high=15 critical=40
- Per categorie:
category_score = max(0, 100 - sum(weights) * scaling_factor)metscaling_factor = 1.0. Eén critical alleen drukt -40 (100 → 60), drie criticals clampen op 0. score_total= gewogen gemiddelde over de acht categorieën, mettrust_score_weights.configals gewichten.
Acht categorieën
| Key | Default weight | Bronnen die hier in tellen |
|---|---|---|
cves | 15 | supply_chain (Fase 4.2) |
compliance | 20 | license_check (1.8) |
identity | 15 | secrets_scan, endpoint_posture, identity_audit, auth_geo |
ai_risk | 10 | (ai_traces.pii_hits via aparte path) |
process_dna | 10 | clock_check, container_posture |
cert_dns | 10 | cert_scan(_internal), ct_monitor, dns_check |
backup | 10 | backup_check |
incident_response | 10 | (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/currentGET /api/v1/trust-score/history?window=90d 1h..365dGET /api/v1/trust-score/category/:cat/contributors top 20 per categorieGET /api/v1/trust-score/explain top 10 over allesPOST /api/v1/trust-score/weights admin + TOTP-prodWindow-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 defaultdefault-v1 - Calculator:
hub/api/trust_score/calculator.go— testbaar viaCalculator.CalculateAt(ctx, tenant, now)