Je AVG aantoonbaar op orde, niet alleen op papier
De meeste organisaties voldoen wel aan de AVG. Het kunnen aantonen blijkt iets heel anders. Zes Laravel-packages die elke privacy-plicht vastleggen in een logboek dat je achteraf niet meer kunt bijwerken, ontstaan uit een echt probleem in een zorgdossier.
Bij de meeste klanten waar ik kom is de AVG in principe geregeld. Er staat een verwerkersregister, er hangt een privacyverklaring op de website en de toestemming wordt ergens vastgelegd. Tot ik vraag: kun je me laten zien wanneer Jan Jansen toestemming gaf voor de nieuwsbrief, wanneer hij die introk en op welk moment je dat verzoek hebt verwerkt. Dan begint het zoeken. Je AVG aantoonbaar maken is iets heel anders dan voldoen aan de AVG.
Waar dit verhaal begon
Anderhalf jaar geleden begon ik aan de nieuwe versie van Dossier360, een elektronisch cliëntdossier voor de zorg. In de zorg is de AVG geen abstract leerstuk. Een betrokkene vraagt om inzage, een cliënt trekt toestemming in, een medewerker neemt zonder reden een gegevenscategorie te veel mee in een rapport. Op elk van die momenten moet je later kunnen reconstrueren wat er is gebeurd, door wie en wanneer.
We hadden dat in eerste instantie opgelost zoals iedereen het oplost. Met logregels in een tabel, een paar audit-kolommen op de modellen en goede bedoelingen. Tot er een audit kwam en wij moesten kunnen aantonen dat die logregels niet stiekem waren bijgewerkt. Dat bleek onmogelijk. We hadden veel data, maar we hadden geen bewijs.
Het verschil tussen voldoen en aantonen
Voldoen aan de AVG kun je doen door een proces te beschrijven en er naar te leven. Aantonen vraagt iets fundamenteels anders: een vastlegging die niemand achteraf kan wijzigen, ook jijzelf niet, en die je kunt verifiëren tot op de eerste regel. Een logregel in een tabel die je zelf beheert is geen bewijs. Iedereen met databasetoegang kan hem aanpassen.
Wat wel als bewijs werkt is een keten waarin elke regel wiskundig afhankelijk is van de vorige. Verander één regel, en alle daarna kloppen niet meer. Dat principe zit onder alles wat ik later in de GinkelSoft AVG-packages heb gebouwd.
Zes packages voor zes AVG-plichten
De familie bestaat uit een fundering en vijf functionele onderdelen, met daarboven een controle-tool. De fundering, Compliance Core voor Laravel, levert de hash-keten, de anonimisatie-strategieën en de contracten waarop de rest leunt. Zelf doet dit package niets aan AVG-controle. Het zorgt wel dat de andere packages allemaal hetzelfde bewezen mechaniek gebruiken.
Recht op vergetelheid in Laravel wist of anonimiseert alle gegevens van één betrokkene over meerdere modellen tegelijk, met een verifieerbaar bewijsspoor. Dat dekt artikel zeventien van de AVG. Inzageverzoek in Laravel doet het omgekeerde: het verzamelt alle persoonsgegevens van één betrokkene en exporteert die read-only naar JSON of Markdown. Voor artikel vijftien en twintig.
Toestemming vastleggen in Laravel houdt elke verlening en intrekking van toestemming bij als gebeurtenis in een onveranderlijk register, met versiebeheer per doel. Voor wie onder artikel zes en zeven moet kunnen aantonen op welk moment iemand toestemming gaf voor welke versie van de voorwaarden. Datalek-register in Laravel bewaakt de tweeënzeventig-uurs-deadline van artikel drieëndertig en bouwt per incident een hash-geketend logboek op van elke beslissing en actie.
Tot slot de Compliance Hub voor Laravel. Die detecteert welke familie-packages je hebt geïnstalleerd, controleert al hun hash-ketens met één commando en bundelt de stand tot één rapport voor een audit.
Hoe de hash-keten werkt
Elke regel in het logboek bevat een SHA-256 berekend over de eigen inhoud, de hash van de vorige regel en een geheim uit je .env. Dat geheim leeft niet in de database. Een aanvaller die volledige lees- en schrijftoegang krijgt tot je database kan daardoor geen kloppende keten vervalsen zonder ook dat geheim te bemachtigen.
De controle is een enkele aanroep die de hele keten doorloopt en bij de eerste discrepantie de regel teruggeeft waar het misging. In de praktijk zie je dat zelden, en als je het ziet weet je dat er iets in de database is gebeurd wat niet hoort. Dat is de helft van het werk.
Wat dit oplevert in een audit
Een toezichthouder of een interne auditor stelt steeds dezelfde vraag: laat zien dat de vastlegging klopt. Met een gewoon log eindigt dat gesprek in beloftes. Met een hash-keten kun je het commando draaien en het rapport laten zien. Geen interpretatie, geen vertrouwen op het feit dat niemand iets heeft aangeraakt, gewoon een verifieerbare stand.
Hetzelfde geldt voor de momenten waarop iets misgaat. Een datalek dat netjes is geregistreerd, met een onveranderlijk logboek van wie wat wanneer wist en deed, is in een melding bij de Autoriteit Persoonsgegevens een wereld van verschil met een spreadsheet waar achteraf nog dingen zijn ingevuld.
Wie hier iets aan heeft
Wie een Laravel-applicatie heeft waarin persoonsgegevens worden verwerkt en wie van zichzelf zegt dat de AVG geregeld is, maar nog nooit getest heeft hoe dat eruitziet onder druk, heeft hier iets aan. Het hoeft geen zorgapplicatie te zijn. Elke applicatie die toestemming bijhoudt, gegevens van klanten of medewerkers verwerkt en in een audit- of incidentsituatie moet kunnen aantonen wat er is gebeurd, kan deze packages inzetten.
De packages zijn open source onder MIT, met PHPStan op niveau max en Pest-tests. Je kunt ze installeren via Composer, configureren en doorgebruiken zonder een licentie of een leverancier nodig te hebben. Wil je hulp bij het inpassen in een bestaande applicatie of bij het in kaart brengen van wat er nu allemaal nog niet vastligt, dan valt dat onder maatwerk software en onderhoud en doorontwikkeling.
Een eerlijke kanttekening
Geen enkel package maakt een organisatie automatisch AVG-compliant. De techniek vastleggen is de helft, het beleid en de discipline om die techniek correct te gebruiken is de andere helft. Wie de packages installeert maar de bewaartermijnen niet uitvoert, het toestemmingsbeheer niet aan een proces koppelt of het datalek-register niet daadwerkelijk gebruikt op het moment dat het telt, heeft alleen een mooier logboek van wat er niet gebeurde.
De familie is opgezet om die helft die wel automatiseerbaar is daadwerkelijk te automatiseren. Wat overblijft is het werk dat je toch al had moeten doen, alleen nu met een bewijslaag die er anders niet was.
Begin met de fundering
Voor een eerste stap is het advies eenvoudig. Bekijk welke AVG-plichten in jouw applicatie op dit moment het zwakst zijn vastgelegd. Vaak is dat toestemming, soms is het inzage, in veel applicaties is er gewoon geen datalek-register. Installeer het bijbehorende package, sluit het aan op je modellen en draai de verificatie. De rest van de familie komt vanzelf naar voren, want zodra je een logboek hebt dat klopt, wil je dat de andere ook kloppen.
Wil je sparren over de aanpak in jouw situatie, dan plan ik graag een vrijblijvend gesprek. Geen verkoopgesprek, gewoon een uur waarin we de huidige stand doorlopen en bepalen waar de grootste hiaten zitten.