<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>[NL] &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/category/nl/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Wed, 15 Apr 2026 14:39:54 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>[NL] &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Legacy &#038; AI: Tijdreizen in je Terminal</title>
		<link>https://www.smalsresearch.be/legacy-ai-tijdreizen-in-je-terminal/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 07:56:17 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/?p=27622</guid>

					<description><![CDATA[Sinds de hype van grote taalmodellen is losgebarsten, zullen de meeste ontwikkelaars ondertussen al wel geproefd hebben van de productiviteitswinst die deze tools, mits correct gebruik, kunnen bieden. In deze blog onderzoeken we of we verder kunnen gaan dan dat: biedt het AI ook voldoende hulp bij het beheersen van Legacy Code?]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-large is-resized"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj.png"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-1024x1024.png" alt="" class="wp-image-27693" style="width:274px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-1024x1024.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-768x768.png 768w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-1536x1536.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text no-top-margin" style="padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">Sinds de hype van grote taalmodellen is losgebarsten, zullen de meeste ontwikkelaars ondertussen al wel geproefd hebben van de productiviteitswinst die deze tools, mits correct gebruik, kunnen bieden. In deze blog onderzoeken we of we verder kunnen gaan dan dat: biedt AI ook voldoende hulp bij het beheersen van Legacy Code?</p>



<span id="more-27622"></span>



<p class="justify-text">Het inzetten van <a href="https://www.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/" data-type="post" data-id="24386">Large Language Models (LLM)</a> bij het programmeren is inderdaad ondertussen stilaan goed gekend: het gaat van vragen stellen aan een chatbot (&#8220;hoe schrijf ik in Java een algoritme dat &#8230; &#8220;), overheen steeds <a href="https://www.smalsresearch.be/llms-voor-code/" data-type="post" data-id="18875">slimmere en langer wordende <em>code completion</em></a> (automatisch aanvullen wat je wil typen in de editor), tot <a href="https://www.smalsresearch.be/vibe-coding-met-agentic-ides/" data-type="post" data-id="22499">volledige <em>vibe coding</em></a> (in de IDE, of zelfs gewoon in een terminal): AI agenten, via prompts, hele stukken code &#8211; ja, zelfs werkende toepassingen &#8211; laten schrijven op je machine.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:30%">
<p class="justify-text">Deze manier van werken beschreven we reeds <a href="https://www.smalsresearch.be/vibe-coding-met-agentic-ides/" data-type="post" data-id="22499">in een vorige blogpost</a>, en de caveats, zaken waarop men moet letten, gelden nog steeds: blijf continu opvolgen, stel zaken in vraag, controleer, en geef de juiste hoeveelheid nuttige context mee aan het AI (een kunst op zich). Voor het behandelen van <strong><em>legacy code</em></strong>, stellen er zich echter nog een aantal verdere problemen:</p>



<ul class="wp-block-list">
<li class="justify-text">Het is geen nieuwbouw (of <em>greenfield</em>): er is erg veel impact van &#8211; vaak obscure &#8211; beslissingen uit het verleden.</li>



<li class="justify-text">In veel gevallen is er reeds een massa code aanwezig.</li>



<li class="justify-text">Vaak vraagt het com- pileren, uitvoeren en testen van de code specifieke technologie, die zelf verouderd is en soms moeilijk te in-stalleren of simuleren.</li>



<li class="justify-text">Je bent als mens vaak niet meer onderwezen in het hoe en waarom van de bestaande codebase, waardoor het moeilijker wordt de resultaten van het AI kritisch te be-oordelen.</li>
</ul>
</div>



<div class="wp-block-column is-style-section-1 has-accent-5-background-color has-background is-layout-flow wp-container-core-column-is-layout-43dc041e wp-block-column-is-layout-flow is-style-section-1--1" style="border-width:2px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;flex-basis:70%">
<h3 class="wp-block-heading is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-right:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);margin-left:var(--wp--preset--spacing--20)"><span style="text-decoration: underline;">Vibe Coding: Een aantal Tips</span></h3>



<p class="justify-text has-small-font-size" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)"><em>Deze eenvoudige truukjes ondervonden we reeds bij ons werk rond Legacy Code &amp; AI, maar zijn breder toepasbaar naar alle Vibe Coding projecten.</em></p>



<ul class="wp-block-list">
<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Grote Schoonmaak: vóór je een AI loslaat op een codebase, moet je ervoor zorgen dat er geen privégegevens, paswoorden, of andere gevoelige informatie in te vinden zijn!</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Planning: vraag om opties en stel executie uit. Als je zelf bedreven bent in wat je wil doen, heb je vast en zeker al een idee van waar je precies naartoe wilt. Het kan echter soms lonen om je gesprek met het AI heel open van geest te beginnen en te vragen naar ideeën en opties (b.v. qua architectuur of gebruikte technologie) om je algemene visie te bewaarlijken (waarbij je het soms overijverige AI ook duidelijk maakt dat er alleen nog maar wordt gepland). Vraag specifiek naar meerdere suggesties! Dit kan helpen bij het brainstormen, en om je eigen ideeën aan te vullen met meer inspiratie. In het vervolg van het geprek ga je dan dieper in op de opties die je het meeste aanstaan, en dan pas vul je aan met je eigen expertise om de ideeën van het AI bij te sturen, tot er een concreet plan van actie is ontstaan dat zo optimaal mogelijk is. Pas daarna gaan we over tot effectieve implementatie.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Indirectie en Tools. Zeker als je via een CLI (Command Line Interface) werkt, zijn zowel jij als het AI zich niet meteen bewust van alle mogelijke reeds bestaande tools die zouden kunnen worden geëxploiteerd om je doelen te bereiken. Laat het AI zoeken naar tools die zouden kunnen helpen, en helpen bij de installatie ervan. Hoe meer zaken je via tools kan doen, hoe minder de context wordt vervuild met nodeloos &#8220;manueel&#8221; werk door het AI zelf (om nog maar te zwijgen van de besparing qua token gebruik). Zo bestaan er b.v. allerlei <a href="https://en.wikipedia.org/wiki/Static_program_analysis">static code analysis tools</a> die je kan gebruiken om de kwaliteit van je geschreven code te evalueren en hoog te houden. Het is vaak een koud kunstje voor het AI om heel wat van de gegeven suggesties na de analyse uit te voeren.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Expert Mode: soms volstaan standaard tools niet om het AI voldoende te helpen bij wat je wil dat het doet. In dat geval kan je het AI eerst diens eigen tools laten schrijven. Daar kan je erbij voor zorgen dat het resultaat, of de output van de tool, iets is wat kort en samenvattend is voor de verdere taken, om de context niet teveel te belasten. Context windows van LLMs worden weliswaar steeds groter, maar dan nog moet je ervoor zorgen dat enkel de nuttigste zaken erin zitten (pas op voor <a href="https://redis.io/blog/context-rot/">context rot</a>).</li>
</ul>
</div>
</div>



<p>In een vorige <a href="https://www.smalsresearch.be/legacy-code-trotseren-best-practices-ai/" data-type="post" data-id="21131">post rond legacy code</a>, gaven we een erg brede definitie. Laten we dus vooreerst iets duidelijker stellen wat we met Legacy bedoelen, en de &#8220;moei- lijkheidsgraad&#8221; van Legacy projecten beter illustreren.</p>



<h2 class="wp-block-heading">&#8220;Oude&#8221; code: een spectrum aan mogelijkheden</h2>



<p class="justify-text">Er is niet echt een officiële definitie van legacy code; meestal spreekt men van het gebruik van niet langer ondersteunde technologie, moeilijk te onderhouden, of simpelweg &#8220;code die je van iemand anders erft&#8221;. Het gaat uiteraard altijd wel om code die nog in gebruik, en dus belangrijk is. Ironisch genoeg, zijn het vaak de meest kritische toepassingen, die al jaren meegaan en waar men al jaren &#8220;op vertrouwt&#8221;, maar dan zonder ze goed te onderhouden.</p>



<p class="justify-text">AI kan ons helpen bij het onderhoud van eender welke code, dus we zullen een spectrum demonstreren dat van de oudste, ergste legacy code gaat, tot code van projecten die slechts een kleine update nodig heeft. Aan de ene kant van het spectrum heb je programma&#8217;s, geschreven in ouderwetse programmeertalen, volgens een achterhaalde architectuur, gebruik makend van databases die niet meer van deze tijd zijn, en draaiende op servers met niet langer ondersteunde besturingssystemen: bij deze mastodonten moet men vaak bang zijn dat ze kritisch zullen falen bij de kleinste verkeerde wijziging. Helemaal aan de andere kant heb je vrij goed onderhouden software, waarin een softwarebibliotheek wordt gebruikt die niet meer de meest recente versie is: meestal een koud kunstje om ze weer helemaal up-to-date te krijgen. Ergens in het midden vind je, ten slotte, toepassingen terug waarbij de meeste developers nog niet meteen het woord Legacy in de mond zullen nemen, maar waar wel moeilijke migraties dienen te gebeuren, met b.v. een verouderd framework of twee dat zou moeten worden vervangen.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-scaled.png"><img decoding="async" width="1024" height="506" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-1024x506.png" alt="" class="wp-image-27634" style="width:1301px;height:auto"/></a></figure>



<p class="justify-text">Wat kunnen we hier nu mee? Bieden LLMs ons andere mogelijkheden naargelang de plaats van het project op dit spectrum? Ons onderzoek heeft zich tot nu toe op de linkerkant van dit spectrum gefocust, dus het vervolg van deze blogpost zal veeleer over de mogelijkheden gaan om &#8220;échte&#8221; Legacy aan te pakken. Later dit jaar gaan we ook verder uitdiepen wat we met migraties en updates kunnen doen.</p>



<h2 class="wp-block-heading">Gebruik van LLMs op Legacy Codebases</h2>



<p class="justify-text">Het is duidelijk dat de eenvoudige prompt &#8220;herschrijf mij dit programma volgens moderne standaarden&#8221; niet zal werken (al beweren sommige vendors dat dit eraan zit te komen). We zullen iets concretere zaken gaan vragen, en het werk ook enigszins in stukjes moeten kappen. Verder zijn er eigenlijk twee zaken die we kunnen gaan doen met onze legacy code: ze herschrijven en ze documenteren.</p>



<h3 class="wp-block-heading">Herschrijven van Legacy Code</h3>



<p class="justify-text">Als we beginnen met code herschrijven, zullen we er vaak rekening mee moeten houden dat een heel groot project voldoende goed herbouwen een te moeilijke opgave is. We kunnen &#8220;quick wins&#8221; behalen door strategisch een aantal zaken te gaan herschrijven van een project, en die stukken dan te gebruiken in een ruimere context, waarbij een team van mensen en AI de toepassing opnieuw bouwen volgens de regels van de kunst. Bij onze experimenten stelden we vast dat het een brug te ver was om van het AI te verwachten een volledig nieuwe architectuur te gebruiken, tegelijk met het vertalen van oude code naar nieuwe. Wat wel mogelijk is, is om heel wat van de typische scaffolding van een nieuw project te vibe coden, en daar dan gericht een aantal stukken code in te injecteren die vertalingen zijn van stukjes van een legacy project. Als mens is het onze taak om duidelijk aan te geven welke architectuur we verwachten, en wat de kwaliteitsregels zijn van de nieuw geschreven code.</p>



<p class="justify-text">Eén van de grotere uitdagingen bij het herschrijven van code met behulp van AI, is het testen van de correctheid van de vertaling: doet de code nog wat ze vroeger deed (los van het feit of dit wenselijk is, want zelfs de business case kan soms te verouderd zijn in geval van Legacy)? Bij redelijk nieuwe projecten zullen er reeds heel wat testen bestaan die we kunnen uitvoeren om de correctheid na te gaan, maar bij legacy hebben we vaak het probleem dat de toepassing eenvoudigweg wordt getest in productie, of op zijn minst met productiedata: er zijn geen specifieke tests of zelfs maar veilig bruikbare testdata. In dat geval komt het erop neer een omgeving te creëren waarin we de nieuwe code op een veilige manier kunnen testen, wat meestal ad hoc werk is en enige creativiteit vraagt. We mogen namelijk geen productiedata naar de Cloud sturen, dus we moeten ervoor zorgen dat het LLM deze niet kan lezen. Het zou eenvoudiger zijn als we lokaal draaiende LLMs zouden kunnen gebruiken, maar voorlopig zijn deze nog niet krachtig genoeg (als ze al beschikbaar zijn) om dergelijke complexe taken uit te voeren met legacy code.</p>



<p class="justify-text">Een andere uitdaging is de gebruikersinterface: bij oudere projecten is deze vaak achterhaald en moet er, vanaf de grond, een nieuwe GUI (Graphical User Interface) worden opgebouwd. Dat geeft echter het probleem dat je geen basis meer hebt in het oude project om mee te vergelijken: de nieuwe interface zal doorgaans manueel door mensen moeten worden getest. Ik verwacht echter dat we op dit vlak nog vorderingen zullen zien in de nabije toekomst, wat de mogelijkheden van het AI betreft. We zien namelijk al systemen opduiken die je volledige computer kunnen besturen (zoals <a href="https://openclawd.ai/">OpenClawd</a> of het <a href="https://www.anthropic.com/news/3-5-models-and-computer-use">&#8220;Computer Use&#8221; van Anthropic</a>), en ook integratie met meer traditionele raamwerken voor het testen van een GUI behoort tot de mogelijkheden.</p>



<p class="justify-text">Waar we, ten slotte, ook quick wins mee kunnen halen, zijn kleinere Legacy projecten. Als we een klein tot matig groot legacy programma gebruiken, met bepertke functionaliteit en een eenvoudige GUI of een duidelijke input en output in geval van batch processing, en geen business case om deze te integreren in een andere manier van werken, dan kunnen we een rechttoe rechtaan aanpak proberen om een moderne versie in een nieuwe programmeertaal te bouwen met AI. We moeten dan nog altijd goed testen en een gestructureerde aanpak hebben met bijsturingen door menselijke developers, maar het wordt wel feasible om dit voor niet-kritische toepassingen te gaan uitproberen. Een intern gebruikte toepassing is bijvoorbeeld een typische goede eerste kandidaat.</p>



<h3 class="wp-block-heading">Documenteren van Legacy Code</h3>



<p class="justify-text">Soms is herschrijven van Legacy met AI net iets te ambitieus, óf we hebben meer informatie nodig voor we er ons aan wagen. In dat geval kan het interessant zijn om eerst richting documentatie te kijken: het AI kan ons ook helpen om het verkennen van een legacy codebase net iets minder op archeologie voor gevorderden te doen lijken.</p>



<p class="justify-text">Van een klein tot matig stuk code uitleggen en er de business logica uithalen, of een groter stuk analyseren en de opbouw en architectuur uitleggen: dat kan met de huidige grote taalmodellen zonder meer. We kunnen echter verder gaan: we kunnen het AI tools laten bouwen om zichzelf te helpen de codebase te verkennen, en b.v. diagrammen te voorzien van de afhankelijkheden tussen de stukken code. Of we kunnen het scripts laten maken om de bevindingen na elk stuk analyse netjes te structureren in een tekstbestand voor zichzelf en een pdf voor de menselijke gebruiker.</p>



<p class="justify-text">We kunnen ook hiërarchisch werken: eerst een verkenning van de codebase doen, en dan telkens dieper duiken in de verschillende modules, om meer en meer detail te verkrijgen en de analyse aan te vullen. Dat is de top-down aanpak, die we echter kunnen aanvullen met een bottom-up versie: eens we tot in de diepte zijn gegaan, kunnen we weer zaken laten samenvatten om van het grotere plaatje een beter geïnformeerde uiteenzetting op te bouwen.</p>



<p class="justify-text">Hier is het wel van belang dat we van tevoren weten wat we precies willen bereiken. Een algemene analyse van een codebase door het AI kan interessant zijn wanneer de menselijke gebruikers het systeem nog totaal niet kennen en aanknopingspunten willen hebben om zaken te leren, maar biedt meestal weinig extra aan mensen die de codebase reeds beheersen.</p>



<p class="justify-text">Maar wanneer het doel is om de codebase te kunnen onderhouden, kunnen we eventueel een systeem opbouwen waarbij we een chatbot aanbieden die de specifieke context en bijzonderheden van het legacy project kent, en daar heel gerichte vragen over kan beantwoorden. Dit kan b.v. in <a href="https://adoption.microsoft.com/en-us/ai-agents/copilot-studio/">CoPilot Studio</a>. Wanneer dat niet goed genoeg werkt, kunnen we nog overwegen om manueel een knowledge base op te bouwen, gebruik makend van het AI, die dan weer door het AI kan worden gebruikt om vragen te beantwoorden.</p>



<p class="justify-text">Nog een andere optie bestaat eruit dat we specifieke informatie uit de codebase willen extraheren, zoals de business logica per afzonderlijke module, of pseudocode die menselijke developers kan helpen om de logica in een ander project te herimplementeren. (En uiteraard kan bij die tweede stap ook weer een AI worden ingezet.)</p>



<p class="justify-text">Kortom, met een beetje creativiteit kunnen we voor de meeste ad hoc analyses een betere aanpak verzinnen dan &#8220;analyseer er maar gewoon op los&#8221;. En het documenteren van een legacy systeem kan ook gewoon een eerste opstap zijn naar het herschrijven.</p>



<p></p>



<h2 class="wp-block-heading" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)">Besluit: vakmannen gevraagd</h2>



<figure class="wp-block-image alignright size-large is-resized is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-scaled.png"><img decoding="async" width="1024" height="559" src="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-1024x559.png" alt="" class="wp-image-27699" style="aspect-ratio:1.8333516399024625;object-fit:contain;width:546px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-1024x559.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-300x164.png 300w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-768x419.png 768w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-1536x838.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-2048x1117.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text no-top-margin">Zoals we hebben aan-gekaart, bieden LLMs ons stilaan erg krachtige mogelijkheden om onze Legacy Codebases aan te pakken, zéker wanneer we toegang hebben tot de grote en krachtige modellen die vandaag beschikbaar zijn. We zien echter ook dat het eigenlijk een heel goed gevulde gereedschapskoffer is, met een aantal krachtige &#8220;power tools&#8221;, en dat we moeten weten <em>wat </em>we ermee willen bereiken en <em>hoe </em>we deze best kunnen gebruiken.</p>



<p class="justify-text">We zitten nog niet op het punt dat alles automatisch gaat: we zullen dus nog steeds goede <em>vakmannen </em>nodig hebben om optimaal van dit gereedschap gebruik te maken. Onze raad aan developers is om zeker niet bang te zijn van AI en er geregeld gebruik van te maken bij de analyse en ontwikkeling van software: ervaring is de beste leerschool om de goede vakmannen die we hiervoor nodig hebben, op te leiden.</p>



<p class="justify-text">Voorlopig is dus het besluit: voor legacy code is AI geen wondermiddel, maar een handige gereedschapskist die je best kan uitproberen als deel van een bredere aanpak. Zoals gezegd kijken we later dit jaar eerder naar het midden en de rechterkant van het spectrum van legacy. Wij vermoeden dat hier meer mogelijkheden zijn tot automatisering van een aantal workflows, zeker als we ook dieper gebruik gaan maken van agents. Mogelijks kunnen we, voor iets eenvoudigere en repetitievere projecten, dus toch van &#8220;vakman&#8221; naar &#8220;fabriek&#8221; evolueren.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Je data beschermen tegen beheerders: ‘on-premise’ Confidential Computing</title>
		<link>https://www.smalsresearch.be/je-data-beschermen-tegen-beheerders-on-premise-vertrouwelijke-it/</link>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Tue, 17 Mar 2026 07:30:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[confidential computing]]></category>
		<category><![CDATA[confidential containers]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[TEE]]></category>
		<category><![CDATA[Trusted Execution Environment]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/?p=26512</guid>

					<description><![CDATA[In deze en de volgende blogpost kijken we naar de mogelijkheid om TEE's op onze eigen infrastructuur (on-premise) te gebruiken. Het doel is drieledig: gebruikmaken van de kracht van confidential computing om data te beschermen en nieuwe toepassingen mogelijk te maken, terwijl we een zekere controle behouden over de software- en hardwarestack, en zo het vertrouwen van onze klanten versterken.]]></description>
										<content:encoded><![CDATA[
<p><em>Cet article est aussi disponible&nbsp;en&nbsp;<a href="/proteger-ses-donnees-des-administrateurs-linformatique-confidentielle-on-premise/">français</a>.</em></p>



<p>Wat als je systeembeheerders toegang zouden hebben tot je gevoelige data zonder dat je het weet? <em>Confidential Computing</em> biedt een oplossing: data isoleren, zelfs voor degenen die de infrastructuur beheren. Maar hoe?</p>



<p><em>Confidential Computing</em> omvat een geheel van technologieën waarmee gevoelige data zodanig worden beschermd dat ze niet hoeven te worden ontsleuteld om te worden verwerkt. Hoewel sommige technologieën, zoals homomorfe versleuteling, nog steeds erg complex zijn om te implementeren, zijn <em>Trusted Execution Environments</em> (TEE&#8217;s) inmiddels zo ver ontwikkeld dat ze kunnen worden beschouwd als belangrijke technologie bij databescherming.</p>



<p>Het belangrijkste doel van TEE&#8217;s is om een buffer te vormen tegen de <a href="https://tweakers.net/nieuws/245316/1700-politiemedewerkers-bekeken-dossier-vermoorde-lisa-buitengewoon-kwalijk.html">nieuwsgierigheid</a> van de entiteiten die de infrastructuur beheren. Technische bescherming lost echter niet alles op. Extraterritoriale wetten [<a href="#ref1">1-5</a>] en het gebruik van eigen softwarelibrary&#8217;s die door sommige IT-infrastructuurproviders worden opgelegd, kunnen deze isolatie ondermijnen.</p>



<p>In deze en de volgende blogpost kijken we naar de mogelijkheid om TEE&#8217;s op onze eigen infrastructuur (<em>on-premise</em>) te gebruiken. Het doel is drieledig: gebruikmaken van de kracht van confidential computing om data te beschermen en nieuwe toepassingen mogelijk te maken, terwijl we een zekere controle behouden over de software- en hardwarestack, en zo het vertrouwen van onze klanten versterken.</p>



<h1 class="wp-block-heading">Scheiding van rollen</h1>



<p>Laten we beginnen met een overzicht van de verschillende spelers die betrokken zijn bij de implementatie van een toepassing op een IT-infrastructuur. Hun rollen moeten strikt gescheiden zijn om de integriteit van het systeem te garanderen.</p>



<ul class="wp-block-list">
<li>De <strong>infrastructure operator</strong> beheert de hardware en infrastructuur (computing, storage, network) en onderhoudt de beveiligde runtime-omgevingen. Hij beheert de firmware-updates en de toewijzing van middelen, maar zou geen toegang mogen hebben tot de data of de uitgevoerde workloads.</li>



<li>De <strong>orchestration operator</strong>, die dezelfde kan zijn als de infrastructure operator, is verantwoordelijk voor het beheer van de serverclusters en de implementatie van de workloads. Hij configureert de benodigde middelen voor de toepassing en houdt toezicht op de bijbehorende diensten (logging, monitoring). Ook zijn rechten zouden strikt beperkt moeten blijven om elke vorm van inbreuk op de toepassing te voorkomen, terwijl de noodzakelijke orchestratie wel mogelijk blijft.</li>



<li><strong>De workload provider </strong>ontwerpt de specificaties van de toepassingen en kiest de juiste container images, waarbij hij de conformiteit en integriteit ervan garandeert. Hij moet aan de data owners (zie hieronder) laten zien dat de gebruikte code veilig is en de privacy respecteert, zonder direct toegang te geven tot gevoelige data.</li>



<li><strong>De container image provider</strong> bouwt, ondertekent en versleutelt de container images, zodat hun herkomst en veiligheid gegarandeerd zijn. Hij verstrekt de verificatie en decryptiesleutel. Zijn samenwerking met de toepassingsprovider is cruciaal om de softwareketen te garanderen en ervoor te zorgen dat de geïmplementeerde code precies dezelfde is als de geauditeerde code.</li>



<li>Ten slotte bezit <strong>de data owner</strong> de data die door de toepassingen worden verwerkt en eist hij de vertrouwelijkheid en integriteit ervan. Hij vertrouwt op de code van de toepassing (de container) en de cryptografische bewijzen die door de microprocessor worden geleverd, waardoor infrastructure en orchestration operators buiten zijn vertrouwensbereik vallen. Hij kan extra controles opleggen om ervoor te zorgen dat zijn data niet zichtbaar zijn voor of gemanipuleerd worden door onbevoegde personen.</li>
</ul>



<p>De relaties tussen deze spelers brengen specifieke uitdagingen met zich mee: de data owner moet bijvoorbeeld kunnen vertrouwen op de code van de containers (geleverd door de workload provider) om zijn data te verwerken, terwijl hij deze tegelijkertijd moet beschermen tegen andere spelers, zoals de infrastructure of orchestration operator. Met name de beheerders van deze operators mogen in geen geval toegang hebben tot de data die door de containers worden verwerkt.</p>



<h1 class="wp-block-heading">Betrouwbare runtime-omgeving</h1>



<p>Met TEE&#8217;s kan een technische barrière worden gecreëerd die het vertrouwen van de data owner in de toepassingscontainer versterkt. We hebben al uitvoerig uitgelegd hoe ze werken en wat hun voor- en nadelen zijn in een technisch rapport [<a href="#ref6">6</a>] en blogposts [<a href="#ref7">7</a>], [8]. Hier gaan we even de belangrijkste punten herhalen alvorens we de technologische keuzes voor een implementatie op onze onderzoeksinfrastructuur voorstellen.</p>



<p>Het goed functioneren van TEE&#8217;s hangt af van de hardware. Sommige moderne microprocessors maken het mogelijk om een deel van het RAM-geheugen dat is toegewezen aan een specifieke virtuele machine (VM) te reserveren en te versleutelen. Zo zal een beheerder van de hostmachine, zelfs met de hoogste privileges, alleen versleutelde data zien als hij dit geheugengebied probeert te inspecteren. Hoewel er aanvallen via side-channels bestaan (bijv. [<a href="#ref9">9</a>]), vereisen deze vanwege hun complexiteit doorgaans langdurige fysieke toegang en de toevoeging van kwaadaardige hardwarecomponenten, waardoor ze in de praktijk uiterst moeilijk uit te voeren zijn.</p>



<p>Opdat de data owner er zeker van kan zijn dat zijn toepassing in een veilige omgeving draait, gebruikt hij het <a href="https://www.smalsresearch.be/introduction-a-l-informatique-confidentielle/#Attestation">certificeringsmechanisme</a>. Dit proces genereert een cryptografische handtekening van de inhoud van het geheugen van de VM op het moment dat deze wordt opgestart. Deze handtekening wordt gecertificeerd door de fabrikant van de microprocessor.</p>



<p>Dit proces heeft zijn beperkingen, vooral als de infrastructure operator een buitenlandse onderneming is (bijvoorbeeld Amazon AWS, Google Cloud of Microsoft Azure) die zijn eigen libraries in de VM oplegt om bijvoorbeeld de juiste hardware-abstractielaag te bieden.</p>



<p>Dit heeft ons ertoe aangezet om dit soort hardware op onze eigen infrastructuur binnen het onderzoekslabo te testen, in afwachting van de mogelijkheid om dit op een dag op <a href="https://www.gcloud.belgium.be/">G-Cloud</a> toe te passen. Het voordeel hiervan is dat een klant van SMALS een toepassingscontainer op een veilige manier kan gebruiken, zonder dat een beheerder van SMALS toegang heeft tot de inhoud van de container.</p>



<p>Maar het nut van TEE&#8217;s gaat verder dan alleen bescherming tegen beheerders. Het opent de deur naar andere toepassingen.</p>



<h1 class="wp-block-heading">Use case</h1>



<p>Een eerste voorbeeld is te vinden in de Europese infrastructuur voor <a href="https://health.ec.europa.eu/ehealth-digital-health-and-care/digital-health-and-care/electronic-cross-border-health-services_nl">digitale gezondheidsdiensten (eHDSI)</a>. Daar kunnen zorgverleners in het land waar de behandeling plaatsvindt de relevante gezondheidsdata van de patiënt opvragen in het land waar de patiënt is aangesloten. Technisch gezien wordt de aanvraag via de gateway van het nationale contactpunt voor gezondheidszorg (NCPeH) van het land waar de onverwachte gezondheidsgebeurtenis plaatsvindt, doorgestuurd naar het land waar de patiënt is aangesloten. De gevraagde info moet dan worden opgehaald uit de nationale infrastructuur van het land van aansluiting, vertaald naar het Engels en getranscodeerd (de gezondheidsdata worden omgezet van het nationale coderingssysteem naar het algemeen aanvaarde coderingssysteem, bijvoorbeeld van het <a href="https://www.hl7.org.uk/standards/hl7-standards/fhir/">FHIR</a>&#8211; of <a href="https://www.ehealth.fgov.be/standards/kmehr/en">KMEHR</a>-formaat naar <a href="https://www.hl7.org.uk/standards/hl7-standards/cda-clinical-document-architecture/">CDA</a>), en vervolgens teruggestuurd en gepresenteerd worden aan de zorgverlener in het land van behandeling. Vanwege het gevoelige karakter van de data moeten deze van begin tot eind worden versleuteld, vanaf de gegevensbron op de infrastructuur van het land van aansluiting tot aan de zorgverlener in het land van behandeling. In de praktijk is dit nog niet mogelijk vanwege de grote verschillen tussen de Europese landen. Het zou echter op zijn minst mogelijk moeten zijn om te garanderen dat de data versleuteld en ontoegankelijk blijven voor alle gebruikers of beheerders tussen de bron van de data en de uitgang van de NCPeH-gateway. Een mogelijkheid is dan om TEE&#8217;s te gebruiken voor het vertalen en transcoderen van de data.</p>



<p>Een ander voorbeeld van het gebruik van TEE&#8217;s is de beveiligde samenwerking tussen entiteiten die hun ruwe data niet willen delen. In de onderwijs- en werkgelegenheidssector heeft een experiment van Bogdanov <em>et al.</em> in Estland [<a href="#ref10">10</a>] de kracht van confidential computertechnieken aangetoond. De auteurs van deze studie wilden achterhalen of werken naast een hogere opleiding ertoe leidt dat je je diploma niet op tijd behaalt – een vraag die vooral belangrijk is voor de sector van de informatie- en communicatietechnologie (ICT) in Estland. Om deze probleemstelling te beantwoorden zonder de privacy van persoonlijke data in gevaar te brengen, hebben de onderzoekers de onderwijsregisters van het ministerie van Onderwijs en Onderzoek gecombineerd met de data van de belastingdienst, dankzij een speciale techniek van confidential computing. Maar een simpelere variant met een TEE zou net zo goed hebben gewerkt voor de analyse, terwijl de fiscale vertrouwelijkheid en databescherming gewaarborgd bleven.</p>



<h1 class="wp-block-heading">CoCo</h1>



<p>Om TEE&#8217;s te gebruiken in onze eigen onderzoeksinfrastructuur bestaan er verschillende softwareoplossingen. We hebben gekozen voor het project &#8220;<a href="https://confidentialcontainers.org/">Confidential Containers (CoCo)</a>&#8220;, waarvan de broncode vrij toegankelijk is. Dit project zorgt voor een goede isolatie van de toepassingscontainers en ondersteunt het certificeringsmechanisme op een transparante manier, terwijl de flexibiliteit van de implementatie en de compatibiliteit met het <a href="https://kubernetes.io/">Kubernetes</a>-platform waarop het is gebaseerd, behouden blijven. Elke Kubernetes-pod is geïsoleerd in een zeer lichte Confidential Virtual Machine, om te garanderen dat alleen geautoriseerde applicaties toegang hebben tot gevoelige gegevens.</p>



<p>CoCo&#8217;s bevatten naast de toepassing zelf enkele noodzakelijke softwarecomponenten. Deze maken het mogelijk om de uit te voeren containerimage te downloaden, de verificatie van de certificering te vergemakkelijken en bepaalde beveiligingsbeleidsregels toe te passen. Hun programmeerinterface is relatief klein, vooral vergeleken met een oplossing waarbij een hele Kubernetes-node in een Confidential Virtual Machine wordt geplaatst. Bovendien is de image van de guest-VM statisch en generiek voor alle workloads en zelfs platforms, waardoor het eenvoudiger is om veiligheidsgaranties te bieden. Tegelijkertijd is het makkelijk om dingen te delen tussen containers in dezelfde Kubernetes-pod. De naamruimte van het netwerk van de pod blijft bijvoorbeeld binnen de confidential VM, waardoor de containers daarin zonder extra kosten vertrouwelijk met elkaar kunnen communiceren.</p>



<p>CoCo is gebaseerd op <a href="https://katacontainers.io/">Kata</a>-containers, een ander open source-project, waarmee Kubernetes-pods kunnen worden uitgevoerd binnen zeer lichte Confidential Virtual Machines (zie <a href="#Figuur-1">Figuur 1</a>). CoCo voegt echter twee cruciale componenten toe om vertrouwelijkheid en veiligheid te garanderen (zie <a href="#Figuur-2">Figuur 2</a>).</p>



<ul class="wp-block-list">
<li>De eerste heeft te maken met het <strong>ophalen van containerimages</strong>: deze worden meestal gedownload door de Kubernetes-hoofdnode met behulp van een Container Runtime Interface (CRI) zoals “containerd”, waardoor de images via het bestandssysteem zichtbaar worden voor de hostmachine. Met CoCo worden de images binnen de Confidential Virtual Machine ontsleuteld en uitgepakt, vandaar de noodzaak van de bovengenoemde componenten.</li>



<li>Het tweede onderdeel is het <strong>certificaat</strong>, dat, zoals we al hebben gezien, essentieel is voor het opzetten van een betrouwbare uitvoeringsomgeving. Om bijvoorbeeld een image te ontsleutelen, dient de guest de geheime ontsleutelingssleutel te kunnen verkrijgen, maar deze wordt alleen verstrekt als de guest zijn authenticiteit kan aantonen. Dit is de rol van twee componenten die steunen op een zogenaamd “<em><a href="https://github.com/confidential-containers/trustee">Trustee</a></em>”-systeem, dat buiten de virtuele machine staat en uit twee diensten bestaat: een certificeringsdienst om de vertrouwde runtime te valideren en een key mediation-dienst om de geheime middelen te leveren die de virtuele machine en de toepassing nodig hebben.</li>
</ul>



<figure class="wp-block-image aligncenter size-full is-resized" id="Figuur-1"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture1-Voorbeeld-architectuur.svg"><img decoding="async" src="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture1-Voorbeeld-architectuur.svg" alt="" class="wp-image-26516" style="width:600px"/></a><figcaption class="wp-element-caption">Figuur 1 &#8211; Voorbeeld van een architectuur met twee Kubernetes-nodes en lichte Kata Confidential Virtual Machines, die zelf weer Kubernetes-pods bevatten. Het aan elke virtuele machine toegewezen geheugen wordt direct versleuteld door de microprocessor van node 2. Dit zorgt ervoor dat elke pod niet alleen sterk geïsoleerd is van de andere, maar ook van de kernel van de hostmachine.</figcaption></figure>



<p>CoCo levert dus de basis voor het bouwen van confidential toepassingscontainers door het mogelijk te maken deze containers binnen confidential virtuel machines uit te voeren, waarbij de geëncrypteerde en ondertekende images van de containers, de verzegelde geheimen en andere kenmerken worden beheerd. Elke container of groep containers van dezelfde toepassing kan worden toegewezen aan een confidential virtuele machine, waarbij niet alleen de werklast wordt meegenomen, maar ook processen waarmee de toepassing bepaalde beveiligingsdiensten kan aanroepen. </p>



<figure class="wp-block-image aligncenter size-full is-resized" id="Figuur-2"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture2-CoCo-schematische-weergave.svg"><img decoding="async" src="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture2-CoCo-schematische-weergave.svg" alt="" class="wp-image-26518" style="width:600px"/></a><figcaption class="wp-element-caption">Figuur 2 &#8211; Schematische weergave van een CoCo en zijn omgeving. Door het kubelet-commando te gebruiken om de implementatie van een CoCo te starten, wordt een lichte VM gemaakt met verschillende basisagenten erin. Eén agent zorgt ervoor dat de (versleutelde en ondertekende) image van de app-container wordt gedownload uit een register. De andere zorgen ervoor dat de virtuele machine zich kan authenticeren en de nodige sleutels kan ophalen om de image te ontsleutelen en de handtekening te verifiëren, voordat de container wordt gestart. Gebaseerd op <a href="https://github.com/confidential-containers/confidential-containers/blob/main/images/coco-threat-model.png">dit figuur</a>.</figcaption></figure>



<p>Alles buiten de confidential VM op de host wordt als onbetrouwbaar beschouwd, inclusief de kubelet-tool, de runtime-interface van de containers en de kernel van het besturingssysteem van de host. De uitwisseling van informatie tussen vertrouwde en niet-vertrouwde contexten wordt streng gecontroleerd, met name via dynamische en configureerbare beveiligingsbeleidsregels. Ten slotte wordt de Kubernetes-orkestratie zelf als niet-vertrouwd beschouwd, waardoor de garanties met betrekking tot de planning of de volgorde van uitvoering van de workloads beperkt zijn, met uitzondering van de implementatie ervan in een geauthenticeerde enclave.</p>



<h1 class="wp-block-heading">Conclusie</h1>



<p>Confidential containers maken deel uit van een algemene beveiligingsaanpak, waarbij certificering, verificatie van images en best practices in de softwaretoeleveringsketen worden gecombineerd. Ze maken het mogelijk om use cases eenvoudiger te verwerken dan geavanceerde cryptografie (<em>confidential collaboration, private set intersection, </em>geavanceerde pseudonimisering, enz.). Puristen kunnen natuurlijk aanvoeren dat een oplossing op basis van confidential containers minder veilig is, maar in de praktijk zal deze waarschijnlijk volstaan in een on-premise omgeving, des te meer omdat het veel aspecten vereenvoudigt zodra het eenmaal is geïmplementeerd.</p>



<p>In de volgende blogpost gaan we dieper in op de installatie en het gebruik van confidential CoCo&#8217;s.</p>



<h1 class="wp-block-heading">Referenties</h1>



<p id="ref1">[<a href="https://ref1">1</a>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C. Bômont, “Strategic Brief no.70 &#8211; 2024 &#8211; Extension of the FISA Law European ‘digital sovereignty’ far from American concerns &#8211; IRSEM”, Institut de Recherche Stratégique de l’Ecole Militaire. Geraadpleegd: 9 februari 2026. [Online]. Beschikbaar op: <a href="https://www.irsem.fr/en/strategic-brief-no-70-2024">https://www.irsem.fr/en/strategic-brief-no-70-2024</a></p>



<p id="ref2">[2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. Michels, “Europeans, forget the US Cloud Act… worry about FISA instead (!)”. Geraadpleegd: 1 juli 2025. [Online]. Beschikbaar op: <a href="https://www.linkedin.com/pulse/europeans-forget-us-cloud-act-worry-fisa-instead-dave-michels-anjze">https://www.linkedin.com/pulse/europeans-forget-us-cloud-act-worry-fisa-instead-dave-michels-anjze</a></p>



<p id="ref3">[3]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Paul Kunert, “Microsoft exec admits it ‘cannot guarantee’ data sovereignty”. Geraadpleegd: 9 februari 2026. [Online]. Beschikbaar op: <a href="https://www.theregister.com/2025/07/25/microsoft_admits_it_cannot_guarantee/">https://www.theregister.com/2025/07/25/microsoft_admits_it_cannot_guarantee/</a></p>



<p id="ref4">[4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Rochefort, “Microsoft face au Sénat : l’aveu qui fait vaciller la souveraineté numérique française”, clubic.com. Geraadpleegd: 9 februari 2026. [Online]. Beschikbaar op: <a href="https://www.clubic.com/actualite-573438-microsoft-face-au-senat-l-aveu-qui-fait-vaciller-la-souverainete-numerique-francaise.html">https://www.clubic.com/actualite-573438-microsoft-face-au-senat-l-aveu-qui-fait-vaciller-la-souverainete-numerique-francaise.html</a></p>



<p id="ref5">[5]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. Deridder, “Understanding Sovereignty: Who Rules your Cloud?”, Dirk Deridder. Geraadpleegd: 1 juli 2025. [Online]. Beschikbaar op: <a href="https://dirkderidder.wordpress.com/2025/03/13/understanding-sovereignty-who-rules-your-cloud/">https://dirkderidder.wordpress.com/2025/03/13/understanding-sovereignty-who-rules-your-cloud/</a></p>



<p id="ref6">[6]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F. A. P. Petitcolas, “Informatique confidentielle &#8211; État de l’art”, Smals Research, jul. 2023. [Online]. Beschikbaar op: <a href="https://www.smalsresearch.be/publications/document?docid=269">https://www.smalsresearch.be/publications/document?docid=269</a></p>



<p id="ref7">[7]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F. A. P. Petitcolas, “Introduction à l’informatique confidentielle”, Smals Research. Geraadpleegd: 9 januari 2026. [Online]. Beschikbaar op: <a href="https://www.smalsresearch.be/introduction-a-l-informatique-confidentielle/">https://www.smalsresearch.be/introduction-a-l-informatique-confidentielle/</a></p>



<p id="ref8">[8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F. A. P. Petitcolas, “Outils pour l’informatique confidentielle”, Smals Research. Geraadpleegd: 9 januari 2026. [Online]. Beschikbaar op: <a href="https://www.smalsresearch.be/outils-pour-linformatique-confidentielle/">https://www.smalsresearch.be/outils-pour-linformatique-confidentielle/</a></p>



<p id="ref9">[9]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. De Meulemeester, D. Oswald, I. Verbauwhede, en J. V. Bulck, “Battering RAM: Low-cost interposer attacks on confidential computing via dynamic memory aliasing”, gepresenteerd bij 47th IEEE Symposium on Security and Privacy (S&amp;P), mei 2026.</p>



<p id="ref10">[10]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. Bogdanov, L. Kamm, B. Kubo, R. Rebane, V. Sokk, en R. Talviste, “Students and taxes: a Privacy-preserving study using secure computation”, <em>Proc. </em><em>Priv. Enhancing Technol.</em>, vol. 2016, nr. 3, pp. 117-135, jul. 2016, doi: 10.1515/popets-2016-0019.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>De performance van LLM’s: Een vergelijkende analyse tussen Frans en Nederlands</title>
		<link>https://www.smalsresearch.be/de-performance-van-llms-een-vergelijkende-analyse-tussen-frans-en-nederlands/</link>
		
		<dc:creator><![CDATA[Katy Fokou]]></dc:creator>
		<pubDate>Wed, 04 Mar 2026 15:27:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[chatbot]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/?p=26548</guid>

					<description><![CDATA[Uit onze evaluatie van een RAG-chatbot blijkt er een prestatieverschil te bestaan tussen het Frans en het Nederlands, wat wijst op een aanhoudende uitdaging bij het gebruik van meertalige grote taalmodellen (LLM’s). Dit prestatieverschil kan deels worden verklaard door de beschikbaarheid van de middelen die worden gebruikt om deze modellen te trainen, maar er kunnen ook andere factoren meespelen.]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.smalsresearch.be/performance-des-llm-analyse-comparative-entre-le-francais-et-le-neerlandais/" data-type="link" data-id="https://www.smalsresearch.be/performance-des-llm-analyse-comparative-entre-le-francais-et-le-neerlandais/">Version française</a></p>



<p>Het opmerkelijke meertalige potentieel van grote taalmodellen (LLM’s) heeft bijgedragen aan de brede verspreiding en integratie ervan binnen AI-gebaseerde toepassingen. Er bestaan echter prestatieverschillen tussen het Engels en andere talen, met name talen met beperkte middelen.</p>



<p>Bij de evaluatie van een door ons ontwikkelde <a href="https://www.smalsresearch.be/rag-in-practice-webinar-by-smals-research/">RAG-chatbot</a> stelden we een duidelijk verschil vast in de kwaliteit van de antwoorden, afhankelijk van de gebruikte taal. De chatbot leverde namelijk betere antwoorden in het Frans dan in het Nederlands. De in het Frans gegenereerde antwoorden waren vlotter en betrouwbaarder ten opzichte van de door de gebruiker gevraagde informatie. De antwoorden in het Nederlands waren over het algemeen minder relevant. Deze resultaten wijzen op een cruciale uitdaging bij de ontwikkeling van LLM&#8217;s die door chatbots worden gebruikt: hoewel deze indrukwekkende meertalige capaciteiten hebben, vertonen de huidige modellen vaak een uitgesproken voorkeur voor talen met veel middelen, zoals het Engels.</p>



<p>In deze blogpost beschrijven we de resultaten van ons onderzoek naar de door ons vastgestelde taalkloof en tonen we de bevindingen van ons onderzoek.</p>



<h1 class="wp-block-heading">Prestatieverschil tussen het Engels en de andere talen: oorzaken en factoren</h1>



<p>Verschillende factoren dragen bij aan de taalvoorkeur voor het Engels. Deze omvatten:</p>



<ul class="wp-block-list">
<li><strong>Onevenwichtige datasets:</strong> het trainingsproces van grote taalmodellen is gebaseerd op omvangrijke tekstcorpora, maar deze worden sterk gedomineerd door het Engels, gevolgd door talen met veel taalkundige middelen zoals het Chinees, het Frans en het Spaans. Daarentegen zijn de data in talen met beperkte middelen vaak van mindere kwaliteit vanwege het beperkte aantal bronnen. Dit onevenwicht in de data leidt tot slechte prestaties in andere talen dan het Engels, met hogere foutpercentages en hallucinaties tot gevolg. Om dit probleem op te lossen, maken modelontwikkelaars gebruik van een techniek die “interlinguïstische overdracht” genoemd wordt. Hierbij verbetert een model zijn prestaties in minder goed uitgeruste talen door universele of gedeelde taalkundige patronen af te leiden uit talen met veel middelen. Hoewel het exacte percentage Engelstalige data in propriëtaire modellen niet openbaar bekend is, is 93% van de data die worden gebruikt om GPT-3 te trainen in het Engels. Leveranciers van grote taalmodellen, zoals OpenAI en Google, maken vaak gebruik van het Common Crawl-webgegevensarchief, dat zelf wordt gekenmerkt door een dataset waarin het Engels overheerst (44% in het Engels, 4% in het Frans, 2% in het Nederlands). Deze vertekening wordt nog versterkt in gespecialiseerde domeinen zoals financiën en gezondheidszorg, waar hoogwaardige data bijzonder schaars is. Het is belangrijk op te merken dat het Nederlands wordt beschouwd als een taal met hoge middelen in het domein van automatische natuurlijke taalverwerking (NLP), hoewel het over minder middelen beschikt dan het Frans of het Engels.</li>



<li><strong>Morfologie en tokenisatie:</strong> modelarchitecturen zijn vaak geoptimaliseerd voor het Engels. Tokenisatieprocessen kunnen ingewikkeld zijn voor talen die niet met het Latijns alfabet worden geschreven, zoals het Chinees of het Japans, alsook voor talen met een gemiddelde tot hoge morfologische complexiteit, zoals het Nederlands. Engelse tokenizers kunnen het moeilijk hebben met het verwerken van samengestelde woorden (de combinatie van meerdere zelfstandige naamwoorden in een woord), wat kan leiden tot grammaticaal foute resultaten wanneer modellen tekst genereren.</li>
</ul>



<p>Zeer weinig studies hebben de prestaties geanalyseerd van grote taalmodellen in het Frans en het Nederlands. Een onderzoek naar de taalkundige kwaliteit van LLM’s in deze twee talen bracht aan het licht dat de prestaties algemeen beter waren in het Frans dan in het Nederlands, in het bijzonder bij taken waarbij tekst moest worden gegenereerd [1]. Een ander onderzoek rapporteerde betere prestaties van LLM’s in het Engels in vergelijking met het Nederlands bij een vraag-antwoordtaak [2].</p>



<p>In de industrie blijven er grote uitdagingen bestaan met betrekking tot de toepassing van grote taalmodellen op niet-Engelse technische domeinen, met name in de medische en financiële sector. De huidige implementaties vereisen vaak een verfijning van de vooraf getrainde modellen zoals Mistral en Llama om bevredigende prestaties te bereiken.</p>



<p>Een andere bekende uitdaging bij de toepassing van AI-modellen in de Nederlandse taalomgeving is spraakherkenning. Dit is grotendeels een gevolg van de grote variatie in regionale accenten. Onze experimenten met het transcriberen van opnames van Teams-vergaderingen hebben aangetoond dat de Franse transcripties systematisch van betere kwaliteit waren dan de Nederlandse. Gespecialiseerde tools zoals <a href="https://www.sembly.ai/">Sembly</a> leveren echter acceptabele transcriptieresultaten in het Nederlands.</p>



<h1 class="wp-block-heading">Vergelijkende analyse van de prestaties van het Nederlands en het Frans in een chatbot</h1>



<p>Er is een vergelijkende analyse van de prestaties uitgevoerd op een chatbot die is ontwikkeld om vragen van burgers te beantwoorden. Voor de eerste evaluatie van de chatbot hebben we een reeks vragen gebruikt die door experts zijn opgesteld. Deze vragen werden in het Frans en het Nederlands aan de chatbot voorgelegd, waarna de antwoorden door dezelfde expert werden beoordeeld en door twee andere personen werden gecontroleerd. Uit de eerste evaluatie blijkt een aanzienlijk verschil in prestaties tussen de twee talen: de chatbot behaalde een nauwkeurigheid van 95% in het Frans, tegenover 82% in het Nederlands.</p>



<p>Na de implementatie van de chatbot in een productieomgeving werd een tweede evaluatiefase uitgevoerd op basis van vragen die door gebruikers waren ingediend en in een database waren opgeslagen. We merkten opnieuw een verschil in prestaties: 82% nauwkeurigheid in het Frans en 69% in het Nederlands.</p>



<p>Verschillende factoren kunnen bijdragen aan deze waargenomen verschillen, waaronder:</p>



<ul class="wp-block-list">
<li>de vooringenomenheid van de beoordelaars – beoordelaars zijn minder of meer streng in hun beoordelingen;</li>



<li>de variatie in het soort vragen (dubbelzinnig, slecht geformuleerd, niet ter zake) – dezelfde vragen werden niet systematisch in beide talen beoordeeld;</li>



<li>het kwaliteitsverschil bij het ophalen van de bronnen (<em>retrieval</em>) – er zijn verschillen tussen de talen in de data-bronnen die worden opgehaald om de generatie te voeden;</li>



<li>de intrinsieke capaciteiten van het generatieve model (GPT-4o) in beide talen.</li>
</ul>



<p>Er was dus aanvullend onderzoek nodig om de waargenomen verschillen in het Frans en het Nederlands volledig te begrijpen en deze factoren te verminderen.</p>



<h3 class="wp-block-heading"><strong>Test</strong></h3>



<p>Om de prestaties van LLM&#8217;s in zowel het Frans als het Nederlands grondig te evalueren, werd een experiment uitgevoerd met de chatbot. We selecteerden een aantal vragen waarvan de eerdere antwoorden van LLM&#8217;s als onjuist waren beoordeeld, waarbij we ervoor zorgden dat de vragen niet te complex of te simplistisch waren. Het was van cruciaal belang dat elke vraag van een gebruiker tussen het Frans en het Nederlands werd vertaald om een directe vergelijking te vergemakkelijken. Bij het evaluatieproces waren twee onafhankelijke evaluatoren betrokken, een vakexpert en een technisch expert, om vooringenomenheid te beperken en een robuuste evaluatie te garanderen. De evaluatoren beoordeelden de nauwkeurigheid, relevantie en vlotheid van de gegenereerde antwoorden. Daarnaast werden ook andere modellen dan GPT-4o getest.</p>



<p>Naast de tests in het Nederlands en het Frans hebben we ook een test uitgevoerd waarbij vragen in het Nederlands naar het Engels werden vertaald. De antwoorden werden in het Engels gegenereerd en vervolgens opnieuw naar het Nederlands vertaald.</p>



<h3 class="wp-block-heading"><strong>Resultaten</strong></h3>



<p><em>Vraag in het Nederlands, antwoord in het Engels</em></p>



<p>Het experiment waarbij vragen in het Nederlands naar het Engels werden vertaald en hierna de antwoorden naar het Nederlands werden vertaald leverde een genuanceerd resultaat. Hoewel de vertaling van Nederlandstalige vragen naar het Engels leidde tot ietwat betere antwoorden, van 67% naar 73%, verslechterde de kwaliteit van de antwoorden bij het omgekeerde proces, namelijk het vertalen van de gegenereerde Engelse antwoorden naar het Nederlands.</p>



<p><em>Nauwkeurigheid van Franse antwoorden versus nauwkeurigheid van Nederlands antwoorden</em></p>



<p>Tijdens ons experiment hebben we de antwoorden gegenereerd op basis van Nederlandstalige vragen vergeleken met hun Franse equivalenten in verschillende tekstreeksen. We hebben vastgesteld dat de samenstelling van deze reeksen een invloed had op de evaluatie van het model. De scores varieerden namelijk van set tot set voor elk model en elke taal, en de prestatieverschillen tussen de talen kwamen niet altijd tot uiting. Dit onderstreept het belang van het selectieproces van de testvragen: voor onze laatste test hebben we een evenwichtige testset samengesteld met voorbeelden van vragen die door gebruikers in beide talen zijn ingediend en vragen die door domeinexperts zijn opgesteld. In tegenstelling tot wat aanvankelijk werd waargenomen, laten de onderstaande resultaten slechts een klein verschil in nauwkeurigheid zien tussen het Frans en het Nederlands <strong>voor onze use case</strong>.</p>



<p>Tabel 1. Resultaten van de eindevaluatie van de chatbot.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>&nbsp;</td><td><strong>Maximale score</strong><strong></strong></td><td><strong>GPT-5 (OpenAI)</strong><strong></strong></td><td><strong>Gemini (Google)</strong><strong></strong></td><td><strong>o3 (OpenAI)</strong><strong></strong></td><td><strong>Beste score (Gemini)</strong><strong></strong></td></tr><tr><td><strong>FR</strong><strong></strong></td><td>60</td><td>44</td><td><strong>46</strong><strong></strong></td><td>32</td><td><strong>77%</strong><strong></strong></td></tr><tr><td><strong>NL</strong><strong></strong></td><td>60</td><td>38</td><td><strong>43</strong><strong></strong></td><td>32</td><td><strong>72%</strong><strong></strong></td></tr></tbody></table></figure>



<p><em>Opmerking: slecht geformuleerde vragen in het Frans of Nederlands werden uit de testset verwijderd omdat ze moeilijk nauwkeurig in de andere taal te vertalen bleken.</em><em></em></p>



<p><em>Vergelijking van de LLM&#8217;s</em></p>



<p>GPT-5 presteerde goed op het vlak van nauwkeurigheid en beknoptheid. Het vertoonde echter een groter verschil in nauwkeurigheid tussen het Frans en het Nederlands dan de andere modellen. Gemini presteerde weliswaar beter in zowel het Frans als het Nederlands, maar genereerde aanzienlijk langere antwoorden, wat leidde tot een hoger tokengebruik. We hebben ook vastgesteld dat Claude Sonnet, met een vergelijkbare nauwkeurigheid als Gemini, soms Engelse termen invoegde in het gegenereerde antwoord, en dit vaker in het Nederlands dan in het Frans. Na evaluatie concludeerden de experts op dit gebied dat Gemini het meest geschikte model was voor hun use case.</p>



<p><em>Effect van de retrieval</em></p>



<p>Het proces van <a href="https://www.smalsresearch.be/betere-zoekresultaten-met-vector-databases/">retrieval</a> bestaat erin om relevante tekstfragmenten te extraheren om een vraag te beantwoorden vanuit de vector database, afhankelijk van de gelijkenis tussen de vraag en deze fragmenten. Deze gelijkenis wordt berekend met behulp van vectorrepresentaties van de teksten, gegenereerd door een <em>embeddingmodel</em>. We hebben vragen geanalyseerd die aanvankelijk betere resultaten opleverden in het Frans dan in het Nederlands en hebben vastgesteld dat ongeveer 50% van de opgehaalde informatie (context) in beide talen voorkwam. Om de impact van de resterende 50% afwijkende informatie te evalueren, hebben we het model (Gemini) aan identieke contexten onderworpen om zowel Franstalige als Nederlandstalige antwoorden te genereren. Ondanks het gebruik van deze identieke contexten bleef het model prestatieverschillen vertonen tussen het Frans en het Nederlands. Het retrievalproces lijkt dus een beperkte invloed te hebben op het waargenomen prestatieverschil tussen de twee talen.</p>



<h1 class="wp-block-heading">Conclusie en aanbevelingen</h1>



<p>Het prestatieverschil tussen het Nederlands en het Engels in grote taalmodellen is een vaststaand feit, dat geworteld is in de overweldigende dominantie van het Engels in de trainingscorpora. Dit verschil wordt nog versterkt door de specifieke morfologie van het Nederlands. Ter vergelijking: als LLM&#8217;s over het algemeen betere resultaten opleveren in het Frans, is dat te danken aan een betere vertegenwoordiging van de taal in de trainingscorpora.</p>



<p>Ons experiment heeft waardevolle informatie opgeleverd over de prestaties van LLM&#8217;s in een RAG-toepassing (Retrieval Augmented Generation) in het Nederlands en het Frans. Hoewel we aanvankelijk een significant verschil in nauwkeurigheid tussen de antwoorden in het Nederlands en de antwoorden in het Frans constateerden, bleek uit grondig onderzoek dat andere factoren dan de capaciteit van het model de resultaten konden beïnvloeden. Het prestatieverschil is dus minder groot dan we dachten. Bovendien hebben we vastgesteld dat variaties in de samenstelling van de testset kleine schommelingen in de resultaten veroorzaakten. Deze conclusies tonen aan dat de prestaties van LLM&#8217;s zeer gevoelig zijn voor de context en de specifieke formulering van de vragen. We hebben ook een lichte kwaliteitsverbetering&nbsp; van de antwoorden waargenomen bij de Engelse vertaling van Nederlandstalige vragen; dit voordeel werd echter grotendeels tenietgedaan door de daaropvolgende Nederlandse vertaling van deze Engelse antwoorden.</p>



<p>De bovenstaande conclusies gelden voor een chatbot die zorgvuldig opgestelde inhoud in algemene taal gebruikt om vragen te beantwoorden. Ze zijn niet noodzakelijkerwijs van toepassing op andere use cases. Het is daarom essentieel om voor elk geval grondige evaluaties uit te voeren, zeker wanneer men in specifieke domeinen zoals gezondheidszorg, financiën, recht, enzovoort werkt.</p>



<p><strong>Moeten we een eentalig model gebruiken?</strong></p>



<p>We hebben deze vraag niet grondig kunnen onderzoeken. Ons literatuuronderzoek heeft geen overtuigend bewijs opgeleverd dat LLM&#8217;s voor het Nederlands de prestaties verbeteren; integendeel, de aanwezigheid van talen met veel bronnen in meertalige modellen lijkt de prestaties van minder goed bedeelde talen tot op zekere hoogte te verbeteren. Er zijn echter verschillende initiatieven genomen om LLM&#8217;s voor het Nederlands te ontwikkelen. De meest opvallende zijn:</p>



<p>&#8211; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GEITje: model gebaseerd op Mistral 7B en verfijnd voor het Nederlands. Dit model is niet langer beschikbaar vanwege auteursrechtelijke problemen.</p>



<p>&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="https://gpt-nl.nl/gpt-nl/">GPT-NL</a>: lopend initiatief, ondersteund door Nederland, om een LLM te ontwikkelen die is aangepast aan de Nederlandse taal en cultuur.</p>



<p>Referenties</p>



<ol class="wp-block-list">
<li><a href="https://aclanthology.org/2024.humeval-1.2/">Exploratory Study on the Impact of English Bias of Generative Large Language Models in Dutch and French</a>&nbsp;(Rigouts Terryn &amp; de Lhoneux, HumEval 2024)</li>



<li><a href="https://documentserver.uhasselt.be/bitstream/1942/46335/1/__TRBWS07_FileUploads_2024%20AM%20Presentations_23064_Presentation-137767_23064_TRBAM-25-02712_2025-02-03-05-58-09.pdf">Performance of Large Language Models in Domain-Specific and Underrepresented Languages: A Case Study on the Transportation Domain and Dutch Language</a> (UHasselt)</li>



<li><a href="https://arxiv.org/pdf/2303.12528">MEGA: Multilingual Evaluation of Generative AI</a> (Ahuja et al., 2023)</li>



<li><a href="https://arxiv.org/html/2410.12835v1">A Dutch Financial Large Language Model</a> (Sander Noels, Jorne De Blaere &amp; Tijl De Bie, 2024)</li>



<li><a href="https://blog.premai.io/multilingual-llms-progress-challenges-and-future-directions/">Multilingual LLMs: Progress, Challenges, and Future Directions</a> (PremAI blogpost)</li>



<li><a href="https://hogent-cads.github.io/blog/posts/vlaamse-spraakherkenning/">https://hogent-cads.github.io/blog/posts/vlaamse-spraakherkenning/</a> (HoGent blogpost)</li>



<li><a href="https://www.smalsresearch.be/rag-in-practice-webinar-by-smals-research/">Webinar Smals Research – Generatieve AI: verder dan de hype | Smals Research</a></li>
</ol>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Made by Smals Research &#8211; Privacyvriendelijk Kruisen van Persoonsgegevens</title>
		<link>https://www.smalsresearch.be/innovatiesmals-privacyvriendelijk-kruisen-van-persoonsgegevevens/</link>
		
		<dc:creator><![CDATA[Kristof Verslype]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 06:30:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Privacy by design]]></category>
		<category><![CDATA[privacy-enhancing technologies]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=26251</guid>

					<description><![CDATA[In samenwerking met internationaal toonaangevende universiteiten werkte Smals aan een prototype om met behulp van geavanceerde cryptografie het pseudonimiseren en kruisen van persoonsgegevens voor secundaire doeleinden aanzienlijk te vereenvoudigen.]]></description>
										<content:encoded><![CDATA[
<p><em>Cet article est aussi disponible&nbsp;en&nbsp;<a href="/innovationsmals-croisement-des-donnees-a-caractere-personnel-dans-le-respect-de-la-vie-privee/">français</a>.</em></p>



<p>Digitale persoonsgegevens vormen <span data-olk-copy-source="MessageBody">binnen een overheidscontext</span> een bron van inzichten die innovatie, welzijn en beleidsvorming ten goede komen. Die persoonsgegevens zijn over heel wat organisaties verspreid; de ene organisatie heeft informatie over kanker, de andere over medicijngebruik en nog een andere bewaart inkomensgegevens. In de praktijk worden geregeld persoonsgegevens afkomstig van verschillende organisaties samengevoegd om op specifieke vragen van onderzoekers en beleidsmakers te kunnen antwoorden.</p>



<p>De huidige processen garanderen dat dit met respect voor de privacy gebeurt. Helaas is het – mede daardoor – ook te vaak een complexe, dure en tijdrovende aangelegenheid. In samenwerking met internationaal toonaangevende universiteiten werkte Smals Research daarom aan een prototype om met behulp van geavanceerde cryptografie deze processen aanzienlijk te vereenvoudigen.</p>



<h1 class="wp-block-heading">Probleemstellig op basis van concrete case</h1>



<p>We vertrokken van een <a href="https://www.ehealth.fgov.be/ehealthplatform/file/cc73d96153bbd5448a56f19d925d05b1379c7f21/5749691d1687866fa0e6852fe4536cb54f2bf4ad/20-020-n042-behandeling-herstellende-multiple-sclerose.pdf">concrete onderzoeksvraag</a>:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Lopen MS-patiënten die medicijnen met de moleculen teriflunomide of alemtuzumab gebruiken een verhoogd risico op kanker in vergelijking met MS-patiënten die met andere medicijnen worden behandeld?</p>
</blockquote>



<p>Om die – op zich eenvoudige – vraag te kunnen beantwoorden moeten medische gegevens over MS-patiënten afkomstig van twee organisaties, met name het <a href="https://kankerregister.org/nl">Belgisch Kankerregister (BCR)</a> en het <a href="https://www.ima-aim.be/">InterMutualistisch Agentschap (IMA)</a> gekruist worden.</p>



<p>Beide organisaties beheren de gegevens onder aparte pseudoniemen voor meer privacy; unieke codes ter vervanging van rijksregisternummers.</p>



<ul class="wp-block-list">
<li>Het BCR beheert gegevens met betrekking tot kanker over mensen die een kankerdiagnose kregen. Het BCR weet niet welke records betrekking hebben op MS-patiënten.</li>



<li>Het IMA kent gegevens m.b.t. voorgeschreven medicijnen en kan de records selecteren van MS-patiënten.</li>
</ul>



<p>De onderzoekers dienen in een beveiligde omgeving (<a href="https://www.european-health-data-space.com/European_Health_Data_Space_Article_50_(Proposal_3.5.2022).html">SPE = Secure Processing Environment</a>) toegang te krijgen tot gegevens afkomstig van het BCR en het IMA, over alle MS-patiënten. Gegevens over dezelfde patiënt maar afkomstig van verschillende bronnen moeten aan elkaar gekoppeld kunnen worden op basis van een uniek pseudoniem dat enkel gebruikt wordt in het kader van die specifieke onderzoeksvraag. Dit wordt geïllustreerd in figuur 1.</p>



<figure class="wp-block-image aligncenter wp-image-24710"><a href="https://staging.smalsresearch.be/wp-content/uploads/2025/12/set.png"><img loading="lazy" decoding="async" width="598" height="154" src="https://staging.smalsresearch.be/wp-content/uploads/2025/12/set.png" alt="" class="wp-image-24710" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/set.png 598w, https://www.smalsresearch.be/wp-content/uploads/2025/12/set-300x77.png 300w" sizes="auto, (max-width: 598px) 100vw, 598px" /></a><figcaption class="wp-element-caption">Figuur 1: Links de verzameling van MS-patiënten, rechts de verzameling van burgers die de kankerdiagnose kregen. Enkel gegevens over burgers in de twee groene regio&#8217;s mogen aan de beveiligde omgeving gepseudonimiseerd prijsgegeven worden.&nbsp;</figcaption></figure>



<p>De centrale vraag luidt als volgt:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Hoe kan het BCR <u>enkel </u>records over MS-patiënten aanleveren aan de beveiligde omgeving zonder te weten te komen wie MS heeft of welke records die het beheert betrekking hebben op MS-patiënten?</em></p>
</blockquote>



<p>In een klassieke benadering zal ofwel het BCR te veel informatie naar de beveiligde omgeving sturen – met name gegevens over elke kankerpatiënt – ofwel lekt er informatie naar het BCR – waarbij het BCR te weten komt welke records betrekking hebben op MS-patiënten. Een laatste mogelijkheid is het inschakelen van een vertrouwde centrale partij die weliswaar persoonsgegevens te weten komt, maar vertrouwd wordt daar niets onrechtmatigs mee te doen.</p>



<p>Geen van deze aanpakken is ideaal. Vandaag wordt in binnen- en buitenland ofwel beroep gedaan op – sterk gereguleerde – centrale partijen ofwel is duur en traag maatwerk vereist, waarbij voor elke onderzoeksvraag een nieuwe flow uitgetekend, gevalideerd en uitgevoerd wordt om de privacy maximaal te beschermen.</p>



<p>We geven nog mee dat de onderzoeker doorgaans toegang nodig heeft tot de ruwe data, waardoor oplossingen gebaseerd op <a href="https://www.smalsresearch.be/secure-multiparty-computation-collectieve-berekeningen-op-verspreide-gevoelige-gegevens/">secure multi-party computation</a> ongeschikt zijn.&nbsp;</p>



<h1 class="wp-block-heading">Ons voorstel tot oplossing</h1>



<p>Laat ons even vertrekken van een fictief scenario waarbij gewerkt wordt met een vertrouwde intermediaire partij en het – voor de eenvoud – IMA en BCR de persoonsgegevens niet onder pseudoniemen beheren, maar onder rijksregisternummers. IMA en BCR sturen beiden alle gegevens die potentieel relevant zijn naar de vertrouwde tussenpartij. </p>



<p>Het BCR stuurt naar de intermediaire partij geïdentificeerde kankergegevens over <em>alle</em> burgers die de kankerdiagnose kregen, wat uiteraard veel meer is dan nodig voor de onderzoeker. De intermediaire partij krijgt ook alle geïdentificeerde medicatiegegevens over MS-patiënten van het IMA en weet op basis daarvan welke door het BCR aangeleverde records betrekking hebben op MS-patiënten en dus relevant zijn in het kader van de onderzoeksvraag. De intermediaire partij voert nu de volgende stappen uit:</p>



<ol class="wp-block-list">
<li>Het verwijdert de niet relevante records, dus de records over alle burgers die de kankerdiagnose kregen maar geen MS hebben.</li>



<li>Het voegt records over dezelfde burgers samen en vervangt in de samengevoegde records de rijksregisternummers door unieke pseudoniemen</li>



<li>Het stuurt het resultaat &#8211; enkel samengevoegde records &#8211; naar de <a href="https://www.european-health-data-space.com/European_Health_Data_Space_Article_50_(Proposal_3.5.2022).html">beveiligde omgeving</a>.</li>



<li>Het verwijdert alle ontvangen en afgeleide gegevens.</li>
</ol>



<p>In dit scenario zijn er geen onbedoelde datalekken naar de databronnen en ontvangt de beveiligde omgeving enkel de minimaal noodzakelijke, gepseudonimiseerde persoonsgegevens.</p>



<p>Ons prototype doet exact dit, maar dan <strong>zonder de vertrouwde partij</strong>. De rol van de vertrouwde partij wordt gedistribueerd: <em>Data holders</em> &#8211; in dit geval het IMA en het BCR &#8211; en een <em>data collector</em> &#8211; in dit geval de beveiligde omgeving &#8211; interageren met elkaar om samen de rol van de vertrouwde partij over te nemen. Daarbij worden de veiligheidseigenschappen uit de vorige paragraaf behouden; er lekt dus niet onbedoeld informatie naar de data holders en de data collector komt enkel de minimaal noodzakelijke gepseudonimiseerde gegevens te weten. De oplossing blijft niettemin praktisch en efficiënt. Dit alles is mogelijk dankzij geavanceerde cryptografie.</p>



<p>We schreven eerder dat het IMA en het BCR de data bewaren onder pseudoniemen. Er bestaan procedures om die op een gecontroleerde wijze om te zetten in rijksregisternummers. De partij die data beheert komt daarbij nooit rijksregisternummers te weten en de partij die pseudoniemen kan koppelen aan rijksregisternummers heeft op geen enkel moment toegang tot de eigenlijke persoonsgegevens. Om redenen van eenvoud gaan we er de rest van dit artikel vanuit dat de data holders de data kennen onder rijksregisternummers. Ons concept kan ook op een veilige manier overweg weg met de meer realistische situaties waarbij dit niet het geval is.</p>



<h1 class="wp-block-heading">In de praktijk</h1>



<p><a href="https://www.smalsresearch.be/wp-content/uploads/2025/12/Wilhelm_Wandschneider_-_Lethe_Modell.jpg"><img loading="lazy" decoding="async" width="150" height="106" class="alignright size-medium wp-image-23397" src="https://www.smalsresearch.be/wp-content/uploads/2025/12/Wilhelm_Wandschneider_-_Lethe_Modell.jpg" alt=""></a>Smals Research werkte samen met academische partners het concept uit. Initieel luisterde het naar de naam <em>Oblivious Join</em>, maar in academische context werd het herdoopt naar <em>LetheLink</em>. <a href="https://nl.wikipedia.org/wiki/Lethe_(mythologie)">Lethe</a> (Λήθη) is in de Griekse mythologie de godin van de vergetelheid en een van de vijf rivieren in de onderwereld, waaruit de doden drinken om hun aardse leven te vergeten. Ondanks die vergetelheid &#8211; of beter, gebrek aan kennis &#8211; slagen de interagerende partijen er toch in de noodzakelijke data aan elkaar te linken. Centraal in de ontwikkeling van dit concept stonden gebruiksvriendelijkheid en efficiëntie.</p>



<p>Smals Research heeft een demonstreerbaar prototype uitgewerkt dat alvast een zicht geeft op hoe een enterprise-ready oplossing zou kunnen werken. Het gebruik van het prototype wordt geïllustreerd in figuur 2 en bestaat uit de volgende stappen:</p>



<ol class="wp-block-list">
<li><strong>Creatie JSON-bestand.</strong> Een organisatie die als aanspreekpunt kan dienen (vb, de <a href="https://www.hda.belgium.be/nl">HDA</a> of de <a href="https://www.ksz-bcss.fgov.be/nl">KSZ</a>) krijgt een vraag binnen van een onderzoeker. Wanneer de juridische basis voor deze gegevensverwerking er is, stelt deze organisatie een digitaal ondertekend JSON-bestand op. Dat bestand bevat in een gestructureerde vorm alle informatie om het protocol voor het beveiligd kruisen van de gegevens van de data holders op een correcte manier uit te kunnen voeren: connectiegegevens van de clients van zowel data holders als de data collector, de cryptografische parameters, publieke sleutels, informatie over welke data holder welke data moet aanleveren, etc. In de praktijk zal men vertrekken van templates, van waaruit met een minimale inspanning JSON-bestanden afgeleid kunnen worden.</li>



<li><strong>Distributie JSON-bestand.</strong> Dit JSON-bestand wordt bezorgd aan zowel de data collector als de data holders. Allen verifiëren de digitale handtekening. Alle betrokken partijen weten nu hoe ze het protocol moeten uitvoeren en hoe ze de andere betrokken partijen veilig kunnen contacteren.</li>



<li><strong>Downloaden client.</strong> Indien dit nog niet gebeurd is, downloaden de data collector en data holders de LetheLink client.</li>



<li><strong>Creatie CSV-bestanden.</strong> Op basis van het JSON-bestand genereert elke data holder een CSV-bestand die alle potentieel relevante geïdentificeerde data bevat. In de eerder geschetste use case zou dit voor het SKR alle gevraagde geïdentificeerde informatie bevatten over alle burgers die de kankerdiagnose kregen. De creatie van dit bestand valt buiten de scope van LetheLink. In ons prototype worden enkel CSV-bestanden ondersteund, maar dit kan uitgebreid worden.</li>



<li><strong>Invoer client.</strong> Elke participant geeft het JSON-bestand als invoer aan zijn lokale LetheLink client. De data holders geven daarnaast ook hun lokaal gegenereerde CSV-bestand aan hun client. Data worden in klaar aangeleverd en de client neemt de versleuteling op zich.</li>



<li><strong>Uitvoering protocol.</strong> Het protocol wordt uitgevoerd. Dit resulteert aan de kant van de data collector (SPE) in een CSV bestand dat enkel de gepseudonimiseerde, minimaal noodzakelijke gegevens bevat. &nbsp;</li>
</ol>



<figure class="wp-block-image aligncenter"><a href="https://staging.smalsresearch.be/wp-content/uploads/2025/12/gebruik-1.png"><img loading="lazy" decoding="async" width="1024" height="572" src="https://staging.smalsresearch.be/wp-content/uploads/2025/12/gebruik-1-1024x572.png" alt="" class="wp-image-24742" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/gebruik-1-1024x572.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/12/gebruik-1-300x168.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/12/gebruik-1-768x429.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/12/gebruik-1-1536x858.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2025/12/gebruik-1-2048x1144.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 2. Overzicht van het gebruik van LetheLink in de praktijk</figcaption></figure>



<p>Het voordeel van deze benadering is de flexibele inzetbaarheid. Er zijn data holders die maar heel af en toe in dergelijke kruisingsprojecten betrokken zijn en niet alle data holders beschikken over evenveel middelen. Dankzij de LetheLink benadering zijn geen grote investeringen of voorbereidingen nodig. De installatie van de client en creatie van de CSV file volstaan.</p>



<p>Figuur 3 geeft een fictief voorbeeld van dergelijke CSV bestanden. Bovenaan staan extracten van CSV bestanden&nbsp; die de – in dit geval drie – data holders elk als invoer aan hun LetheLink client geven. Onderaan de figuur is een extract te zien van het CSV bestand dat de client van de data collector als output genereert als resultaat van de protocoluitvoering. In ons fictieve voorbeeld is de onderzoeker enkel geïnteresseerd in data in de doorsnede; dus in data over de 50 000 MS-patiënten die de kankerdiagnose kregen en een hoog risicoprofiel hebben. De persoon met rijksregisternummer 60.01.05-045.05 behoort tot die groep. De data collector ziet de gecombineerde informatie over deze burger, niet onder dit rijksregisternummer, maar onder het pseudoniem “153807…”.</p>



<figure class="wp-block-image aligncenter"><a href="https://staging.smalsresearch.be/wp-content/uploads/2025/12/fictional_data-1.png"><img loading="lazy" decoding="async" width="1024" height="574" src="https://staging.smalsresearch.be/wp-content/uploads/2025/12/fictional_data-1-1024x574.png" alt="" class="wp-image-24717" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/fictional_data-1-1024x574.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/12/fictional_data-1-300x168.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/12/fictional_data-1-768x430.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/12/fictional_data-1-1536x860.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2025/12/fictional_data-1-2048x1147.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 3. Fictief voorbeeld met exctracten van drie input CSV bestanden (boven) en het resulterende output bestand (onder)</figcaption></figure>



<h1 class="wp-block-heading">Performantie</h1>



<p>In het kader van de academische samenwerking werd de performantie in meerdere iteraties grondig verbeterd, zowel op het niveau van het algoritme, als op het niveau van de implementatie. De voornaamste testresultaten zijn weergegeven in tabel 1. Een beetje duiding:</p>



<ul class="wp-block-list">
<li>De testen werden uitgevoerd op op AWS EC2 r7i.8xlarge VMs, met 32 vCPU&#8217;s (Intel Xeon Platinum 8588C @ 3.2 GHz) en 256 GB RAM.</li>



<li>Er wordt een onderscheid gemaakt tussen een uitvoering op een LAN aan een snelheid van 1 Gbps en op een WAN aan een snelheid van 150 Mbps.</li>



<li>De variable <em>m</em> representeert het aantal records dat door elk van de databronnen meegegeven wordt. Het is in onze testen minimaal 2<sup>16</sup> = 65 536 en maximaal 2<sup>24</sup> = 16 777 216. In werkelijkheid is het aantal records uiteraard verschillend per databron, maar deze resultaten geven alvast een bovengrens.</li>



<li>De variable κ (kappa) representeert het computationele veiligheidsniveau. 128 bit security volstaat vandaag, al wordt voor data die lange tijd gevoelig blijft toch 192 of zelfs 256 bit security aanbevolen. De variable λ (lambda) representeert de corresponderende statistische veiligheidsparameter.&nbsp;</li>



<li>De variabele <em>n</em> representeert het aantal data holders. We deden testen met 3, 5 en 7 data holders, maar er zijn geen technische beperkingen voor een veel groter aantal.</li>
</ul>



<figure class="wp-block-image aligncenter"><a href="https://www.smalsresearch.be/wp-content/uploads/2025/12/results.png"><img loading="lazy" decoding="async" width="1024" height="255" src="https://www.smalsresearch.be/wp-content/uploads/2025/12/results-1024x255.png" alt="" class="wp-image-24718" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/results-1024x255.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/12/results-300x75.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/12/results-768x191.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/12/results-1536x382.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2025/12/results.png 1713w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption"><em>Performantieresultaten (in seconden) van het LetheLink prototype</em></figcaption></figure>



<p>Nu we weten hoe deze tabel te interpreteren, zien we dat er bijvoorbeeld 25 seconden nodig zijn om het protocol uit te voeren waarbij drie databronnen elk 1 miljoen (2<sup>20</sup>) records aanleveren over een WAN, met een veiligheidsniveau van 256 bits. De hoeveelheid meegeleverde data heeft eveneens impact op de uitvoeringstijd, maar daarvoor verwijzen we naar tabel 3 in onze gemeenschappelijke <a href="https://arxiv.org/abs/2512.08558">publicatie</a>. <strong>Samengevat zijn zowel het protocol als de implementatie ervan bijzonder efficiënt. </strong>Figuur 4 geeft, ter afronding, een sfeerbeeld van het uitvoeren van de testen.</p>



<figure class="wp-block-image aligncenter"><a href="https://www.smalsresearch.be/wp-content/uploads/2025/12/1000014576-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="611" src="https://www.smalsresearch.be/wp-content/uploads/2025/12/1000014576-1024x611.jpg" alt="" class="wp-image-24721" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/1000014576-1024x611.jpg 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/12/1000014576-768x459.jpg 768w, https://www.smalsresearch.be/wp-content/uploads/2025/12/1000014576-2048x1223.jpg 2048w, https://www.smalsresearch.be/wp-content/uploads/2025/12/1000014576-300x179.jpg 300w, https://www.smalsresearch.be/wp-content/uploads/2025/12/1000014576-1536x917.jpg 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 4. Sfeerbeeld bij het uitvoeren van de testen</figcaption></figure>



<h1 class="wp-block-heading">Verhouding tot eHealths Blinde Pseudonimiseringsdienst</h1>



<p>Smals Research ontwikkelde in de periode 2021-2022 de <a href="https://www.smalsresearch.be/basisprincipes-voor-een-moderne-pseudonimiseringsdienst/">blinde pseudonimiseringsdienst voor eHealth</a>. Daarmee kunnen rijksregisternummers omgezet worden in pseudoniemen – unieke codes – en vice versa. Die omzetting gebeurt door een pseudonimiseringsdienst die echter blind is: het ziet rijksregisternummers noch pseudoniemen. Deze dienst kan <a href="https://www.smalsresearch.be/kruisen-van-persoonsgegevens-met-ehealths-blinde-pseudonimiseringsdienst-2/">eveneens</a> gebruikt worden om gegevens te pseudonimiseren én te kruisen. Wat zijn dan de verschillen?</p>



<ul class="wp-block-list">
<li><strong>Status.</strong> De blinde pseudonimiseringsdienst staat reeds in productie, terwijl LetheLink slechts een prototype is.</li>



<li><strong>Datalekkage.</strong> Voor complexere kruisingsprojecten, zoals diegene waar in dit artikel van vertrokken wordt, zal de blinde pseudonimiseringsdienst niet altijd kunnen verhinderen dat er datalekken optreden. Met name zal er sprake zijn van gegevenslekkage wanneer een databron niet autonoom kan bepalen welke records relevant zijn om de onderzoeksvraag te kunnen beantwoorden. Afhankelijk van de use case kan dit gaan om een aanvaardbaar residuele datalekkage, of het kan gaan over meer substantiële datalekken, die effectief de privacy van betrokkenen aantasten. Anderzijds ontstaan er bij LetheLink risico&#8217;s wanneer één entiteit zowel data holder als data collector is.</li>



<li><strong>Snelheid.</strong> eHealths blinde pseudonimiseringsdienst is weliswaar erg snel – het kan duizenden conversies per seconde aan -, maar LetheLink is bliksemsnel – het doet tienduizenden conversies per seconde en onder bepaalde omstandigheden kan het over de honderduizend gaan. Veel zal natuurlijk afhangen van de gebruikte infrastructuur.</li>



<li><strong>Infrastructuur.</strong> eHealths blinde pseudonimiseringsdienst is sowieso een centrale entiteit die over voldoende capaciteit moet beschikken. LetheLink daarentegen is gedistribueerd, waardoor een dergelijke centrale partij niet langer vereist is: het volstaat dat elke partij de LetheLink client draait op zijn bestaande machines. Dat kunnen zelfs reguliere laptops zijn.</li>



<li><strong>Integratie.</strong> Om gebruik te maken van de blinde pseudonimiseringsdienst moet een organisatie logica integreren in zijn clienttoepassing. Uit ervaring weten we dat dit gelukkig relatief eenvoudig is, maar het blijft niettemin een investering. LetheLink is een standalone client en dus is er geen integratietraject nodig.</li>



<li><strong>Type aanvragen.</strong> eHealths blinde pseudonimiseringsdienst kan overweg met zowel batch aanvragen als met aanvragen die in real-time afgehandeld moeten worden. LetheLink kan enkel overweg met verwerkingen in batch.</li>
</ul>



<p>Deze positionering van LetheLink en eHealths blinde pseudonimiseringsdienst ten opzichte van elkaar zou organisaties moeten helpen om te bepalen welke technologie het meest geschikt is voor hun use cases.</p>



<h1 class="wp-block-heading">Uitbreidingen</h1>



<p>Er zullen een aantal uitbreidingen van LetheLink nodig zijn om het ook daadwerkelijk in de praktijk te kunnen inzetten. Alle voorgestelde uitbreidingen zijn conceptueel alvast mogelijk, maar niet steeds in het prototype geïntegreerd. <strong>Dit zal enkel gebeuren indien er een concrete vraag komt.</strong></p>



<ul class="wp-block-list">
<li><strong>Minimale grootte resultaatset.</strong> Indien de gepseudonimiseerde resultaatset voor de data collector onvoldoende records bevat is er een risico voor de privacy van de betrokkenen en is het onmogelijk om statistisch relevant onderzoek te doen. Daarom ondersteunt het prototype vandaag reeds de mogelijkheid om een minimale grootte mee te geven in het JSON bestand.</li>



<li><strong>Gecontroleerde re-identificatie.</strong> Indien onderzoekers merken dat een bepaalde burger een hoog risico heeft om een bepaalde ziekte te ontwikkelen, moet het mogelijk zijn deze burger daarvan op de hoogte te stellen. Ook wanneer bij een fraudeonderzoek er een sterk vermoeden van fraude is door bepaalde burgers, moet het mogelijk zijn de bevoegde instantie op de hoogte te brengen. <span data-olk-copy-source="MessageBody">Er moet dus&nbsp;</span>in een mogelijkheid voorzien worden om in uitzonderlijke situaties op gecontroleerde wijze de identiteit van een burger te achterhalen.</li>



<li><strong>Data holder pseudoniemen.</strong> Zoals eerder in dit artikel aangegeven, hebben data holders vaak zelf geen toegang tot het rijksregisternummer van de burgers waarover ze data beheren. Ook in dergelijk gevallen moet het protocol efficiënt uit te voeren zijn.</li>



<li><strong>Selectieve prijsgave.</strong> Momenteel focust het prototype op doorsnedes; enkel indien <em>alle</em> data holders records over eenzelfde burger aanleveren, wordt het samengestelde record zichtbaar voor de data collector. In de praktijk is er meer flexibiliteit nodig, zoals aangegeven in figuur 5. In de use case waarmee we dit artikel begonnen had de onderzoeker gepseudonimiseerde gegevens nodig over alle MS-patiënten, terwijl ons protoype op dit moment enkel gepseudonimiseerde gegevens aanlevert over alle MS-patiënten die <em>ook</em> de kankerdiagnose kregen.&nbsp;</li>



<li><strong>Multi-batch transfer.</strong> In sommige gevallen moeten data holders meermaals data aanleveren aan de data collector, bijvoorbeeld in het kader van longitudinaal onderzoek. De data collector moet in staat zijn doorheen de tijd data over eenzelfde burger aan elkaar te koppelen.</li>



<li><strong>Vereenvoudigde communicatie.</strong> In het prototype communiceren alle betrokken data holders met elkaar, om vervolgens individueel vercijferde data naar de data collector te sturen. In een aangepast protocol zouden data holders enkel data uitwisselen met en via de data collector, bijvoorbeeld via een REST-interface. In de praktijk is dit de meer wenselijke benadering.</li>
</ul>



<p>Laat ons weten indien u andere nuttige uitbreidingen ziet.</p>



<figure class="wp-block-image aligncenter"><a href="https://www.smalsresearch.be/wp-content/uploads/2025/12/selective_disclosure.png"><img loading="lazy" decoding="async" width="1024" height="570" src="https://www.smalsresearch.be/wp-content/uploads/2025/12/selective_disclosure-1024x570.png" alt="" class="wp-image-24754" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/selective_disclosure-1024x570.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/12/selective_disclosure-300x167.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/12/selective_disclosure-768x428.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/12/selective_disclosure-1536x855.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2025/12/selective_disclosure.png 1882w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 5. Een mogelijke uibreiding, waarbij de resultaatset meer kan zijn dan enkel de records over burgers waar elke betrokken data holder informatie over aanlevert</figcaption></figure>



<h1 class="wp-block-heading">Referenties</h1>



<p>Het initiële concept alsook het prototype en de performantietesten werden uitgevoerd door Smals Research. De academische partners, met name de <a href="https://www.esat.kuleuven.be/cosic/">COSIC</a> groep en de <a href="https://distrinet.cs.kuleuven.be/">DistriNet</a> groep aan de KU Leuven, alsook de <a href="https://crysp.uwaterloo.ca/">CrySP</a> groep aan Waterloo University in Canada, focusten zich op de theoretische uitwerking. Dit resulteerde in 2025 in twee publicaties:</p>



<ul class="wp-block-list">
<li><a href="https://eur06.safelinks.protection.outlook.com/?url=https%3A%2F%2Flink.springer.com%2Fchapter%2F10.1007%2F978-3-031-84748-6_6&amp;data=05%7C02%7Ckristof.verslype%40smals.be%7C68b705fdb22f4881110008de3bb9eb83%7C578bcd46a26646edac84b52b4ebacd22%7C0%7C0%7C639013866892057810%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;sdata=Yo%2F02a8KKrOvYRkjqLNpVqlXRrS%2BP8W95v6yVUBBrsQ%3D&amp;reserved=0">Springer publicatie &#8211; Privacy-By-Design in the Belgian Public Sector</a>. Dit toegankelijke document bespreekt twee innovatieve oplossingen bedacht door Smals Research voor het pseudonimiseren en kruisen van persoonsgegevens; Lethelink en<a href="https://www.smalsresearch.be/kruisen-van-persoonsgegevens-met-ehealths-blinde-pseudonimiseringsdienst-2/"> eHealths blinde pseudonimiseringsdienst</a>.</li>



<li><a href="https://eur06.safelinks.protection.outlook.com/?url=https%3A%2F%2Farxiv.org%2Fabs%2F2512.08558&amp;data=05%7C02%7Ckristof.verslype%40smals.be%7C68b705fdb22f4881110008de3bb9eb83%7C578bcd46a26646edac84b52b4ebacd22%7C0%7C0%7C639013866892083584%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;sdata=Bom%2Fw3Um684o6Y4kJ9Gf8AT3UgIPUwjOVxBZUBQ3oC8%3D&amp;reserved=0">Arxiv publicatie &#8211; Labeled Delegated PSI and its Applications in the Public Sector</a>.&nbsp; Dit academisch artikel beschijft formeel LetheLink, bewijst de correctheid, bespreekt de performantie en positioneert het werkt t.o.v. bestaand academisch werk.</li>
</ul>



<p>Daarnaast verwijs ik graag naar mijn <a href="https://www.youtube.com/watch?v=-mx9vmdezL4">Devoxx talk</a> en <a href="https://www.smalsresearch.be/download/presentations/20240606_webinar_pseudonimisatie_PRINT.pdf">Webinar</a> uit 2024 getiteld “<em>Privacy in Practice with Smart Pseudonymisation</em>”. LetheLink/Oblivious Join is één van de drie pseudonimiseringstechnieken die ik er bespreek.</p>



<p>Ten slotte zijn er nog <a href="/wp-content/uploads/2025/12/OJ-simple.pptx">slides</a> beschikbaar voor diegenen die graag snel een intuïtief beeld ontwikkelen over de basisprincipes van Oblivious Join. De bijhorende nota’s geven extra uitleg.</p>



<h1 class="wp-block-heading">Conclusie</h1>



<p>Secundair gebruik van persoonsgegevens kan ons heel wat inzichten verschaffen die beleidsvorming ondersteunen en wetenschappelijk onderzoek stimuleren. Om die inzichten te ontsluiten moeten gegevens afkomstig van verschillende bronnen op een efficiënte wijze verzameld kunnen worden, met respect voor de privacy. Dat wil zeggen dat enkel de noodzakelijke persoonsgegevens gepseudonimiseerd en gekruist worden en dat participerende partijen in dit proces geen persoonsgegevens te weten komen. Dit was in de praktijk verre van evident.</p>



<p>In samenwerking met internationaal toonaangevende universiteiten werkte Smals Research daarom een concept uit dat met behulp van geavanceerde cryptografie dit op een efficiënte wijze mogelijk maakt. Verder werd een demonstreerbaar prototype gebouwd, wat een eerste stap is om dit effectief in de praktijk te kunnen gaan inzetten.</p>



<p>We hebben de voorbije jaren met heel wat partijen samen gezeten. Iedereen vindt het een zeer nuttige tool, maar vooralsnog missen we de commitment van onze partners om dit in de praktijk om te zetten.</p>



<p><strong>De voornaamste uitdaging vandaag is dan ook het productieklaar krijgen van deze oplossing. Neem dus zeker contact met ons op indien u interesse heeft in deze oplossing en eventueel mee uw schouders hieronder wil zetten.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rules as Code: lessen uit een experiment</title>
		<link>https://www.smalsresearch.be/rules-as-code-deel2-nl/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Fri, 30 Jan 2026 18:57:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[AI4GOV]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[Society]]></category>
		<guid isPermaLink="false">/?p=25971</guid>

					<description><![CDATA[Wat gebeurt er als een leek zich waagt aan een Rules as Code project met een AI-powered IDE?]]></description>
										<content:encoded><![CDATA[
<p><em>Cet article est aussi disponible&nbsp;<a href="/rules-as-code-partie2-fr/" data-type="post" data-id="24294">en français</a>.</em></p>



<p><a href="/rules-as-code-nl/">In een vorig artikel</a> fileerden we <a href="https://interoperable-europe.ec.europa.eu/collection/eugovtech/news/rules-code-rac">Rules as Code</a>, een aanpak die erop gericht is om de kloof tussen regelgeving en software te verkleinen. We illustreerden daarbij dat er heel wat praktische obstakels te overkomen zijn, niettegenstaande het lovenswaardige doel. De uniforme encodering van regels met hun geschiedenis, verwevenheden en afhankelijkheden is een uitdaging die een aanzienlijke investering van mensen en middelen kan vergen. Permanent actief beheer is daarenboven nodig om elke wijziging aan de regels op te vangen. Zelfs op kleine schaal is een nauwe samenwerking tussen juristen en ontwikkelaars onontbeerlijk, want regelmatig zullen gemotiveerde beslissingen genomen moeten worden over interpretatie. Omdat industriestandaarden nog ontbreken en best practices nog volop in ontwikkeling zijn, riskeer je als <em>early adopter</em> de zogenaamde <a href="https://terryu.substack.com/p/bridging-the-gap-between-early-and">pioneer tax</a> te moeten betalen. De complexe lasagna van overheidsbevoegdheden maakt een eventuele toepassing in België niet eenvoudiger.</p>



<p>Mede onder impuls van het uitgebreide <a href="https://www.oecd.org/en/publications/cracking-the-code_3afe6ba5-en.html">rapport van de OESO uit 2020</a>, hebben enkele overheden toch al volop ingezet op het uitwerken van, soms vrij grootschalige, proof-of-concepts. Er bestaan vandaag dan ook enkele frameworks die relatief matuur zijn. Ongetwijfeld is Frankrijk het voortrekkersland; het initiatief dat we hieronder zullen toelichten komt van Franse bodem. Ook <a href="https://regels.overheid.nl/">in Nederland</a> beweegt er wel wat: de Nederlandse fiscus gebruikt al enige tijd haar eigen domeintaal <a href="https://regels.overheid.nl/docs/methods/REGELSPRAAK">RegelSpraak</a> die zij met de <em>rule engine</em> <a href="https://regels.overheid.nl/docs/methods/ALEF">ALEF</a> interpreteert en verwerkt, echter lijkt de daarover <a href="https://gitlab.com/normativesystems">gepubliceerde broncode</a> vooralsnog meer op methodologie dan op applicaties te focussen.</p>



<h1 class="wp-block-heading">OpenFisca</h1>



<p>OpenFisca is <a href="https://openfisca.org/en/about/">ontstaan in 2011</a> als open-source <a href="https://en.wikipedia.org/wiki/Microsimulation">microsimulatie</a>-motor om belasting- en uitkeringsregels (“tax &amp; benefit system”) om te zetten naar uitvoerbare code. De effecten van die regelgeving, en eventuele wijzigingen, kunnen dan gesimuleerd worden voor zowel individuele cases als hele populaties. Websites met OpenFisca in de achtergrond zijn onder andere <a href="https://leximpact.an.fr/">LexImpact</a> (simulatie van wijzigingen in socio-fiscale wetgeving), <a href="https://www.mesdroitssociaux.gouv.fr/">Mes droits sociaux</a> (simulatie van sociale rechten), en <a href="https://mes-aides.1jeune1solution.beta.gouv.fr/">1jeune1solution</a> (allerhande steunmaatregelen). Buitenlandse voorbeelden zijn <a href="https://benefitme.nz/">BenefitMe</a> (Nieuw-Zeeland), <a href="https://lesmevesajudes.barcelona.cat/">Les meves ajudes</a> (Barcelona), of <a href="https://www.policyengine.org/">PolicyEngine</a> (UK/USA) &#8211; deze laatsten wel met <a href="https://github.com/PolicyEngine">grondige aanpassingen</a> aan de engine.</p>



<p>Om ons eigen belasting- en/of sociale-zekerheidsstelsel te modelleren, moeten we een fork maken van het generieke <a href="https://github.com/openfisca/country-template">OpenFisca country-template</a>. Verschillende andere landen hebben er tenminste al mee geëxperimenteerd, zo vinden we in de <a href="https://github.com/orgs/openfisca/repositories">lijst van repositories</a> o.a. Senegal, Paraguay en Tunesië. Regionale of lokale wetgeving kan middels <a href="https://openfisca.org/doc/contribute/extensions.html">plugin-extensies</a> toegevoegd worden aan een nationaal systeem, zoals <a href="https://github.com/openfisca/openfisca-paris">deze voor Parijs</a>. Eens de repository geïnitialiseerd, kunnen we beginnen werken aan wat misschien ooit <em>openfisca-belgium</em> kan worden. De modellering in OpenFisca gebeurt door het schrijven van Python-klassen en -methodes, die de entiteiten, variabelen en berekeningsformules uit de regelgeving vertegenwoordigen.</p>



<p>Helaas houdt het gemakkelijke deel daar ongeveer op. De <em>country-template</em> repository is minimalistisch en hoewel er wel <a href="https://openfisca.org/doc/index.html">documentatie</a>, met een kleine tutorial, beschikbaar is om een eigen versie uit te bouwen, focust deze vooral op de eerste stappen. Richtlijnen over hoe we onze eigen fork best zouden structureren zodra het aantal variabelen en parameters groeit, ontbreken grotendeels. De repository van moederproject <a href="https://github.com/openfisca/openfisca-france/tree/master">openfisca-france</a> kan weliswaar als voorbeeld dienen, maar is dan weer erg groot, en het waarom van hun structurele of architecturale keuzes is er niet echt uit af te leiden.</p>



<p>Ook het aspect van een GUI of webinterface blijft onderbelicht. Nochtans is de interface van bijvoorbeeld de <a href="https://socio-fiscal.leximpact.an.fr/?parameters=irpp_economique&amp;waterfall=brut_to_disponible">LexImpact simulator van de Franse inkomstenbelasting</a>, net een sterk punt. Als leidraad voor bouwen van een webinterface verwijst men naar <a href="https://github.com/redte-ch/ReDistributeMe/tree/main">tutorials en slides van een workshop</a>, waar men de eerste stappen toont in <a href="https://svelte.dev/">Svelte</a>, <a href="https://react.dev/">React</a> en <a href="https://vuejs.org/">VueJS</a>. Het is echter een extra barrière voor adoptie, dat een GUI of webapp nog <em>from scratch</em> zelf te bouwen is bovenop een eigen OpenFisca-instantie. Het bouwen van een GUI is immers tijdrovend. Het zou nuttig zijn om OpenFisca-GUI-libraries te hebben met herbruikbare componenten voor de belangrijkste web frameworks, zodat een OpenFisca server misschien met een generieke <em>default</em> webinterface gebundeld kan worden. Een <a href="https://www.drupal.org/project/webform_openfisca">Drupal-plugin</a> lijkt momenteel het enige project dat enigszins in die richting gaat.</p>



<h1 class="wp-block-heading">AI to the rescue?</h1>



<p>Gezien OpenFisca, Svelte, React en Vue allen nieuw zijn voor de auteur, en AI-tooling belooft om developers sneller te laten onboarden, grijpen we de kans om de AI-powered IDE <a href="https://cursor.com/download">Cursor</a> tegelijk uit te testen. Deze kloon van <a href="https://code.visualstudio.com/">Visual Studio Code</a> is verrijkt met de mogelijkheid tot het aanroepen van (in ons geval public-cloud-gebaseerde) LLMs. Daarbij kunnen selecties uit bestanden in het project worden gemarkeerd als context bij de vraag. Cursor kan <a href="https://cursor.com/docs">suggesties geven</a> voor toevoegingen of wijzigingen aan bestanden die, eens goedgekeurd, direct geïntegreerd kunnen worden in de codebase.</p>



<p>Interageren met AI-modellen <a href="https://news.stanford.edu/stories/2025/10/ai-chatbot-privacy-concerns-risks-research">houdt privacy-risico&#8217;s in</a>. Dit experiment vooral mogelijk omdat we werken met open-source code, gepubliceerde regelgeving, en de eveneens openbare documentatie daarvan, wat niet gevoelig is. Maar gezien alles wat zich in de IDE bevindt naar het taalmodel gestuurd kan worden, moeten we er nog steeds op letten dat we geen bestanden openen in de IDE die credentials, API keys of persoonlijke informatie bevatten. Dat blijft de verantwoordelijkheid van de individuele developer. Sowieso is het goede praktijk om voorbereid te zijn op het roteren van API keys of credentials, want in het heetst van een debugging-strijd is <em>oversharing</em> met een LLM snel gebeurd.</p>



<p>Tot slot moeten we vermelden dat dit experiment nog werd uitgevoerd met Cursor versies 1.6 en 1.7 in september-oktober 2025, met OpenAI&#8217;s GPT-4.5 en later GPT-5.0 als achterliggend taalmodel, gebruikt met een eigen API key (niet via Cursor). Latere versies hebben heel wat nieuwere features (waaronder meer <em>agentic</em> workflows) en het zou kunnen dat de ervaring vandaag (januari 2026) al heel anders zou zijn. De belangrijkste lessen blijven echter algemeen gelden voor alle AI-powered development, of dat nu via IDE, command line of beide gebeurt (vb. Anthropic <a href="https://code.claude.com/docs/en/overview">Claude Code</a>).</p>



<p>Als eerste stap voegen we de nodige documentatie toe aan ons project. Als case nemen we de <a href="https://www.ejustice.just.fgov.be/eli/wet/2002/05/26/2002022559/justel">Wet op de Maatschappelijke Integratie van 26 mei 2002</a>. Samen met alle andere relevante wetten, koninklijke besluiten en omzendbrieven is die overzichtelijk geïnventariseerd op de website van de <a href="https://www.mi-is.be/nl/wetgeving">POD Maatschappelijke Integratie</a>. Om de tekst gemakkelijk doorzoekbaar en interpreteerbaar te maken voor een LLM in een IDE, slaan we hem op als plat tekstbestand zonder opmaak, en dat voegen we toe aan een nieuw mapje voor relevant bronmateriaal in de source tree van het project. Of dat optimaal is, daar hebben we het raden naar, maar we moeten ergens beginnen.</p>



<h2 class="wp-block-heading">Entiteiten</h2>



<p>Entiteiten in OpenFisca drukken uit voor wie we de berekening maken. Dat kunnen individuen, gezinnen of andere groeperingen van mensen zijn (bedrijven, organisaties, &#8230;). Het zijn de basisbouwstenen waarvoor we later variabelen zullen kunnen specifiëren die samen een &#8220;situatie&#8221; vormen waarvoor we een berekening zullen kunnen doen. <em>Person </em>en <em>Household </em>zijn al aanwezig <a href="https://github.com/openfisca/country-template/blob/main/openfisca_country_template/entities.py">in de code</a>. Een logische vraag is dus of we, op basis van de gegeven wettekst, andere entiteiten kunnen definiëren die nuttig zouden zijn.</p>



<p>Na het stellen van de vraag aan GPT-5 in Cursor, met de wettekst geselecteerd als context, wordt voorgesteld de volgende entiteiten toe te voegen: </p>



<ul class="wp-block-list">
<li>Eligible Person for Societal Integration</li>



<li>Living Wage Recipient</li>



<li>Employment Project Participant</li>
</ul>



<p>De voorgestelde aanpassingen aan de code zijn syntactisch correct. Geen van deze 3 zijn echter nuttig of noodzakelijk: het gaat in alledrie de gevallen om varianten van <em>Person</em>. De eigenschappen die maken dat ze bijvoorbeeld een leefloon zouden ontvangen, zijn veeleer variabelen toegevoegd aan de reeds bestaande <em>Person </em>entiteit. De waarde van die variabelen hangt bovendien af van andere variabelen die eveneens aan datzelfde individu gebonden zijn, zoals een inkomen uit werk of een handicapstatus. Entiteiten, die vooral dienen voor op zichzelf staande concepten, zijn hiervoor niet de juiste keuze.</p>



<p>Daarnaast lijkt GPT-5 het concept van een &#8220;rol&#8221; binnen een OpenFisca groepsentiteit verkeerd te hebben begrepen. Hij probeert &#8220;Eligible Person for Societal Integration&#8221; op te bouwen met verschillende &#8220;rollen&#8221; als onderdelen: &#8220;Belgian National&#8221;, &#8220;EU Citizen&#8221;, &#8220;Foreigner&#8221;, &#8220;Stateless&#8221;, &#8220;Refugee&#8221;&#8230; Dit ongetwijfeld omdat deze mogelijkheden verschijnen in <a href="https://www.ejustice.just.fgov.be/eli/wet/2002/05/26/2002022559/justel#Art.3">Art.3, 3° lid, van de wet</a>. In OpenFisca is een groepsentiteit echter samengesteld uit Personen die elk een rol krijgen. Een <em>Household </em>bevat zo <em>Adult </em>en <em>Child </em>rollen. Het is vrij nonsensicaal dat een EligiblePerson meerdere Foreigners zou kunnen bevatten. Nationaliteit of herkomst, of andere voorwaarden die gesteld worden in deze wet, zijn ook hier variabelen die gebonden zijn aan de persoon, geen entiteit op zich.</p>



<p>Op een ander moment werd nog een aparte entiteit gecreëerd voor het OCMW. Hoewel het logisch lijkt om de OCMWs te modelleren en als een entiteit te beschouwen &#8211; ze worden immers vermeld in de wet &#8211; is het dat hier (nog) niet. Er zijn immers geen verschillende types OCMWs met verschillende eigenschappen of rollen, waarvoor we telkens andere berekeningen moeten maken. In de context van deze wet, waarbij het de burger is voor wie we het recht op maatschappelijke steun berekenen, is het OCMW vooral een constant, invariant gegeven. In OpenFisca kunnen we dat dus vooralsnog overslaan. (Een entiteitstype &#8220;instituut&#8221; is ook niet voorzien.)</p>



<p>We merken hier dus dat Cursor niet &#8220;nee&#8221; kan antwoorden op de vraag of er nuttige andere entiteiten kunnen toegevoegd worden. Het kan de denkrichting achter die vraag niet bekritiseren of corrigeren uit eigen beweging. Doorheen het hele experiment bleken Cursor en GPT-5 ook een neiging te vertonen tot onnodige complexiteit. Dit is voor developers die met onbekende code of frameworks werken een groot risico:  indien men te snel te ver meegaat met zulke suggesties, dreigt men later de pedalen te verliezen en achteraf erg moeilijke correcties te moeten aanbrengen aan de fundamenten van het project. Eens een verkeerde route is ingeslagen, blijkt het ook moeilijk om op de stappen terug te keren en deze weer te doen vergeten. Zeker als men ze eerst onwetend heeft toegelaten, komen ze terecht in de context en wordt er in vervolgvragen op verdergebouwd. Deze sluipende &#8220;<a href="https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html">context rot</a>&#8221; is ondertussen een bekend probleem en een belangrijke oorzaak van tijdverlies met AI-enabled coding.</p>



<h2 class="wp-block-heading">Variabelen</h2>



<p>De kern van het model zit in de variabelen die de rechten en voorwaarden uit de wet voorstellen. <a href="https://www.ejustice.just.fgov.be/eli/wet/2002/05/26/2002022559/justel#Art.2">Artikel 2</a> van de wet somt de verschillende vormen van maatschappelijke integratie op waarop iemand recht kan hebben (o.a. tewerkstelling, leefloon, geïndividualiseerd project). <a href="https://www.ejustice.just.fgov.be/eli/wet/2002/05/26/2002022559/justel#Art.2">Artikel 3</a> bevat de voorwaarden waaraan een persoon moet voldoen om van dat recht gebruik te maken. We hebben deze bepalingen stap voor stap in code omgezet.</p>



<p>Recht op maatschappelijke integratie betekent in de praktijk dat een OCMW een persoon moet ondersteunen via (1) een job of opleiding, (2) een leefloon, of (3) een geïndividualiseerd project voor maatschappelijke integratie. Dit kan vertaald worden naar drie boolean variabelen op de Persoon-entiteit, bijvoorbeeld <em>employment_right</em>, <em>living_wage_right </em>en <em>individualized_project_right</em>. Cursor geeft hier een goede code-suggestie, en voorziet een eenvoudige <em>placeholder</em>-formule: zolang iemand “in aanmerking komt voor integratie” (een andere variabele) zou het recht gelden. We bekomen een definitie van <em>employment_right</em> als volgt:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>class employment_right(Variable):
  value_type = bool
  entity = Person
  definition_period = MONTH
  def formula(person, period, parameters):
    return person("eligible_for_integration", period)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">employment_right</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">Variable</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">  value_type = </span><span style="color: #4EC9B0">bool</span></span>
<span class="line"><span style="color: #D4D4D4">  entity = Person</span></span>
<span class="line"><span style="color: #D4D4D4">  definition_period = MONTH</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">formula</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">person</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">period</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">parameters</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> person(</span><span style="color: #CE9178">&quot;eligible_for_integration&quot;</span><span style="color: #D4D4D4">, period)</span></span></code></pre></div>



<p>De invulling van deze placeholder-formule komt aan bod in het daaropvolgende Artikel 3. Die modelleert de volgende voorwaarden om in aanmerking te komen:</p>



<ul class="wp-block-list">
<li><strong>Verblijf in België </strong>(volgens de regels nader te bepalen bij KB).</li>



<li><strong>Leeftijd:</strong> De persoon is <strong>meerderjarig</strong> (18+), of als minderjarige <strong>gelijkgesteld</strong> aan een meerderjarige volgens de uitzonderingen in deze wet.</li>



<li><strong>Nationaliteit of verblijfsstatuut:</strong> De persoon is Belg, EU-burger (na 3 maanden verblijf), ingeschreven vreemdeling, staatloze, vluchteling of subsidiair beschermde. </li>



<li><strong>Onvoldoende bestaansmiddelen</strong></li>



<li><strong>Werkbereidheid </strong>(tenzij onmogelijk om gezondheidsredenen of billijkheidsredenen).</li>



<li><strong>Rechten uit andere stelsels uitgeput</strong></li>
</ul>



<p>Al deze voorwaarden komen samen in één centrale boolean variabele <em>societal_integration_right</em>. Die variabele geeft aan of iemand, gegeven zijn persoonlijke situatie, recht <strong>kan</strong> hebben op maatschappelijke integratie. In feite is dit de vertaalslag van <em>“voldoet de persoon aan alle voorwaarden van art.3?”</em>. De formule combineert alle subvoorwaarden:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>class societal_integration_right(Variable):
  value_type = bool
  entity = Person
  definition_period = MONTH
  label = "Right to societal integration"
  def formula(person, period, parameters):
    residency = person("residency_status", period)
    is_major = person("is_major", period)
    nationality = person("nationality_status", period) in &#91;"belgian", "eu_citizen", "registered_foreigner", "stateless", "refugee"&#93;
    insufficient_income = not person("has_sufficient_income", period)
    willing_to_work = person("willing_to_work", period)
    claiming_benefits = person("claiming_benefits", period)
    return (residency and is_major and nationality and insufficient_income and willing_to_work and claiming_benefits)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">societal_integration_right</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">Variable</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">  value_type = </span><span style="color: #4EC9B0">bool</span></span>
<span class="line"><span style="color: #D4D4D4">  entity = Person</span></span>
<span class="line"><span style="color: #D4D4D4">  definition_period = MONTH</span></span>
<span class="line"><span style="color: #D4D4D4">  label = </span><span style="color: #CE9178">&quot;Right to societal integration&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">formula</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">person</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">period</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">parameters</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    residency = person(</span><span style="color: #CE9178">&quot;residency_status&quot;</span><span style="color: #D4D4D4">, period)</span></span>
<span class="line"><span style="color: #D4D4D4">    is_major = person(</span><span style="color: #CE9178">&quot;is_major&quot;</span><span style="color: #D4D4D4">, period)</span></span>
<span class="line"><span style="color: #D4D4D4">    nationality = person(</span><span style="color: #CE9178">&quot;nationality_status&quot;</span><span style="color: #D4D4D4">, period) </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> &#91;</span><span style="color: #CE9178">&quot;belgian&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;eu_citizen&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;registered_foreigner&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;stateless&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;refugee&quot;</span><span style="color: #D4D4D4">&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    insufficient_income = </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> person(</span><span style="color: #CE9178">&quot;has_sufficient_income&quot;</span><span style="color: #D4D4D4">, period)</span></span>
<span class="line"><span style="color: #D4D4D4">    willing_to_work = person(</span><span style="color: #CE9178">&quot;willing_to_work&quot;</span><span style="color: #D4D4D4">, period)</span></span>
<span class="line"><span style="color: #D4D4D4">    claiming_benefits = person(</span><span style="color: #CE9178">&quot;claiming_benefits&quot;</span><span style="color: #D4D4D4">, period)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> (residency </span><span style="color: #569CD6">and</span><span style="color: #D4D4D4"> is_major </span><span style="color: #569CD6">and</span><span style="color: #D4D4D4"> nationality </span><span style="color: #569CD6">and</span><span style="color: #D4D4D4"> insufficient_income </span><span style="color: #569CD6">and</span><span style="color: #D4D4D4"> willing_to_work </span><span style="color: #569CD6">and</span><span style="color: #D4D4D4"> claiming_benefits)</span></span></code></pre></div>



<p>Let hier vooral op enkele vreemde lacunes in de suggestie van Cursor. Zo is de naam van de variabele <code>societal_integration_right</code> niet gelijk aan de eerder gedefinieerde placeholder <code>eligible_for_integration</code>, hoewel dat wel de bedoeling is. Daarnaast wordt in de nationaliteitsvoorwaarde de mogelijkheid van subsidiair beschermden simpelweg vergeten! Tot slot is de zesde voorwaarde, dat men eerst zijn rechten laat gelden op eventuele sociale uitkeringen, wel erg rudimentair benoemd als <code>claiming_benefits</code> &#8211; een variabelenaam die niet echt dekt wat bedoeld wordt.</p>



<p>We kunnen deze suggestie dus wel aanvaarden, maar we zijn al direct verplicht om 3 correcties door te voeren. De niet-overeenkomst van de variabelenaam kunnen we daarbij nog gemakkelijk detecteren&nbsp;omdat de tests niet zullen werken als er nog ongedeclareerde variabelen in de code zitten. Een mankerend element in de formule, zoals een vergeten voorwaarde, is echter veel gemakkelijker over het hoofd gezien, en leidt wanneer dat ongedetecteerd blijft gegarandeerd tot fouten in de uitvoering. Hier merken we dus echt wel de noodzaak om terug te koppelen naar de wettekst om te verifiëren dat de gegenereerde code wel degelijk overeenkomt met wat de wettekst zegt. Deze terugkoppeling moet aandachtig genoeg gebeuren om ook ongelukkige benamingen of subtiele misinterpretaties van te tekst te kunnen identificeren.</p>



<p>Eventuele correcties kunnen daarnaast ook best zo snel mogelijk gebeuren. Als foutieve code in de editor aanwezig blijft, gaat ze immers deel uitmaken van de context die het AI-model gebruikt en dient ze zelf als fundament voor daaropvolgende suggesties. Dit kan leiden tot een situatie waarbij men suggesties blijft ontvangen waarin steeds dezelfde fouten terugkomen, die men dus ook telkens weer moet corrigeren, wat niet bevorderlijk is voor de productiviteit.</p>



<p>De variabelen gebruikt in de <code>formula()</code> methode van <code>societal_integration_right</code> hierboven, moeten uiteraard op hun beurt ook gedefinieerd worden: voor elk van deze variabelen moeten we een klasse schrijven. Dit kan aanleiding geven tot complexe kettingen van afhankelijkheden. Zo zou <code>is_major</code> een eenvoudige booleaanse inputvariabele kunnen zijn, maar we kunnen dat ook berekenen op basis van de datum van vandaag en weer een nieuwe variabele <code>birthdate</code>. De berekening van de formule van de variabelen kan daarnaast ook gebruik maken van de parameters van een wet &#8211; zo is de meerderjarigheid in België pas vanaf 18 jaar <a href="https://www.ejustice.just.fgov.be/eli/wet/1990/01/19/1990009050/justel">sinds 1 mei 1990</a>. Dat zou ons dan weer bij het Burgerlijk Wetboek brengen, en haar geschiedenis &#8211; om het beknopt te houden gaan we daar nu niet verder op in.</p>



<p>Laatste opmerking: het model zoals hier gebouwd is uiteraard een vereenvoudigde weerspiegeling. Merk wel op dat we zelfs dan, slechts 3 artikels ver in een wet, al snel 10 Python-klassen hebben gedefinieerd hebben, met potentieel voor meer als we echt in de diepte zouden willen gaan. Cursor en GPT-5 schrijven daarbij relatief <em>verbose </em>code, met vele hulpvariabelen en -methodes, die soms echt wel eenvoudiger kan. Sommige details uit de wet, zoals de 3-maanden wachttijd voor EU-burgers, of de uitzonderingen die bestaan voor bepaalde categorieën van minderjarigen (<a href="https://www.ejustice.just.fgov.be/eli/wet/2002/05/26/2002022559/justel#Art.7">Art. 7</a>), zouden in een volwaardig model nog heel wat extra variabelen of condities vergen. </p>



<h1 class="wp-block-heading">AI en code: enkele valkuilen</h1>



<p>Wat betreft <em>best practices</em> voor de inzet van AI-hulp bij zulke projecten, identificeren we nog enkele valkuilen, naast diegene die we tot nu toe al genoemd hebben.</p>



<p>Teveel documentatie toevoegen in het begin leidt snel tot &#8220;<a href="https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html">context confusion</a>&#8220;, waarbij de suggesties of de antwoorden van de LLM gebaseerd gaan zijn op stukken informatie die (nog) niet relevant zijn. Het is beter de documentatie geleidelijk toe te voegen, in gelijke tred met de functionaliteit, in plaats van de volledige analyse en achtergrond op voorhand toe te voegen aan de IDE. In het geval van regelgeving: voeg de regels artikel per artikel toe aan de IDE, naarmate de projectontwikkeling vordert, en weersta de verleiding om de hele wettekst op voorhand als &#8220;encyclopedische referentie&#8221; te integreren in de IDE.</p>



<p>Context rot of context poisoning ontstaat dan weer wanneer de AI een verkeerde weg is ingeslagen,&nbsp; daarop voortboomt, en uiteindelijk relevantere informatie vergeet zodat het ook moeilijker wordt om ervan te herstellen. &#8220;<a href="https://www.anthropic.com/engineering/multi-agent-research-system">Context quarantining</a>&#8220;, het opdelen van het probleem in kleinere deelproblemen elk met hun eigen context, is daarvoor een logische remedie. Dit is ook de weg die de meeste &#8220;deep research&#8221; of &#8220;<a href="https://www.anthropic.com/engineering/multi-agent-research-system">multi-agentic</a>&#8221; systemen inslaan. In een IDE zou dat impliceren dat een AI-systeem de codebase en de documentatie vanaf een zekere grootte zou moeten segmenteren. Hoe dat technisch uitgewerkt kan worden achter de schermen lijkt een uitdaging van formaat, en verschillende IDEs zullen daar in de nabije toekomst waarschijnlijk hun eigen <em>approach </em>voor ontwikkelen.</p>



<p>Een andere frustratie was dat de AI soms code of bestanden verkeerd plaatste of aannam dat bepaalde dingen bestonden. Zo refereerden gegenereerde formules naar variabelen die nog helemaal niet gedefinieerd waren. Dit zorgt bij het testen natuurlijk voor foutmeldingen. We moesten de AI dan bijsturen of zelf extra variabelen invoegen om die referenties af te dekken. Ook kleine zaken, zoals de formattering van documentatie of het wel/niet aanmaken van noodzakelijk imports, vergden manuele correctie. Dit soort inconsistenties tonen aan dat je AI-suggesties niet blindelings kunt vertrouwen. Een developer moet voortdurend valideren of de code die gegenereerd wordt strookt met de bedoeling, en zo niet, onmiddellijk ingrijpen.</p>



<h1 class="wp-block-heading">publi.codes</h1>



<p>We willen ook nog wijzen op het bestaan van <a href="https://publi.codes/">publi.codes</a> als eventueel alternatief voor OpenFisca. Recenter en moderner, moeten de regels daar gecodeerd worden in een YAML-formaat, wat veel hanteerbaarder is dan het schrijven van subklassen in Python, en veel leesbaarder voor niet-developers. Men is in ruil daarvoor echter wel beperkt tot de <a href="https://publi.codes/docs/mecanismes">bewerkingen die zijn toegelaten</a> door de achterliggende motor. Pas vanaf de <a href="https://github.com/orgs/publicodes/projects/5">nog in ontwikkeling zijnde versie 2</a> komen daar mogelijkheden bij om <a href="https://github.com/publicodes/publicodes/issues/707">barema&#8217;s</a> te encoderen, of <a href="https://github.com/publicodes/publicodes/issues/705">abattementen</a> (vrijgestelde bedragen), die in België erg veelvuldig voorkomen. </p>



<p>De huidige versie van publi.codes is bovendien afhankelijk van het NPM ecosysteem dat tegenwoordig regelmatig geplaagd wordt door <a href="https://about.gitlab.com/blog/gitlab-discovers-widespread-npm-supply-chain-attack/">supply chain aanvallen</a>. Publi.codes v2 zou dan weer <a href="https://publi.codes/blog/publicodes-v2">gecompileerd worden naar OCaml</a>, een programmeertaal die we bij Smals niet gebruiken. Gezien de kans klein is dat Smals deze programmeertaal zou willen introduceren in haar portfolio (en een ondersteunend team ervoor zou willen uitbouwen), leek het weinig nuttig om voor deze oefening ook publi.codes in de diepte te bekijken. Het valt echter wel op dat op het vlak van UI-componenten, publi.codes wel <a href="https://publi.codes/docs/api/react-ui">enkele libraries</a> heeft klaarliggen.</p>



<h1 class="wp-block-heading">Conclusie</h1>



<p>Zowel OpenFisca als publi.codes zijn als platform vooral sterk wanneer je regels kunt modelleren als expliciete, testbare berekeningen. Minder ideaal is het voor regels die vooral draaien op discretionaire beslissingen, vrije interpretatie, bewijswaardering, uitzonderingen zonder heldere parameters, of “case management”-workflows. Het zijn primair reken- en regelsystemen, geen dossierbehandelingsplatformen. Daarmee zijn ze eventueel wel geschikt als motor voor apps die belastingen of uitkeringen op niveau van persoon/huishouden kunnen berekenen (recht op iets + bedrag), of om beleidsimpact te simuleren van eventuele wijzigingen (&#8220;wat kost deze hervorming?&#8221;, &#8220;wie wint/verliest?&#8221;). Dat kan voor beleidsmakers én burgers interessant zijn.</p>



<p>Toch is een OpenFisca-project niet snel even opgezet. Conceptueel is OpenFisca enigszins verwarrend voor een developer: hoewel OpenFisca gebruikmaakt van Python-klassen, dienen deze niet om objecten te modelleren, maar om entiteiten, variabelen en berekeningsregels uit de regelgeving declaratief vast te leggen. Gegeven dat er 1 klasse per variabele moet geschreven worden, en er vlotjes tientallen variabelen kunnen meespelen in een fijnmazig wetsartikel, zit men met een snel groeiende stapel code die een uitdaging is om overzichtelijk georganiseerd te krijgen. Daarnaast vergt ook de ontwikkeling van een GUI veel extra werk. Het project mist nog de nodige <em>tooling</em> om deze recurrente problematieken te verlichten. (Het helpt natuurlijk niet wanneer de <a href="https://openfisca.org/en/about/">opdrachtgevende overheid in 2020 plots de kraan dichtdraait</a>, schijnbaar van mening dat open-source projecten per definitie zelfbedruipend kunnen zijn.)</p>



<p>Tot slot kunnen we nog zeggen dat dit experiment tegelijk een nuttige en leerzame <em>reality check</em> was over wat LLMs kunnen bijdragen, en kunnen verknoeien, aan een developer-werkomgeving. Zelf de regie stevig in handen blijven houden en werken met kleine incrementele stapjes, blijft de beste raad. De ene AI tool zal daarbij al wat minder steken laten vallen dan de andere op allerlei vlakken. Het geven van negatieve antwoorden of het detecteren van fouten in de vraagstelling blijft erg uitdagend voor LLMs en dat brengt wat risico met zich mee. AI-assistentie in IDEs evolueert echter razendsnel, en een gelijkaardig experiment zal volgend jaar ongetwijfeld anders verlopen. </p>



<p>Rules As Code betekent zeker niet dat we vandaag een wettekst aan een AI kunnen geven om er een programma te laten uitrollen. Wel zal er op <a href="https://rules-as-code.yellenge.nl/">gespecialiseerde fora</a> de komende jaren ongetwijfeld veel aandacht gaan naar de interactie tussen wet, implementatie, en AI-tooling. Vooralsnog blijft de complexiteit van de regelgeving zelf, ook met steeds betere AI, de grootste hinderpaal voor Rules As Code projecten. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rules as Code</title>
		<link>https://www.smalsresearch.be/talk-rac/</link>
		
		<dc:creator><![CDATA[Smals Research]]></dc:creator>
		<pubDate>Fri, 09 Jan 2026 03:33:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Research talks]]></category>
		<category><![CDATA[AI4GOV]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[Society]]></category>
		<guid isPermaLink="false">/?p=25459</guid>

					<description><![CDATA[Interview met Joachim Ganseman van Smals Research over het omzetten van regels naar code: Rules as Code.]]></description>
										<content:encoded><![CDATA[
<p><strong>(NL)</strong> In deze Research Talk wordt <a href="/author/ganseman/" target="_blank" rel="noreferrer noopener">Joachim Ganseman</a>, researcher bij Smals, aan de tand gevoeld over zijn ervaringen met “Rules as Code”-systemen (RaC) en hun inzetbaarheid binnen het — complexe — domein van de sociale zekerheid. Joachim plaatst een aantal kanttekeningen bij de directe toepasbaarheid van deze systemen in onze context. Kijk en luister hier waarom.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>(FR)</strong> Dans ce Research Talk (en Néerlandais, sous-titres FR sont disponibles), <a href="/author/ganseman/" target="_blank" rel="noreferrer noopener">Joachim Ganseman</a>, chercheur chez Smals, est interrogé sur ses expériences avec les systèmes « Rules as Code » (RaC) et leur mise en œuvre au sein du domaine — complexe — de la sécurité sociale. Joachim émet quelques réserves quant à l&#8217;applicabilité directe de ces systèmes dans notre contexte. Regardez et écoutez ici pourquoi.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>(EN)</strong> In this Research Talk (Dutch speaking, EN subtitles available), <a href="/author/ganseman/" target="_blank" rel="noreferrer noopener">Joachim Ganseman</a>, researcher at Smals, is interviewed about his experiences with “Rules as Code” (RaC) systems and their implementation within the complex domain of social security. Joachim places some reservations regarding the direct applicability of these systems in our context. Watch and listen here to find out why. </p>



<figure class="wp-block-embed aligncenter is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="ResearchTalk - Rules as Code" width="500" height="281" src="https://www.youtube.com/embed/SeYI0Tz1DOE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Privacy en schaalbaarheid met zero-knowledge proofs</title>
		<link>https://www.smalsresearch.be/privacy-en-schaalbaarheid-met-zero-knowledge-bewijzen/</link>
		
		<dc:creator><![CDATA[Kristof Verslype]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[blockchain]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=23409</guid>

					<description><![CDATA[Zero-knowledge bewijzen helpen in blockchain context om zowel privacy als schaalbaarheid te verbeteren. Wat is het, wat zijn de uitdagingen en worden ze reeds toegepast?]]></description>
										<content:encoded><![CDATA[<p><em>Cet article est aussi disponible en <a href="/?p=23410">français</a>.</em></p>
<p data-wp-editing="1"><a href="/wp-content/uploads/2025/12/MartinHandfordWallyFriends.png"><img loading="lazy" decoding="async" class="size-medium wp-image-24630 alignright" src="/wp-content/uploads/2025/12/MartinHandfordWallyFriends-244x300.png" alt="" width="244" height="300" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/MartinHandfordWallyFriends-244x300.png 244w, https://www.smalsresearch.be/wp-content/uploads/2025/12/MartinHandfordWallyFriends.png 250w" sizes="auto, (max-width: 244px) 100vw, 244px" /></a><a href="https://en.wikipedia.org/wiki/Where%27s_Wally%3F">Where is Wally</a> is een bekend spel waarbij een specifiek personage – genaamd Wally – gezocht dient te worden in een tekening met veel details en andere personages. Hoe kan Paula (de <em>prover</em> ofwel de <em>bewijzer</em>) aan Victor (de <em>verifier</em> ofwel de <em>verifieerder</em>) bewijzen dat ze weet waar Wally is, zonder details over zijn positie in de figuur weer te geven? Paula kan een ondoorzichtige plaat nemen die zowel in de hoogte als in de breedte dubbel zo groot is als de figuur waarin Wally verborgen is. In het midden van de plaat is een gaatje ter grootte van Wally. Door de plaat zo te positioneren dat het gaatje enkel Wally toont, bewijst Paula aan Victor dat ze Wally gelokaliseerd heeft, zonder informatie over Wally’s locatie prijs te geven.</p>
<p>Dit is een voorbeeld van een <em>zero-knowledge proof</em>, of kortweg <em>ZKP, </em>wat een partij toelaat een bewering aan een andere partij te bewijzen zonder verder details over die bewering prijs te geven. Strikt genomen is het Wally-voorbeeld niet helemaal zero-knowledge, gezien ook informatie over de lichaamshouding en gezichtsexpressie van Wally prijsgegeven worden, wat kan helpen om hem te vinden.</p>
<p>Een ander <a href="https://eprint.iacr.org/2018/046.pdf">voorbeeld</a>, waarvoor een proof of concept gebouwd werd, bewijst aan het publiek dat het DNA van een presidentskandidaat niet voorkomt in een forensische DNA-database. De politie voert publiek beschikbare code uit op inputs die verborgen blijven voor het publiek: de DNA-database en het DNA-profiel van de presidentskandidaat. De output is “<em>geen match</em>”, “<em>gedeeltelijke match</em>” of “<em>volledige match</em>”. Het publiek – althans de cryptografen onder hen – is ervan overtuigd dat het resultaat de correcte uitvoering is van de code op de confidentiële inputs. De bewering die hier bewezen wordt m.b.v. een ZKP heeft betrekking tot de integriteit van <u>berekeningen op confidentiële data</u>.</p>
<p><em>Anonieme credentials, die in een <a href="/?p=23233">vorig artikel</a> besproken werden,</em> laten daarentegen burgers toe om  <u>eigenschappen</u> over henzelf selectief te bewijzen, zoals meerderjarigheid, nationaliteit of bezit van een geldig rijbewijs. Anonieme credentials maken intensief gebruik van ZKPs. Ook ZKP&#8217;s op zich kunnen, zoals we verder in dit artikel zullen zien, aangewend worden voor selectieve prijsgave van persoonsgegevens.</p>
<p>Samengevat stellen ZKPs een partij, de <em>prover</em>, in staat om zonder een vertrouwde tussenpartij, aan een andere partij, de <em>verifier</em>, beweringen te bewijzen. Deze beweringen kunnen betrekking hebben op berekeningen op confidentiële data, maar ook op eigenschappen (attributen) van een burger (of zelfs een dier of object).</p>
<p>Formeel worden drie criteria gedefinieerd waar een ZKP aan moet voldoen:</p>
<ol>
<li style="list-style-type: none;">
<ol>
<li><strong>Volledigheid (completeness).</strong> Als de bewering waar is, dan zal een verifier hiervan overtuigd worden.</li>
<li><strong>Degelijkheid (soundness).</strong> Als de bewering onwaar is, dan kan de prover de verifier in de praktijk niet ten onrechte overtuigen van het tegendeel.</li>
<li><strong>Nulkennis (Zero-knowledge). </strong>Als de bewering waar is, dan leert de verifier niets meer dan die bewering.</li>
</ol>
</li>
</ol>
<p>Dit artikel bespreekt twee belangrijke use cases voor ZKPs: het verbeteren van schaalbaarheid en privacy van blockchaintoepassingen, en privacy-vriendelijk identiteitsbeheer van burgers.</p>


<h1 class="wp-block-heading">Blockchain</h1>


<p><a href="/wp-content/uploads/2025/09/chain-7071730_1280.jpg"><img loading="lazy" decoding="async" class="alignright size-medium wp-image-23397" src="/wp-content/uploads/2025/09/chain-7071730_1280-300x212.jpg" alt="" width="300" height="212" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/09/chain-7071730_1280-300x212.jpg 300w, https://www.smalsresearch.be/wp-content/uploads/2025/09/chain-7071730_1280-768x542.jpg 768w, https://www.smalsresearch.be/wp-content/uploads/2025/09/chain-7071730_1280-1024x723.jpg 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/09/chain-7071730_1280.jpg 1280w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>In de literatuur werden reeds heel wat <a href="https://onlinelibrary.wiley.com/doi/full/10.1002/spy2.401">potentiële use cases</a> gedefinieerd voor ZKPs, hoewel vandaag maar een beperkt aantal zich ook in de praktijk gerealiseerd heeft. Eén van de grote toepassingsdomeinen is <strong>Blockchain en virtuele munten (cryptocurrencies).</strong></p>


<p>ZKPs worden er gebruikt om de privacy van transacties te verbeteren. In Bitcoin en enkele andere virtuele munten zijn voor elke transactie zowel het adres (het rekeningnummer) van de zender, het adres van de ontvanger, en het getransfereerd bedrag voor iedereen zichtbaar; alles wordt op de blockchain gepubliceerd. Dit is verre van ideaal vanuit privacy-perspectief.</p>


<p>De virtuele munt <a href="https://z.cash/learn/what-are-zk-snarks/"><em>Zcash</em></a> geeft gebruikers de mogelijkheid om m.b.v. ZKPs die drie zaken te verbergen. Daarvoor gebruikt het <em>zk-SNARKs</em> (<em>Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge</em>), die in 2012 ontwikkeld werden en voor het eerst toegepast werden in <a href="https://z.cash/learn/what-are-zk-snarks/"><em>Zcash</em></a>. De S in zk-SNARKs staat voor ‘<em>succint</em>’, oftewel ‘<em>beknopt</em>’. ZKPs in Zcash kunnen &#8216;<em>binnen enkele milliseconden worden geverifieerd en zijn slechts een paar honderd bytes lang’</em>.</p>


<p>Naast privacy worden ZKP ook gebruikt om de schaalbaarheid van blockchains te verhogen. De beperkte capaciteit van blockchains stimuleerde de community om intensief op zoek te gaan naar manieren om beter te schalen, zonder aan veiligheid of snelheid in te boeten. Betere schaalbaarheid betekent dat een transactie minder resources vereist en dus dat de transactiekosten verlagen. Een van de meest veelbelovende aanpakken zijn <em>zk-rollups, </em>die op de Ethereum blockchain gebruikt worden door onder meer <a href="https://www.alchemy.com/starknet"><em>Starknet</em></a><em>, </em><a href="https://www.zksync.io/"><em>ZKsync</em></a><em> </em>en <a href="https://polygon.technology/"><em>Polygon</em></a>. In plaats van elke transactie afzonderlijk op de blockchain te plaatsen, worden ze off-chain gebundeld, uitgevoerd, en wordt enkel het resultaat, samen met een ZKP van correcte uitvoering, op de blockchain geplaatst. Er worden daarbij minder bytes naar de blockchain geschreven, en het verifiëren van het ZKP gaat sneller dan het verifiëren van alle individuele transacties. Er is dus zowel minder opslag als rekenkracht vereist.</p>


<p>Daarnaast wordt gewerkt aan ZKP om te bewijzen dat een smart contract (code) correct uitgevoerd werd. Ook hier is de reden schaalbaarheid; telkens wanneer een functie van een smart contract (code op de blockchain) vandaag aangeroepen wordt, voert elke blockchain node exact dezelfde code uit. Het idee is dat één node het smart contract uitvoert en de correcte uitvoering bewijst. De andere nodes verifiëren het bewijs. Indien dit efficiënter kan dan het uitvoeren van een smart contract, verhogen we de schaalbaarheid.</p>
<h1>Identiteitsbeheer</h1>
<p><a href="/wp-content/uploads/2025/12/eid-be.png"><img loading="lazy" decoding="async" class="alignright size-medium wp-image-24638" src="/wp-content/uploads/2025/12/eid-be-300x189.png" alt="" width="300" height="189" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/eid-be-300x189.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/12/eid-be-768x484.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/12/eid-be.png 900w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>Met behulp van <a href="/controle-over-uw-digitale-identiteit-met-anonieme-credentials-2/">anonieme credentials</a> – die beroep doen op ZKPs – kan een burger selectief eigenschappen over haarzelf prijsgeven, bijvoorbeeld meerderjarigheid. De realiteit is helaas dat anonieme credentials door geen enkel land of regio op grote schaal geadopteerd werden in identiteitsdocumenten. Recenter onderzoek verlegt daarom de focus: op basis van een bestaand identiteitsdocument wordt een ZKP gegenereerd. Recent academisch werkt focuste op het Amerikaanse <a href="https://eprint.iacr.org/2022/878.pdf">paspoort</a> en <a href="https://eprint.iacr.org/2024/2010.pdf">rijbewijs</a>.</p>


<p>De VUB <a href="https://eprint.iacr.org/2025/1266">publiceerde</a> eerder dit jaar onderzoek dat zich richtte op de Belgische identiteitskaart. Het onderzoek gebeurde in het kader van het door <a href="https://www.innoviris.brussels/">Innoviris</a> gefinancierde <a href="https://sdm.brussels/">SDM</a> project. Het is een veelbelovend werk dat weliswaar nog een aantal uitdagingen voor de boeg heeft. Een eerste is de lage efficiëntie; het duurt op een laptop 22 seconden om een bewijs te genereren, wat verder zal toenemen op een smartphone. Een tweede uitdaging is revokatie; wanneer een eID kaart verloren gaat of gestolen wordt en als gevolg daarvan de certificaten op de kaart gerevokeerd worden, mag men niet langer in staat zijn ZKPs te genereren. &nbsp;</p>



<p>De VUB wil nog een stap verder gaan; ZKPs gebruiken om aan te tonen dat een burger bepaalde rechten heeft, zonder verdere persoonsgegevens prijs te geven. Zo zou een burger in de toekomst kunnen bewijzen aan de voorwaarden van <a href="https://www.vlaanderen.be/bouwen-wonen-en-energie/huren-en-verhuren/geconventioneerde-verhuur-en-huur-budgethuren/budgethuren-geconventioneerd-huren">budgethuren</a> te voldoen, zonder verdere details over het waarom prijs te geven.</p>


<p>Itsme kondigde recent haar <a href="https://www.itsme-id.com/en-BE/business/services/qualification">Itsme Qualify</a> aan, waarbij selectief persoonsgegevens prijsgegeven worden m.b.v. ZKPs. Momenteel wordt enkel leeftijdsverificatie ondersteund, maar Itsme is van plan dit verder uit te breiden. Uw auteur kon helaas geen publiek beschikbare details vinden over de werking en slaagde er niet in meer informatie van Itsme te bekomen. Hopelijk is dit gebrek aan transparantie slechts een tijdelijk gegeven, want ZKPs, net zoals alle andere cryptografie, is het veiligst indien alle details publiek zijn en door experten gevalideerd kunnen worden.</p>
<p><a href="/wp-content/uploads/2025/11/image-2.png"><img loading="lazy" decoding="async" class="alignright size-medium wp-image-24559" src="/wp-content/uploads/2025/11/image-2-253x300.png" alt="" width="253" height="300" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/image-2-253x300.png 253w, https://www.smalsresearch.be/wp-content/uploads/2025/11/image-2.png 691w" sizes="auto, (max-width: 253px) 100vw, 253px" /></a>Ten slotte geven we nog mee dat er oplossingen zijn voor identiteitsbeheer die blockchain en ZKPs combineren. <a href="https://www.privado.id/"><em>Privado ID</em></a> is een van de meer zichtbare initiatieven en was tot voor kort gekend onder da naam <em>Polygon ID</em>. Een issuer bevestigt er persoonlijke attributen van een prover &#8211; waaronder bijvoorbeeld de geboortedatum &#8211; door een speciaal gevormde hashwaarde van de set van attributen op een blockchain netwerk zoals Ethereum te plaatsen. De prover kan nu aan de hand daarvan aan een verifier selectief persoonsgegevens &#8211; zoals meerderjarigheid &#8211; over haarzelf bewijzen. Bemerk dat alle ZKPs die dezelfde hashwaarde als basis gebruiken aan elkaar gelinkt kunnen worden. </p>
<h1>Kwantumresistentie</h1>
<p><a href="/wp-content/uploads/2025/12/physics-3864569_640.jpg"><img loading="lazy" decoding="async" class="alignright size-medium wp-image-24635" src="/wp-content/uploads/2025/12/physics-3864569_640-300x200.jpg" alt="" width="300" height="200" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/12/physics-3864569_640-300x200.jpg 300w, https://www.smalsresearch.be/wp-content/uploads/2025/12/physics-3864569_640.jpg 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>Zoals reeds uitvoerig in eerdere Smals Research <a href="/tag/quantum-computing/">artikels</a> toegelicht, is er het gevaar dat krachtige kwantumcomputers in de toekomst moderne publieke sleutelcryptografie zouden kunnen breken.</p>
<p>Technologieën zoals zk-SNARKs en <a href="https://eprint.iacr.org/2017/1066.pdf">Bulletproofs</a>, die toelaten de correctheid van berekeningen te bewijzen, zijn alvast <u>niet</u> kwantumresistent. Onder meer daarom werden in 2018 <a href="https://eprint.iacr.org/2018/046.pdf"><em>zk-STARKs</em></a> ( <em>Zero-Knowledge Scalable Transparent Arguments of Knowledge</em>) geïntroduceerd. Zoals geïllustreerd in onderstaande figuur, blijft de computationele efficiëntie hoog, maar worden de bewijzen wel vele malen groter. Niettemin worden ze reeds gebruikt voor schaalbaarheid en privacy door onder meer <a href="https://www.starknet.io/">StarkNet</a> and <a href="https://starkware.co/starkex/">StarkEx</a>, wat beiden schalingsoplossingen voor Ethereum zijn.</p>
<table>
<tbody>
<tr>
<td width="99">
<p> </p>
</td>
<td style="text-align: center;" width="89">
<p><strong>Kwantum-resistent</strong></p>
</td>
<td style="text-align: center;" width="88">
<p><strong>Tijd prover</strong></p>
</td>
<td style="text-align: center;" width="88">
<p><strong>Tijd verifier</strong></p>
</td>
<td style="text-align: center;" width="88">
<p><strong>Grootte bewijs</strong></p>
</td>
</tr>
<tr>
<td width="99">
<p><em>Zk-SNARKs</em></p>
</td>
<td style="text-align: center;" width="89">
<p>Nee</p>
</td>
<td style="text-align: center;" width="88">
<p>2,3 s</p>
</td>
<td style="text-align: center;" width="88">
<p>10 ms</p>
</td>
<td style="text-align: center;" width="88">
<p> 288 B</p>
</td>
</tr>
<tr>
<td width="99">
<p><em>Bulletproofs</em></p>
</td>
<td style="text-align: center;" width="89">
<p>Nee</p>
</td>
<td style="text-align: center;" width="88">
<p>30 s</p>
</td>
<td style="text-align: center;" width="88">
<p>1100 ms</p>
</td>
<td style="text-align: center;" width="88">
<p>1,3 KB</p>
</td>
</tr>
<tr>
<td width="99">
<p><em>Zk-STARKs</em></p>
</td>
<td style="text-align: center;" width="89">
<p>Ja</p>
</td>
<td style="text-align: center;" width="88">
<p>1,6 s</p>
</td>
<td style="text-align: center;" width="88">
<p>16 ms</p>
</td>
<td style="text-align: center;" width="88">
<p>&gt; 40 KB</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: center;"><em>Vergelijking van drie ZKP oplossingen voor het bewijzen van berekeningen (<a href="https://technorely.com/insights/the-role-of-bulletproofs-in-ensuring-privacy-for-smart-contracts">bron</a>)</em></p>
<p>Kwantumresistente ZKPs voor berekeningen zijn dus mogelijk, al worden de bewijzen een pak groter. Hun uptake door de blockchain community blijft vooralsnog beperkt; zk-SNARKs zijn nog steeds de dominante ZKP-technologie in blockchain context. Ook het werk van de VUB rond identiteitsbeheer maakt vandaag gebruik van zk-SNARKs.</p>
<h1>Conclusie</h1>
<p>Zero-knowledge proofs bestaan al enkele decennia en er is sindsdien heel wat onderzoek en ontwikkeling gebeurd. We identificeerden in dit artikel de twee voornaamste use cases:</p>
<ul>
<li><strong>Privacy en schaalbaarheid op blockchain netwerken.</strong> ZKP technologie laat toe te bewijzen dat een berekening op confidentiële data correct uitgevoerd is. Dit kan relatief snel gebeuren en helpt om blockchainnetwerken schaalbaarder te maken. Hoewel het in theorie ook buiten blockchain toegepast kan worden, zien we dit (nog?) niet in de praktijk. Werken met centrale partijen en wetgeving is vandaag eenvoudiger toe te passen en makkelijker uit te leggen.</li>
<li><strong>Privacy-vriendelijk identiteitsbeheer.</strong> ZKP technologie laat toe om selectief persoonsgegevens over jezelf prijs te geven. Dit kan op basis van klassieke identiteitsdocumenten, zoals de Belgische eID kaart, ofwel kunnen identiteitsdocumenten uitgegeven worden onder de vorm van anonieme credentials. De ZKPs kunnen computationeel erg zwaar worden, zeker wanneer we gebruik maken van kwantumresistente technologie en wanneer van bestaande, officiële identiteitsdocumenten vertrokken wordt. </li>
</ul>
<p>Het gebruik van technologie voor ZKPs en anonieme credentials om de privacy te verbeteren komt met een aantal <a href="https://brave.com/blog/zkp-age-verification-limits/">uitdagingen</a>. We hadden het reeds over efficiëntie, kwantumresistentie en revocatie. Verder moet rekening gehouden worden met het gebrek aan standaarden, het risico dat contextinformatie, zoals een IP adres, de privacy alsnog teniet doet, en de mogelijke impact op de gebruikservaring voor de burger doordat die met een extra venster moet afrekenen.</p>
<p>Wellicht onder meer daardoor stelde Gartner in 2024 dat ZKP-technologie verouderd (<em>“obsolete”</em>) is, wat onder cryptografen tot enige <a href="https://www.linkedin.com/posts/nigel-smart-3196b85_gartners-latest-privacy-hype-cycle-has-a-activity-7226536073517015041-Apu1/">verontwaardiging</a> leidde. Gartner verwijderde de technologie nadien uit hun <a href="https://en.wikipedia.org/wiki/Gartner_hype_cycle">hype cycles</a>. Ondanks het gebruik van ZKPs in Web3 (blockchain) en een beperkt aantal setups voor digitale identiteit, stagneert volgens Gartner de interesse in de technologie. Dit werd eerder dit jaar bevestigd toen <a href="https://sovrin.org/">Sovrin</a> haar blockchain netwerk voor SSI (self-sovereign identity) uitdoofde. De toekomst zal uitwijzen of Gartner gelijk krijgt. Dit zou tragisch zijn, gezien de kracht en veelzijdigheid van deze technologie, waar onderzoekers reeds meerdere decennia aan werken en die nochthans heel wat potentieel zou moeten hebben in de publieke sector.</p>
<p><strong>Aarzel niet ons te contacteren bij interesse!</strong></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Zin, Onzin, en Nut van LLMs: Zijn ze de Hype waard?</title>
		<link>https://www.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/</link>
					<comments>https://www.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/#comments</comments>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 09:22:56 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=24386</guid>

					<description><![CDATA[We hebben waarschijnlijk het moment bereikt waarop de hype over AI op zijn grootst is: men is langs één kant laaiend enthousiast over AI, maar hier en daar raken mensen al gedesillusioneerd. Ook spreekt men meer en meer over een bubbel in de markt van de grote tech-spelers. Maar hoe nuttig zijn LLMs momenteel nu [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-full is-resized"><a href="/wp-content/uploads/2025/11/yin-yang-llm.png"><img loading="lazy" decoding="async" width="520" height="514" src="/wp-content/uploads/2025/11/yin-yang-llm.png" alt="" class="wp-image-24491" style="width:120px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/yin-yang-llm.png 520w, https://www.smalsresearch.be/wp-content/uploads/2025/11/yin-yang-llm-300x297.png 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></a></figure>



<p class="justify-text">We hebben waarschijnlijk het moment bereikt waarop de hype over AI op zijn grootst is: men is langs één kant laaiend enthousiast over AI, maar hier en daar raken mensen al gedesillusioneerd. Ook spreekt men meer en meer over een bubbel in de markt van de grote tech-spelers. Maar hoe nuttig zijn LLMs momenteel nu echt? Kunnen we nog veel verbetering verwachten? En hoe zit dat met die hallucinaties?</p>



<span id="more-24386"></span>



<p class="justify-text">Waarschijnlijk heb je het zelf al meegemaakt: je praat met ChatGPT of een andere slimme chatbot, en deze vertelt je vol vertrouwen iets waarvan je weet dat het niet klopt. Of je bent een developer, en die <a href="https://blog.singleton.io/posts/2025-06-14-coding-agents-cross-a-chasm/">coding assistant werkt best wel goed</a>, tot je <a href="https://martinfowler.com/articles/pushing-ai-autonomy.html">naar wat meer verlangt</a>, maar die nieuw toegevoegde feature aan je programma <a href="https://www.csoonline.com/article/4053635/when-ai-nukes-your-database-the-dark-side-of-vibe-coding.html">hopeloos tekort schiet</a>. En dat zijn nog maar je eigen, bescheiden, ervaringen: wat je hoort van anderen, of op het nieuws of via sociale media, is allicht nog veel extremer: vreugdekreten over hoe we, dankzij AI, een volgende industriële revolutie tegemoet gaan en doemberichten dat mensen hun job erdoor zullen verliezen, versus artikels die vertellen over hoe AI projecten maar blijven mislukken en verhalen over wat voor <a href="https://www.vrt.be/vrtnws/nl/2023/03/24/chatgpt-nepbronnen/">belachelijke of zelfs gevaarlijke hallucinaties</a> uit de AI chatbots blijven komen. Dus wat moet je er nu van denken?</p>



<figure class="wp-block-image alignright size-full is-resized is-style-rounded"><a href="/wp-content/uploads/2025/11/stochastic-parrot.jpeg"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2025/11/stochastic-parrot.jpeg" alt="" class="wp-image-24485" style="width:392px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/stochastic-parrot.jpeg 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/11/stochastic-parrot-150x150.jpeg 150w, https://www.smalsresearch.be/wp-content/uploads/2025/11/stochastic-parrot-300x300.jpeg 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/stochastic-parrot-768x768.jpeg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text">Om dit enigszins beter te begrijpen: een heel kort, niet te technisch, intermezzo over wat LLMs alweer zijn (mijn excuses dat ik daarbij opzettelijk vaag blijf: voor een betere uitleg raad ik de <a href="/chatgpt-een-eerste-indruk/" data-type="post" data-id="17969">blogposts</a> van mijn <a href="/1-jaar-chatgpt/" data-type="post" data-id="19172">collega&#8217;s</a> aan): AI taalmodellen doen voorspellingen over wat het volgende stukje tekst moet zijn, aan de hand van probabiliteiten. Ze zijn getraind op zó veel tekst, dat de <em>in se</em> willekeurige zinnen die eruit rollen, daardoor van een hoge kwaliteit zijn en perfect juist <em>klinken </em>(en het vaak genoeg ook <em>zijn</em>). Echt nadenken zoals een mens doen ze dus niet; het is heel erg &#8220;text based&#8221;. Het is meer het vinden en herhalen van patronen, dan écht begrip; de intelligentie erin ontstaat als <a href="https://nl.wikipedia.org/wiki/Emergentie">emergent verschijnsel</a>. De leukste naam die ik er al voor gehoord heb is &#8220;<a href="https://en.wikipedia.org/wiki/Stochastic_parrot">probabilistische papegaai</a>&#8220;.</p>



<p class="justify-text">Volgens Gartner zitten we nu al <a href="https://www.gartner.com/en/articles/hype-cycle-for-artificial-intelligence">voorbij de piek van opgeblazen verwachtingen en in de trog van desillusie</a>. Ook <a href="https://ai.plainenglish.io/wall-street-is-wrong-about-artificial-intelligence-4d58369ddcb2">andere verslaggevers</a> spreken van een hype of bubbel. Er worden ettelijke miljarden geïnvesteerd in nieuwe datacenters om de AI-machine te voeden, soms zelfs met inbegrip van nieuwe energiecentrales, terwijl de <a href="https://www.computerworld.com/article/3998244/ai-chatbots-see-fast-adoption-but-deliver-minimal-productivity-gains-study-finds.html">winstgevendheid voorlopig nog ver te zoeken</a> is. Is het effectief een bubbel? Dat hangt af van je <a href="https://danielmiessler.com/blog/no-ai-is-not-a-bubble">definitie van bubbel</a>&#8230; Het lijkt in elk geval een grote, soms geostrategische gok, op de volgende technologie die de wereld drastisch kan veranderen en verbeteren, of zelfs veroveren; misschien zelfs vernietigen&#8230; En op moment van schrijven deinzen sommigen er niet van terug om te zeggen dat de luchtbel weldra zal barsten, met als belangrijkste argumenten de <a href="https://graceblakeley.substack.com/p/the-ai-circular-economy">circulaire investeringen</a> van een aantal grote bedrijven in elkaars capaciteit, en het <a href="https://www.bbc.com/news/articles/cpd2qv58yl5o">openstellen van ChatGPT voor erotische inhoud</a>, een zet die meer op cashflow-druk dan op ruimdenkendheid lijkt te duiden.</p>



<p class="justify-text">Bijkomend probleem is dat momenteel ook de <a href="https://olivermolander.medium.com/gartners-ai-hype-cycle-way-passed-its-due-date-and-are-we-entering-a-classical-ml-winter-7c09041c72c4">investeringen in LLM de wind wegnemen uit de zeilen van een aantal andere zeer nuttige AI-technologieën</a> (maar wanneer de storm is gaan liggen kunnen de datacenters misschien wel van pas komen voor deze laatste). Stemmen gaan trouwens op dat we voor échte intelligentie <a href="https://www.forbes.com/sites/robtoews/2023/09/03/transformers-revolutionized-ai-what-will-replace-them/">nóg een andere AI technologie</a> zullen moeten ontwikkelen (al zal het uiteindelijk wel iets zijn dat <a href="https://www.a16z.news/p/bitter-economics">gebruik maakt van alle rekenkracht die we nu uitrollen</a>), en dat <a href="https://thenewstack.io/entering-ai-autumn-why-llms-are-nearing-their-limit/">LLMs stilaan op hun limieten</a> botsen, met steeds kleiner wordende incrementele verbeteringen (en <a href="https://tweakers.net/nieuws/241122/wetenschappers-vinden-fouten-in-445-veiligheidstests-voor-ai-modellen.html">opgeklopte testresultaten</a>). Ondanks <a href="https://www.incompleteideas.net/IncIdeas/BitterLesson.html">de bittere les dat meer data en rekenkracht de grootste vooruitgang</a> mogelijk hebben gemaakt, gaan er nu stemmen op dat men <a href="https://www.businessinsider.com/openai-cofounder-ilya-sutskever-scaling-ai-age-of-research-dwarkesh-2025-11">met LLMs geen Artificial General Intelligence (AGI) zal kunnen bouwen</a>; men zal nieuwe research moeten aanboren. En ondertussen kan men ook aantonen dat de <a href="https://tweakers.net/nieuws/239420/openai-rapport-hallucinaties-zijn-wiskundig-inherent-aan-huidige-ai-aanpak.html">hallucinaties er gewoon bij horen</a> en <a href="https://openai.com/nl-NL/index/why-language-models-hallucinate/">allicht nooit volledig weg te krijgen zullen zijn</a>: onkruid vergaat niet. </p>



<figure class="wp-block-image alignleft size-full is-resized"><a href="/wp-content/uploads/2025/11/llm-garden.jpeg"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2025/11/llm-garden.jpeg" alt="" class="wp-image-24489" style="width:424px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/llm-garden.jpeg 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/11/llm-garden-150x150.jpeg 150w, https://www.smalsresearch.be/wp-content/uploads/2025/11/llm-garden-300x300.jpeg 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/llm-garden-768x768.jpeg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="justify-text">Maar in een tuin waar onkruid groeit, kan men toch ook goede dingen laten groeien, met wat moeite. En in zo&#8217;n tuin hebben LLMs wel degelijk hun nut: daar waar een taak vooral gaat over tekst en taal, zijn ze bijvoorbeeld heel krachtig (denk aan samenvatten, vertalen, zaken verzinnen, zeer eenvoudige redeneringen opbouwen, &#8230;). En ook voor programmeren (wat een soort omgaan met een specifiek soort taal is), merken we enthousiasme van vele developers die hun productiviteit zagen stijgen (maar <a href="/ai-om-de-veiligheid-van-de-code-te-verbeteren-deel-1-veiligheid-van-de-gegenereerde-code/">security blijft een aandachtspunt!</a>). Als algemene slimme assistent kan het ook een rol spelen, zolang de gebruiker zelf voldoende onderlegd is in een onderwerp en kritisch is ingesteld. En misschien moeten ze gewoon nog verder <a href="https://jenson.org/boring/">evolueren tot de beste tool voor een bepaalde niche</a> van taken.</p>



<p class="justify-text">Ook zelf heb ik een genuanceerd verhaal te vertellen: in mijn <a href="/vibe-coding-met-agentic-ides/" data-type="post" data-id="22499">vorige blogpost</a> had ik het over een aantal kleine successen met <a href="https://www.infoworld.com/article/4058076/vibe-coding-and-the-future-of-software-development.html">vibe coding</a>, en de beperkingen van het AI, wanneer de taken groter of complexer worden. Hetzelfde zie ik in het werk dat ik sindsdien heb verricht: het analyseren en vertalen van legacy code met behulp van deze taalmodellen. Ook daar dus een gemengd succes: geen toverstokjes, nauwelijks of moeilijk te automatiseren, maar toch een zichtbare tijdswinst bij het begrijpen van middelmatig grote en het herschrijven van kleine stukken code van dit soort projecten (meer details daarover in een komende blogpost).</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p class="justify-text">Een LLM is slechts één van de vele intelligente technologieën die we momenteel aan onze vingertippen hebben, al zij het wel de meest toegankelijke en zichtbare. Misschien vandaar zowel de hype als de controverse?</p>



<p class="justify-text">Zijn LLMs nuttig? Ik zou durven argumenteren van wel. Met de huidige stand van de technologie is het echter van groot belang dit te nuanceren: zet een LLM als <a href="https://leadershiplighthouse.substack.com/p/i-went-all-in-on-ai-the-mit-study">powertool ter beschikking</a> van een menselijke expert! <strong>De echte waarde ligt dus niet in vervanging, maar in augmentatie</strong>. Laten we het komende jaar kijken of alle <a href="/ai-agents-voordelen-uitdagingen-en-usecases/" data-type="post" data-id="22407">agent-based systemen</a> hier verandering in brengen&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Circom &#8211; Programmeerbare zero-knowledge proofs</title>
		<link>https://www.smalsresearch.be/circom-programmeerbare-zero-knowledge-proofs/</link>
		
		<dc:creator><![CDATA[Kristof Verslype]]></dc:creator>
		<pubDate>Wed, 03 Dec 2025 15:34:03 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Quick reviews]]></category>
		<category><![CDATA[blockchain]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[Privacy]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/circom-programmeerbare-zero-knowledge-proofs/</guid>

					<description><![CDATA[(NL) Circom is een raamwerk voor programmeerbare zero-knowldge bewijzen. Het laat toe om op een efficiënte wijze kennis of eigenschappen te bewijzen, terwijl de achterliggende data waar die kennis of eigenschappen uit afgeleid zijn, verborgen blijven. (FR) Circom est un framework pour les preuves à divulgation nulle de connaissance programmables. Il permet de prouver efficacement [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>(NL)</strong> Circom is een raamwerk voor programmeerbare zero-knowldge bewijzen. Het laat toe om op een efficiënte wijze kennis of eigenschappen te bewijzen, terwijl de achterliggende data waar die kennis of eigenschappen uit afgeleid zijn, verborgen blijven.</p>



<p><strong>(FR)</strong> Circom est un framework pour les preuves à divulgation nulle de connaissance programmables. Il permet de prouver efficacement des connaissances ou des propriétés, tout en gardant secrètes les données sous-jacentes à partir desquelles ces connaissances ou propriétés sont dérivées.</p>



<div data-wp-interactive="core/file" class="wp-block-file"><object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="/wp-content/uploads/2025/12/QR-circom2.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of QR-circom2."></object><a id="wp-block-file--media-7c8a9e48-85df-4bc2-b277-d80e5eb26343" href="https://www.smalsresearch.be/wp-content/uploads/2025/12/QR-circom2.pdf">QR-circom2</a><a href="/wp-content/uploads/2025/12/QR-circom2.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-7c8a9e48-85df-4bc2-b277-d80e5eb26343">Download</a></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Guardrails: hou je AI binnen de lijntjes</title>
		<link>https://www.smalsresearch.be/guardrails-hou-je-ai-binnen-de-lijntjes/</link>
		
		<dc:creator><![CDATA[Bert Vanhalst]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 08:41:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=24454</guid>

					<description><![CDATA[Guardrails helpen AI-toepassingen veiliger en betrouwbaarder te maken. Ontdek hier hoe.]]></description>
										<content:encoded><![CDATA[
<p><em>Cet article est aussi disponible <a href="/garde-fous-delimitez-votre-ai/">en français</a>.</em></p>



<p>De wereld van AI evolueert razendsnel, en met de opkomst van <a href="/kwaliteit-van-een-generatief-vraag-antwoordsysteem/">Retrieval-Augmented Generation (RAG)</a> openen zich nieuwe mogelijkheden om data en taalmodellen slim te combineren.</p>



<p>RAG-systemen combineren het generatieve vermogen van LLM’s met het ophalen van relevante, actuele informatie uit databronnen. Dit maakt ze krachtiger, maar ook complexer: ze zijn afhankelijk van de kwaliteit van zowel het model als de gebruikte data, en lopen risico op het verspreiden van verouderde, onjuiste of ongepaste informatie.</p>



<p>In een <a href="/praktische-ervaringen-met-automatische-rag-evaluatie/">vorige blogpost</a> bespraken we hoe automatische evaluaties kunnen helpen om de kwaliteit te meten van een RAG-systeem en het interatief te verbeteren. Maar kwaliteit alleen is niet genoeg. Om AI-systemen niet alleen <em>goed</em> te laten functioneren, maar ook <em>veilig</em> en <em>verantwoord</em>, zijn guardrails nodig. Onder guardrails verstaan we de richtlijnen, technische beperkingen en ethische kaders die ervoor zorgen dat AI-systemen binnen aanvaardbare grenzen opereren. Ze voorkomen ongewenste of schadelijke output en zorgen ervoor dat AI-systemen aansluiten bij menselijke waarden en maatschappelijke normen.</p>



<p>Wat zijn die guardrails precies en hoe zet je ze effectief in? Dat verkennen we in deze blogpost.</p>



<h1 class="wp-block-heading">De nood aan guardrails</h1>



<p>LLM-gebaseerde toepassingen brengen verschillende risico’s met zich mee die de nood aan sterke guardrails duidelijk maken. Zonder passende bescherming kunnen de systeeminstructies ontfutseld worden. Die geven inzicht in interne logica en beveiligingsmechanismen, en die zie je dus liever niet onthuld. Ook bestaat het risico op privacy­schendingen wanneer persoonlijke gegevens bij externe modelproviders terechtkomen. Daarnaast kunnen modellen schadelijke antwoorden genereren, variërend van haatspraak tot zelfbeschadigingsadviezen, of incorrecte informatie door hallucinerende output. Off-topic vragen kunnen leiden tot misbruik van de toepassing en de kosten doen oplopen, terwijl ongepaste of niet-conforme antwoorden reputatieschade kunnen veroorzaken.</p>



<p>Om al deze redenen zijn robuuste guardrails essentieel, omdat ze een buffer vormen tegen deze uiteenlopende risico’s en helpen garanderen dat AI-toepassingen veilig, betrouwbaar en conform de verwachtingen van gebruikers en organisaties functioneren.</p>



<h1 class="wp-block-heading">Methodes en technieken</h1>



<p>Guardrails worden doorgaans op twee niveaus ingezet: vlak vóór de input het taalmodel bereikt (<em>inputfilter</em>), of net na het genereren van de output maar vóór die bij de eindgebruiker terechtkomt (<em>outputfilter</em>).</p>



<figure class="wp-block-image"><a href="/wp-content/uploads/2025/11/with_and_without_guardrails.png"><img loading="lazy" decoding="async" width="1862" height="923" src="/wp-content/uploads/2025/11/with_and_without_guardrails.png" alt="Input &amp; output guardrails" class="wp-image-24456" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/with_and_without_guardrails.png 1862w, https://www.smalsresearch.be/wp-content/uploads/2025/11/with_and_without_guardrails-300x149.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/with_and_without_guardrails-768x381.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/11/with_and_without_guardrails-1024x508.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/11/with_and_without_guardrails-1536x761.png 1536w" sizes="auto, (max-width: 1862px) 100vw, 1862px" /></a></figure>



<p></p>



<p>Input &amp; output guardrails &#8211; bron: <a href="https://github.com/guardrails-ai/guardrails">https://github.com/guardrails-ai/guardrails</a></p>



<p>In grote lijnen bestaan er vier technieken om guardrails concreet te implementeren.</p>



<ul class="wp-block-list">
<li><strong>LLM-native guardrails</strong> zijn ingebouwde veiligheidsmechanismen die modelproviders zelf voorzien, zoals het vermijden van schadelijke outputs of beperkingen bij het volgen van bepaalde instructies. Ze bieden een eerste verdedigingslinie, maar moeten doorgaans aangevuld worden met één of meerdere van de technieken hieronder.</li>



<li>Bij<strong> prompt-gebaseerde guardrails</strong> worden specifieke instructies toegevoegd aan de prompt om het gedrag van het model te beïnvloeden. Een typisch voorbeeld is om het model te verplichten om uitsluitend te antwoorden op basis van aangeleverde contextinformatie (via RAG) zodat het geen ongecontroleerde of ongewenste output genereert. Een ander voorbeeld is het toevoegen van instructies om te vermijden dat het AI-systeem medisch advies geeft. In het voorbeeld hieronder zijn instructies te zien die toegevoegd worden aan de prompt om te vermijden dat de toepassing medisch advies geeft, samen met een voorbeeld van een conversatie waarbij de toepassing het gewenste antwoord geeft.<br><figure><a href="/wp-content/uploads/2025/11/prompt-engineering.png"><img loading="lazy" decoding="async" width="1017" height="417" class="size-full wp-image-24457" src="/wp-content/uploads/2025/11/prompt-engineering.png" alt="Prompt hardening" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/prompt-engineering.png 1017w, https://www.smalsresearch.be/wp-content/uploads/2025/11/prompt-engineering-300x123.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/prompt-engineering-768x315.png 768w" sizes="auto, (max-width: 1017px) 100vw, 1017px" /></a></figure><br></li>



<li><strong>Regelgebaseerde guardrails</strong> werken deterministisch met filters op basis van exacte woorden of reguliere expressies. Op die manier kan gescreend worden op bepaalde woorden of onderwerpen, en kunnen eenvoudige vormen van vertrouwelijke informatie gefilterd worden, zoals ID’s, telefoonnummers of e-mailadressen.</li>



<li><strong>LLM/ML-gebaseerde guardrails</strong> maken gebruik van machine learning modellen of zogenaamde <em>LLM-judges</em> die veel beter overweg kunnen met nuance, intentie en context. Ze kunnen zowel input als output beoordelen en kunnen deze classificeren, bijvoorbeeld om schadelijke inhoud of <em>prompt injections</em> te detecteren (dit zijn pogingen van gebruikers om het gedrag van de toepassing te manipuleren via de prompt). Daarnaast kunnen ze gevoelige informatie filteren en fact-checking uitvoeren door na te gaan of alle uitspraken in de output effectief worden ondersteund door de aangeleverde context, zoals bij RAG.</li>
</ul>



<p>Elke techniek heeft een eigen nut, complexiteit en kost. Het is daarom aangeraden om eerst de specifieke risico’s voor een bepaalde usecase te evalueren en daarna te bepalen welke guardrails echt nodig zijn. Begin met de eenvoudigste methodes (prompt-gebaseerd en regelgebaseerd) en schakel pas over op complexere technieken (LLM/ML gebaseerd) wanneer dat noodzakelijk is. Deze laatste brengen namelijk extra latency en kosten met zich mee.</p>



<h1 class="wp-block-heading">Guardrail tools</h1>



<p>Er bestaan heel wat tools die deze technieken ondersteunen en het eenvoudiger maken om guardrails in een toepassing te integreren. <strong>Frameworks</strong> bieden een volledige omgeving om guardrails te definiëren, combineren en orkestreren. Ze laten je regels, workflows en validatiestappen configureren zonder alles zelf te moeten bouwen. Voorbeelden zijn <a href="https://github.com/guardrails-ai/guardrails">Guardrails AI</a>, <a href="https://github.com/protectai/llm-guard/">LLM Guard</a> en <a href="https://docs.nvidia.com/nemo/guardrails">NVIDIA NeMo Guardrails</a>.</p>



<p>Daarnaast zijn er <strong>API’s en services</strong> die specifieke functionaliteiten aanbieden, zoals het detecteren van schadelijke inhoud, het filteren van gevoelige gegevens of het opsporen van jailbreaks. Deze kun je rechtstreeks vanuit je toepassing aanroepen. Denk hierbij aan <a href="https://learn.microsoft.com/en-us/azure/ai-services/content-safety/overview">Azure AI Content Safety</a> of <a href="https://platform.openai.com/docs/guides/moderation">OpenAI Moderation API</a>.</p>



<p>Onder de motorkap maken deze tools gebruik van een mix van ML-modellen, LLM-judges en regelgebaseerde technieken. Voorbeelden van ML-modellen zijn <a href="https://www.llama.com/docs/model-cards-and-prompt-formats/llama-guard-3/">Llama Guard</a> en <a href="https://www.llama.com/docs/model-cards-and-prompt-formats/prompt-guard/">Prompt Guard</a>.</p>



<p>Uit onze eigen ervaringen blijkt dat bepaalde guardrailtools merkbaar minder nauwkeurig presteren in het Nederlands en Frans ten opzichte van het Engels. We zien daarbij soms ook false positives, bijvoorbeeld wanneer selfharm-detectie onschadelijke zinnen foutief als risicovol markeert. Voor eenvoudige toepassingen met een laag risicoprofiel en uitsluitend publieke data lijkt de meerwaarde van extra guardrailtools beperkt. In zulke gevallen volstaan doorgaans de ingebouwde veiligheidsmechanismen van de LLM in combinatie met een goed ontworpen RAG-prompt.</p>



<h1 class="wp-block-heading">Conclusie</h1>



<p>Samengevat is het belangrijk om guardrails steeds risicogestuurd en gelaagd in te zetten. Begin met het identificeren van de risico’s binnen de specifieke usecase en kies vervolgens de passende technieken, waarbij eenvoudige methodes de voorkeur krijgen en complexere oplossingen pas worden toegevoegd wanneer dat echt nodig is. Hoewel een combinatie van LLM-native, prompt-gebaseerde, regelgebaseerde en ML/LLM-gebaseerde guardrails een robuustere bescherming biedt, blijft het essentieel om te beseffen dat geen enkel systeem volledige veiligheid garandeert. Input- en outputfilters kunnen zowel false positives als false negatives opleveren. ML/LLM-gebaseerde guardrails brengen bovendien extra kosten en latency met zich mee. Een continue monitoring van de AI-toepassing is aangeraden om nieuwe kwetsbaarheden tijdig op te sporen en aan te pakken.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
