VidimusSITE
Plan een gesprek

VIDIMUS/VERIFICATIE

Narekenen zonder Vidimus.

Voor de gerechtsdeskundige, de auditor en de IT-dienst van de tegenpartij. Alles hieronder werkt zonder account en zonder onze software, en op één stap na offline: voor Bitcoin zoekt u één blok op in een publieke blockexplorer. U hebt alleen de bewijsbundel nodig, en die krijgt u van de klant, niet van ons. Liever met officiële software van de Europese Commissie?

Publiek staat alleen een wiskundig bewijs dat uw register niet herschreven is. Wie u bent, wat u vastlegt en met wie, blijft binnen uw organisatie en wie u zelf een link geeft.

VOOR DE AUDITOR

De auditor hoeft ons niet te geloven

Bewijs komt uit systemen, Excels, pdf's en mails. Maar wanneer bestond het, en is het sindsdien gewijzigd? Met Vidimus opent de auditor de verificatie en rekent het bewijs zelf na.

Met officiële software, zonder ons.

00 · EU · BSI

Voor een rechtbank of een tegenpartij die liever geen software van Vidimus gebruikt. Elke bewijsbundel bevat een Evidence Record (bewijs.ers, RFC 4998): de internationale standaard voor "dit bestond op tijdstip T en is sindsdien niet gewijzigd". Dat bestand controleert u met de validatietool van de Europese Commissie of met die van het Duitse BSI.

  1. Vraag de bewijsbundel aan de partij die de registratie deed, en pak de zip uit. U hebt twee bestanden nodig: bewijs.ers en vingerafdruk-invoer.json (de exacte inhoud die gehasht werd, met de SHA-256 van elke bijlage erin).
  2. Open de validatiesoftware van de Europese Commissie (DSS). Voor een zaak: de standalone versie op uw eigen computer. Om snel te proberen: de online demo (volgens de Commissie bedoeld om te testen).
  3. Bij Signed file: kies bewijs.ers. Bij Original file(s): kies vingerafdruk-invoer.json. Is de inhoud gevoelig, kies dan dat alleen de digest (SHA-256) verstuurd wordt: dan verlaat alleen de vingerafdruk uw computer.
  4. Validation level: Validation with archival data (staat standaard zo). Laat het beleid op standaard en klik op valideren.
  5. Lees het rapport. Bij het Evidence Record staat Indication: PASSED en een POE time: het tijdstip waarop het bestaan bewezen is. In het detailrapport staat bij de tijdstempel Time-stamp Qualification: QTSA, een gekwalificeerde tijdstempeldienst met status "granted" op de EU-vertrouwenslijst.
  6. Wie is de onderneming? Vraag het met eID getekende mandaat (pdf) aan de onderneming. Leg het in dezelfde EU-software: de handtekening van de beheerder is gekwalificeerd. De SHA-256 van het pdf staat in de bundel (organisatie.mandaat_eid.pdf_sha256) en is zelf verankerd. Het pdf zit niet in de bundel, omdat het eID-certificaat het rijksregisternummer van de beheerder bevat.
  7. Bijlagen erbij? sha256sum attachments/<naam> geeft een waarde die in vingerafdruk-invoer.json staat. Zo hangen ook de foto's en pdf's aan het gevalideerde bewijs.

Getest op 27 september 2026 met DSS 6.5 van de Europese Commissie, op een registratie van Vidimus zelf: Evidence Record PASSED, tijdstempel QTSA (GLOBALTRUST, Oostenrijk), eerste hashlijst bevat alleen het aangeleverde document.

Offline: download de standalone toepassing van de Commissie, start ze op uw eigen computer en volg dezelfde stappen; uw bestanden blijven bij u. Ook online stuurt de optie SHA-256 alleen de vingerafdruk: de browser berekent ze, het bestand zelf vertrekt niet. BSI: de ER Verify Tool (TR-ESOR) is bedoeld voor deskundigen; ze vraagt Java 11 en een ingestelde tijdstempelcontrole, en draait dan met checktool -conf config.xml -data vingerafdruk-invoer.json -er bewijs.ers. Wat dit niet dekt: wie tekende en de Bitcoin-verankering; die staan in stap 3 hieronder. Bij stromen met persoonsgegevens zit het zout van de registratie al in vingerafdruk-invoer.json: de route werkt ook daar. Alleen registraties van vóór 28 september 2026 met persoonsgegevens (HMAC) controleert u met de stappen hieronder.

Wat in de bundel zit.

01
  • manifest.json: alle feiten en tussenwaarden. Vingerafdruk, Merkle-pad en -wortel, batch, handtekeningen, tijdstempel, grootboekrecord, Bitcoin-status.
  • registration.json en attachments/: de originele inhoud en bijlagen, foto's, pdf's, cmr, metingen. Niet een kopie uit de databank van de klant, maar wat op het toestel werd vastgelegd en getekend.
  • Certificaten van de indiener, zijn organisatie en van Vidimus, en manifest.sig: de handtekening van Vidimus over het manifest. Tijdstempeltoken (RFC 3161, in het manifest) en gekwalificeerd.tsr van een erkende, gekwalificeerde vertrouwensdienst, zodra dat er is (binnen zes uur). bewijs.ers: het Evidence Record (RFC 4998) voor de officiële validatietools, met vingerafdruk-invoer.json als origineel: de exacte bytes die gehasht zijn. Dat bestand ontbreekt alleen bij gewiste inhoud en bij registraties met persoonsgegevens van vóór 28 september 2026. bitcoin.ots, het OpenTimestamps-bewijs naar een Bitcoin-blok.
  • Organisatiekenmerk: een SHA-256 dat de organisatie identificeert. Het staat op het eID-getekende mandaat van haar bestuurder, in de verankerde mandaatregistratie, in elke bundel (manifest.organisatie.kenmerk) en op elke controlepagina. Zo hoort elke handtekening aantoonbaar bij één, geïdentificeerde firma.
  • verify_bundle.py en VERIFICATIE.md: het referentiescript en deze handleiding, zodat de bundel zichzelf uitlegt, ook over tien jaar.

Snel: één commando.

02
  • pip install cryptography rfc3161ng opentimestamps-client en daarna python3 verify_bundle.py bundel.zip. Zonder de laatste twee pakketten blijven tijdstempel en Bitcoin op null. Per controle krijgt u true, false of null (niet controleerbaar in deze omgeving, met reden).
  • Acht controles: inhoud ongewijzigd, zit in de verankerde batch, handtekening van de indiener, handtekening van Vidimus, grootboekrecord, tijdstempel, gekwalificeerde tijdstempel, verankerd in Bitcoin. Onderaan telt het script wat het echt narekende, bijvoorbeeld GELDIG · 7 van 8 nagerekend: het Bitcoin-blok vergelijkt u dan zelf online (getuige 2 hieronder). Een null is geen bevestiging.
  • Wie ons script niet vertrouwt, doet hetzelfde met de hand. Zie hieronder.

Met de hand, stap voor stap.

03
  • Inhoud (wat). SHA-256 per bijlage met sha256sum. Bouw {"canon":"vidimus-json-2","org":"<organisatiekenmerk>","payload":…,"attachments":{naam:sha256,…}} canoniek (sleutels gesorteerd, geen witruimte) en neem daar SHA-256 van. Dat is de vingerafdruk in het manifest. Het organisatiekenmerk staat in het manifest (registration.org_kenmerk) en als serialNumber in signer-cert.pem: elke vingerafdruk is zo aan één geïdentificeerde onderneming gebonden. Registraties van vóór 26 september 2026 dragen canon vidimus-json-1, zonder org-veld; het script kent beide. Bijlagen tellen op naam; de volgorde van uploaden speelt geen rol. Korter: sha256sum vingerafdruk-invoer.json geeft dezelfde vingerafdruk, want dat bestand is precies dit object.
  • Persoonsgegevens. Sinds 28 september 2026 dragen registraties uit stromen met persoonsgegevens canon vidimus-json-3. Het object krijgt een vijfde veld, salt: het geheime zout van deze ene registratie (disclosure.salt in het manifest), zodat niemand namen of nummers kan raden door zelf te hashen. Daarover neemt u gewone SHA-256, en ook hier geldt: sha256sum vingerafdruk-invoer.json is de vingerafdruk. Het zout zegt niets over andere registraties. Oudere registraties uit zulke stromen (hash_type hmac-sha256) gebruiken HMAC-SHA256 met de salt als sleutel, over het object zonder salt-veld; het script kent beide.
  • Batch (Merkle). Loop het pad af: op elke stap de twee waarden sorteren, als bytes aan elkaar plakken, SHA-256. Eindresultaat is de wortel in het manifest.
  • Wie. Ed25519-handtekening over de vingerafdruk, controleren met de publieke sleutel in signer-cert.pem; dat certificaat is uitgegeven door org-ca.pem. Sleutelbeheer 'device' betekent: de privésleutel stond op het toestel van de indiener, niet bij Vidimus. Sleutelbeheer 'platform-held' betekent: een systeemsleutel van de organisatie (koppeling, poort, sensor) die Vidimus bewaart; dan toont de handtekening welk systeem indiende, niet welke persoon. Bij een toestelsleutel staan achter de sleutel twee verankerde verklaringen (manifest.signer.mandaat): de werkgever verklaarde bij het uitnodigen wie de persoon is en dat hij mag tekenen; de persoon tekende bij het koppelen met dezelfde sleutel dat het toestel van hem is. Beide zijn als registratie op te vragen bij de eigenaar en na te rekenen. De organisatie zelf kan haar identiteit vastleggen met een mandaat dat de beheerder met zijn Belgische eID tekent (gekwalificeerde handtekening); dan staat 'geïdentificeerd met eID' in elke bundel. Ontbreekt dat, dan zegt de bundel eerlijk: verklaring van bevoegdheid, niet onafhankelijk geverifieerd.
  • Wanneer, getuige 1. openssl ts -reply -token_in -in tijdstempel.tsr -text toont bij 'Message data' de wortel en bij 'Time stamp' het tijdstip. Daarna openssl cms -verify -inform DER -in tijdstempel.tsr -purpose timestampsign -out /dev/null -CAfile <rootcertificaten van uw systeem>: dat controleert de handtekening van de tijdstempeldienst tot een rootcertificaat dat al op uw computer staat (uitkomst: Verification successful). openssl ts -verify kan in OpenSSL 3 bij sommige tokens ten onrechte de fout 'ess cert id not found' geven.
  • Wanneer, gekwalificeerd. De nieuwe batchwortels gaan samen in één Merkle-boom, met dezelfde regels als de batch, en de wortel daarvan krijgt binnen zes uur één gekwalificeerde tijdstempel: gekwalificeerd.tsr. Controleer dat qualified.batch_root in het manifest uw batchwortel is, loop qualified.path af tot qualified.root, en kijk met openssl ts -reply -token_in -in gekwalificeerd.tsr -text of 'Message data' die wortel is; 'Time stamp' is het gekwalificeerde tijdstip. Zoek de uitgever uit dat token op in de EU-vertrouwenslijst (eIDAS Trusted List): daar staat de dienst als QTST met status 'granted'. Het rootcertificaat staat meestal niet op uw computer, wel in die lijst. Het wettelijk vermoeden (eIDAS art. 41 lid 2) geldt voor dat tijdstip; het precieze moment van registratie komt van getuige 1.
  • Wanneer, getuige 2. ots --no-bitcoin verify -d <wortel> bitcoin.ots (opentimestamps-client) noemt het Bitcoin-blok en de merkle-wortel die dat blok moet hebben. Vergelijk die op blockstream.info of mempool.space; met een eigen Bitcoin-node doet ots verify dit in één stap. Bitcoin bewijst dat de wortel bestond vóór dat blok; het precieze tijdstip komt van getuige 1. Geen blokhoogte in het manifest betekent: ingediend, nog geen blok; bundel later opnieuw downloaden.
  • Grootboek. SHA-256 over het canonieke record (index, prev, time, record) is het transactienummer; het record bevat de wortel; prev verwijst naar het vorige record. Eén record wijzigen breekt de keten.
  • Handtekening Vidimus. manifest.sig is een Ed25519-handtekening over de exacte bytes van manifest.json, te controleren met platform-cert.pem.

Laat uw agent narekenen.

AGENT · OFFLINE

Claude, ChatGPT of een eigen agent doet dezelfde controles en legt ze uit. Twee wegen: via onze server (feiten, geen inhoud), of volledig zonder ons met de bundel.

MCP · GEHOST, NIETS TE INSTALLEREN
{"mcpServers": {"vidimus": {"type": "http", "url": "https://app.vidimus.be/mcp"}}}
# tools: verify_registration, get_dossier, tamper_check, explain · met een sleutel (leessleutel volstaat): header x-api-key
ZELF NAREKENEN · ZONDER VIDIMUS
Je hebt de bewijsbundel (zip). Pak uit en voer uit: python3 verify_bundle.py bundel.zip
Rapporteer per controle true/false/null met de note. Vertrouw geen feit uit manifest.json dat je niet zelf herrekende.
Bitcoin: vergelijk de merkle-wortel uit bitcoin.ots met blockstream.info of mempool.space voor dat blok.

Oefen met een echte bundel: voorbeeldbundel.zip (één temperatuurregistratie uit een demo-stroom, 39 kB). Python 3 met het pakket cryptography volstaat; voor de tijdstempel en Bitcoin installeert het script niets, het zegt welke stap een extra tool nodig heeft. Of reken bestanden en een volledige registratie na in uw browser met het hashlab: vingerafdrukken, Merkle-pad en publieke wortel, zonder iets te uploaden.

Wat een afwijking betekent.

04
  • Inhoud faalt: een bestand of veld is niet meer wat er verankerd is. Het script noemt de bijlage. Alle andere controles blijven kloppen, dus u ziet niet alleen dát er iets veranderd is, maar wat.
  • Merkle faalt: de vingerafdruk zit niet in deze batch. Handtekening faalt: niet getekend met de sleutel van deze indiener.
  • Tijdstempel of Bitcoin faalt: de wortel bestond niet vóór dat tijdstip, of het token hoort bij een andere wortel. Handtekening Vidimus faalt: het manifest is achteraf gewijzigd.
  • Getest op 8 september 2026: tien bestanden (zeven foto's, een json, twee pdf's) in twee verschillende volgordes geven dezelfde vingerafdruk. Eén byte anders in één pdf geeft een andere. Eén byte gewijzigd in een foto van een bundel: controle 'inhoud' faalt, de andere blijven kloppen.

Grenzen, eerlijk.

05
  • Vidimus bewijst bestaan, tijdstip en ondertekenaar. Niet dat de inhoud waar is. Een foute temperatuur blijft fout, maar wel verankerd als 'dit werd toen gemeld'.
  • Een correctie is nooit een wijziging maar een nieuwe registratie met eigen hash en tijdstip, gekoppeld via dezelfde referentie. Beide versies blijven bestaan.
  • Gewiste inhoud (na de bewaartermijn) laat een bundel na die nog bewijst dát iets bestond, wie tekende en wanneer, niet wát.
  • Persoonsgegevens: dan zit er een geheim zout van die ene registratie in de vingerafdruk. Het zout staat alleen in de bundel van die registratie, nooit op de publieke controlepagina. Zonder zout is de inhoud niet herrekenbaar; keten, tijdstip en handtekeningen wel. Registraties van vóór 28 september 2026 gebruiken een HMAC met een sleutel per stroom en blijven zo na te rekenen.
  • Toestel of platform maakt niet uit. SHA-256 geeft op iPhone, Android, server en laptop dezelfde afdruk over dezelfde bytes. Alleen de handtekeningsleutel is per toestel, en dat is de bedoeling.

Waar u de bundel vindt.

06
  • Eén registratie: in de app op de registratie klikken, bewijslade, 'Bewijsbundel .zip'. Publiek zonder account: de verificatiepagina van die registratie toont dezelfde controles met dezelfde feiten, zonder inhoud.
  • Hele stroom of keten: het ⋯-menu bij de stroom, 'Auditpakket': alle bundels, een index.csv en het script in één zip.
  • Metingen van een meetbron: een meting krijgt geen deellink en geen bevestiging door een tegenpartij. Het bewijs is de reeks per bron (GET /sources/{id}/reeks), elke meting met haar vingerafdruk, in oplopende tijd.
  • Dubbelcheck: wie de databank van de klant naast de ankers wil leggen, gebruikt 'Dubbelcheck' in datzelfde menu: per record intact, gewijzigd of ontbreekt.

Vragen van een deskundige beantwoorden we rechtstreeks: oskar@vo-initiatives.com. Zie ook Beveiliging en vertrouwen.