Ga naar inhoud

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:

Terminal window
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

KeyTypeBeschrijving
schema_versionintVersie van het pack-formaat (start = 1)
pack_idstringNumeriek ID
tenant_iduuidWie de eigenaar is
app_idint/nullEén app of alle apps van de tenant
period_start/_endRFC3339Het venster
trace_countintAantal traces in het pack
span_countintAantal spans
blob_countintAantal unieke content-blobs
traces_sha256hexSHA256 van traces.jsonl bytes
spans_sha256hexSHA256 van spans.jsonl bytes
blob_index[]array{hash, sha256} per blob — recompute & check
signing_public_hexhexEd25519 public key — kruisverifieer met monsys
created_atRFC3339Tijdstip van pack-generatie

Offline verifiëren

Terminal window
pip install cryptography
python3 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 : 7
tenant_id : 77198636-a5fe-484e-93fe-98b11a55ca84
period : 2026-04-01T00:00:00Z → 2026-04-30T23:59:59Z
traces : 14233
spans : 37501
blobs : 12044
signing key : d2f60e21e0d496252b92bb308310e1a1dd1d5010f8fcaabbe169bdae1e2b7173
✓ signature valid
✓ traces.jsonl hash matches (3abb0918cda7…)
✓ spans.jsonl hash matches (b517235df141…)
✓ all 12044 content blobs hash-matched
RESULT: OK

Exit code:

  • 0 — alles klopt
  • 1 — 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:

  1. Kruisverifieer met monsys.ai/security/keys (de publieke pagina waar we onze Ed25519 fingerprints publiceren).
  2. 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).