Evidence packs
Een evidence pack is een draagbare, offline-verifieerbare snapshot van wat je AI-systeem deed in een bepaalde periode. Bedoeld voor auditors, DPO’s, juristen en toezichthouders.
Wanneer aanmaken
- Maandelijks als routine — voor je DPA-archief.
- Bij een incident — periode rond een verdachte gebeurtenis.
- Voor een regulator request — exact het venster dat ze vragen.
- Voor due diligence — een potentiële klant of investeerder vraagt om bewijs.
Aanmaken
Via dashboard: AI → Evidence packs → Nieuwe pack.
Via API:
curl -X POST https://api.monsys.ai/api/v1/ai/evidence-packs \ -b cookies.txt \ -H "Content-Type: application/json" \ -d '{ "period_start": "2026-04-01T00:00:00Z", "period_end": "2026-04-30T23:59:59Z", "app_id": 42, // optioneel, anders alle apps van de tenant "include_blobs": true // raw redacted content meebundelen }'Respons:
{ "pack_id": "7", "trace_count": 14233, "span_count": 37501, "blob_count": 12044, "total_cost_micro_eur": 89412300, "manifest_sha256": "3abb09…", "signing_public_hex": "d2f60e21…", "download_url": "/api/v1/ai/evidence-packs/7/download", "verify_with": "Use tools/evidence-pack-verify.py — manifest is Ed25519-signed by the hub."}Bundle-layout
pack-7.tar.gz├── manifest.json├── manifest.sig ← Ed25519 signature over manifest.json bytes (base64)├── traces.jsonl ← één regel per trace├── spans.jsonl ← één regel per span└── blobs/ ├── 1bd2ea92….txt ← geredacteerde content per hash ├── 8a48cdca….txt └── ...manifest.json keys
| Key | Type | Beschrijving |
|---|---|---|
schema_version | int | Versie van het pack-formaat (start = 1) |
pack_id | string | Numeriek ID |
tenant_id | uuid | Wie de eigenaar is |
app_id | int/null | Eén app of alle apps van de tenant |
period_start/_end | RFC3339 | Het venster |
trace_count | int | Aantal traces in het pack |
span_count | int | Aantal spans |
blob_count | int | Aantal unieke content-blobs |
traces_sha256 | hex | SHA256 van traces.jsonl bytes |
spans_sha256 | hex | SHA256 van spans.jsonl bytes |
blob_index[] | array | {hash, sha256} per blob — recompute & check |
signing_public_hex | hex | Ed25519 public key — kruisverifieer met monsys |
created_at | RFC3339 | Tijdstip van pack-generatie |
Offline verifiëren
pip install cryptographypython3 evidence-pack-verify.py pack-7.tar.gz \ --expected-pubkey <de pinned fingerprint van monsys.ai/security/keys># Stille modus, alleen exit-code:python3 evidence-pack-verify.py --quiet pack-7.tar.gz --expected-pubkey …Voorbeeld output:
pack_id : 7tenant_id : 77198636-a5fe-484e-93fe-98b11a55ca84period : 2026-04-01T00:00:00Z → 2026-04-30T23:59:59Ztraces : 14233spans : 37501blobs : 12044signing key : d2f60e21e0d496252b92bb308310e1a1dd1d5010f8fcaabbe169bdae1e2b7173✓ signature valid✓ traces.jsonl hash matches (3abb0918cda7…)✓ spans.jsonl hash matches (b517235df141…)✓ all 12044 content blobs hash-matched
RESULT: OKExit code:
0— alles klopt1— minstens één hash of de signature klopt niet — pack is gewijzigd
Wat doet de auditor met de public key?
In het manifest staat een signing_public_hex. Maar wie zegt dat dat
de juiste key is?
Twee mogelijkheden:
- Kruisverifieer met monsys.ai/security/keys (de publieke pagina waar we onze Ed25519 fingerprints publiceren).
- Vraag een gedrukt certificaat bij onboarding — wij sturen je een PDF met de fingerprint die je in je archief bewaart.
Zo kan de auditor onafhankelijk vaststellen dat de signature niet is gemaakt door iemand met een ge-spoofde key.
Garanties
- Tamper-evident: één byte wijziging in een blob, en de verifier slaat alarm.
- Periode-bond: het manifest legt vast voor welk venster het pack geldt — je kan niet achteraf “extra” data toevoegen zonder re-signing.
- Reproduceerbaar: dezelfde periode + dezelfde data → exact dezelfde manifest_sha256 (deterministische serialisatie).
- Geen monsys-account nodig om te verifiëren.
Retention
We bewaren evidence packs op disk voor minimaal 12 maanden. Voor langere retention exporteer je het pack zelf naar je eigen object store; monsys.ai garandeert geen archief op lange termijn (NIS2 verplicht je sowieso om de evidence zelf te bewaren).