<?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>[FR] &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/category/fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Wed, 15 Apr 2026 14:43:05 +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>[FR] &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Legacy &#038; IA : Voyagez dans le Temps depuis votre Terminal</title>
		<link>https://www.smalsresearch.be/legacy-ai-voyagez-temps-terminal/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 09:48:59 +0000</pubDate>
				<category><![CDATA[[FR]]]></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=28963</guid>

					<description><![CDATA[Depuis l'essor de l'engouement pour les grands modèles de langage, la plupart des développeurs ont sans doute déjà pu constater le gain de productivité que ces outils peuvent offrir, à condition de les utiliser correctement. Dans cet article de blog, nous explorons la possibilité d'aller plus loin : l'IA offre-t-elle une aide suffisante afin de maîtriser le 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">Depuis l&#8217;essor de l&#8217;engouement pour les grands modèles de langage, la plupart des développeurs ont sans doute déjà pu constater le gain de productivité que ces outils peuvent offrir, à condition de les utiliser correctement. Dans cet article de blog, nous explorons la possibilité d&#8217;aller plus loin&nbsp;: l&#8217;IA offre-t-elle une aide suffisante afin de maîtriser le legacy code&nbsp;?</p>



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



<p class="justify-text">Le recours aux grands modèles de langage <a href="https://www.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/">(Large Language Model &#8211; LLM)</a> en programmation est en effet bien connu à présent&nbsp;: cela va de la formulation de questions à un chatbot (&#8220;comment écrire un algorithme dans Java qui&#8230;&#8221;), à un <a href="https://www.smalsresearch.be/llms-pour-code/"><em>code completion</em> de plus en plus intelligent et étendu</a> (saisie automatique de ce que vous souhaitez taper dans l&#8217;éditeur), jusqu&#8217;au <a href="https://www.smalsresearch.be/vibe-coding-avec-les-ides-agentique/"><em>vibe coding</em> complet </a>(dans l&#8217;IDE, ou même simplement dans un terminal)&nbsp;: des agents IA rédigent, à l&#8217;aide de prompts, des pans entiers de code sur votre machine &#8211; oui, même des applications fonctionnelles.</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">Cette méthode de travail a déjà été décrite <a href="https://www.smalsresearch.be/vibe-coding-avec-les-ides-agentique/">dans un article de blog précédent</a>, et le mises en garde, les points auxquels il faut prêter attention, restent d&#8217;actualité&nbsp;: surveiller en permanence, remettre les choses en question, vérifier, et fournir à l&#8217;IA la bonne quantité de contexte utile (un art en soi). Cependant, le traitement du <strong><em>code legacy</em></strong> pose encore un certain nombre de problèmes supplémentaires :</p>



<ul class="wp-block-list">
<li class="justify-text">Il ne s&#8217;agit pas d&#8217;une nouvelle construction (ou <em>greenfield</em>)&nbsp;: les décisions du passé, souvent obscures, ont un impact considérable.</li>



<li class="justify-text">Dans de nombreux cas, il existe déjà une masse de code.</li>



<li class="justify-text">Souvent, la compilation, l’exécution et le test du code nécessitent une technologie spécifique, qui est elle-même obsolète et parfois difficile à installer ou à simuler.</li>



<li class="justify-text">En tant qu’humain, on n’est souvent plus au courant du comment et du pourquoi de la base de code existante, ce qui rend plus difficile l’évaluation critique des résultats de l’IA.</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&nbsp;: quelques conseils</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>Nous avons déjà découvert ces astuces simples dans le cadre de notre travail sur le code legacy et l&#8217;IA, mais elles s&#8217;appliquent plus largement à tous les projets de Vibe Coding.</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);">Nettoyage en profondeur&nbsp;: avant de laisser une IA se pencher sur une base de code, vous devez vous assurer qu&#8217;elle ne contient aucune donnée privée, aucun mot de passe ni aucune autre information sensible&nbsp;!</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);">Planification&nbsp;: demandez des options et reportez l&#8217;exécution. En effet, lorsqu&#8217;on maîtrise soi-même ce que l&#8217;on souhaite réaliser, on a certainement déjà une idée précise de l&#8217;objectif à atteindre. Il peut toutefois s&#8217;avérer utile de commencer une conversation avec l&#8217;IA en gardant l&#8217;esprit ouvert et de lui demander des idées et des options (par exemple en matière d&#8217;architecture ou de technologie utilisée) pour concrétiser sa vision générale (tout en précisant à l&#8217;IA, parfois trop zélée, qu&#8217;il ne s&#8217;agit encore que de planification). Demandez spécifiquement plusieurs suggestions&nbsp;! Cela peut aider à réfléchir ensemble et à enrichir vos propres idées avec davantage d’inspiration. Au fil de la conversation, explorez plus en profondeur les options qui vous plaisent le plus, puis n’ajoutez votre expertise personnelle que pour affiner les idées de l’IA, jusqu’à ce qu’un plan d’action concret et aussi optimal que possible ait vu le jour. Ce n’est qu’ensuite que nous passerons à une mise en œuvre effective..</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);">Indirection et outils. En particulier lorsque vous travaillez via une CLI (Command Line Interface), ni vous ni l’IA n’avez immédiatement conscience de tous les outils existants qui pourraient être exploités pour atteindre vos objectifs. Laissez l’IA rechercher les outils susceptibles de vous aider, et aidez-la à les installer. Plus vous pouvez accomplir de tâches à l&#8217;aide d&#8217;outils, moins le contexte est encombré par un travail &#8220;manuel&#8221; inutile effectué par l&#8217;IA elle-même (sans parler des économies réalisées en termes de consommation de tokens). Il existe par exemple toutes sortes d&#8217;outils d&#8217;analyse statique de code permettant d&#8217;évaluer et de maintenir la qualité des lignes de code que vous écrivez. L&#8217;IA n&#8217;a souvent aucun mal à mettre en œuvre bon nombre des suggestions fournies après l&#8217;analyse.</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);">Mode Expert&nbsp;: parfois, les outils standard ne suffisent pas pour aider suffisamment l&#8217;IA à accomplir ce que vous souhaitez qu&#8217;elle fasse. Dans ce cas, vous pouvez d&#8217;abord laisser l&#8217;IA écrire ses propres outils. De cette manière, il est possible de s&#8217;assurer que le résultat, ou l&#8217;output de l&#8217;outil, soit concis et synthétique pour les tâches suivantes, afin de ne pas surcharger le contexte. Les <em>context windows</em> des LLM s&#8217;agrandissent certes de plus en plus, mais il faut tout de même veiller à ce qu&#8217;elles ne contiennent que les éléments les plus utiles (attention au <a href="https://redis.io/blog/context-rot/"><em>context rot</em></a>).</li>
</ul>
</div>
</div>



<p>Nous avons donné une définition très large du code legacy dans un <a href="https://www.smalsresearch.be/code-herite-meilleures-pratiques-ia/">précédent article de blog</a>. Commençons donc par préciser ce que nous entendons par &#8220;legacy&#8221; et par mieux illustrer le &#8220;degré de difficulté&#8221; des projets legacy.</p>



<h2 class="wp-block-heading">&#8220;Ancien&#8221; code&nbsp;: une multitude de possibilités</h2>



<p class="justify-text">Il n’existe pas vraiment de définition officielle du code legacy&nbsp;; généralement, on parle de l’utilisation d’une technologie qui n’est plus prise en charge, difficile à maintenir, ou simplement de &#8220;code dont on hérite de quelqu’un d’autre&#8221;. Il s’agit évidemment toujours de code encore en service, et donc important. Ironiquement, les applications les plus critiques sont souvent celles qui existent depuis des années et auxquelles on &#8220;fait confiance&#8221; depuis longtemps, mais sans les entretenir correctement.</p>



<p class="justify-text">L&#8217;IA peut nous aider à entretenir n&#8217;importe quel code ; nous allons donc présenter un spectre allant du code legacy le plus ancien et le plus problématique au code de projets ne nécessitant qu&#8217;une petite mise à jour. À une extrémité du spectre, on trouve des programmes écrits dans des langages de programmation obsolètes, selon une architecture dépassée, utilisant des bases de données qui ne sont plus d’actualité et fonctionnant sur des serveurs équipés de systèmes d’exploitation qui ne sont plus pris en charge&nbsp;: avec ces géants, on doit souvent craindre une défaillance critique à la moindre modification erronée. À l’autre extrémité, on trouve des logiciels assez bien entretenus, mais qui utilisent une bibliothèque logicielle qui n’est plus la version la plus récente&nbsp;: il est généralement très facile de les remettre entièrement à jour. Enfin, quelque part entre les deux, on trouve des applications pour lesquelles la plupart des développeurs n’utiliseraient pas encore le terme<em> Legacy</em>, mais qui nécessitent néanmoins des migrations complexes, avec par exemple un ou deux frameworks obsolètes à remplacer.</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">Que pouvons-nous en faire&nbsp;? Les LLM offrent-ils d&#8217;autres possibilités en fonction de la position du projet sur ce spectre&nbsp;? Jusqu&#8217;à présent, nos recherches se sont concentrées sur la partie gauche de ce spectre&nbsp;; la suite de cet article portera donc davantage sur les possibilités d&#8217;aborder le &#8220;véritable&#8221; legacy. Plus tard dans l&#8217;année, nous approfondirons également ce que nous pouvons faire en matière de migrations et d&#8217;updates.</p>



<h2 class="wp-block-heading">Utilisation des LLM sur des bases de code legacy</h2>



<p class="justify-text">Il est clair qu&#8217;un simple prompt &#8220;réécris ce programme selon les normes modernes&#8221; ne fonctionnera pas (même si certains fournisseurs affirment que cela sera bientôt possible). Nous devrons poser des questions un peu plus concrètes et décomposer le travail en plusieurs étapes. Il y a en fait deux choses que nous pouvons faire avec notre code legacy&nbsp;: le réécrire et le documenter.</p>



<h3 class="wp-block-heading">Réécriture du code legacy</h3>



<p class="justify-text">Lorsque nous commençons à réécrire du code, nous devons souvent tenir compte du fait que la reconstruction complète d’un très grand projet est une tâche trop difficile. Il est possible d’obtenir des &#8220;quick wins&#8221; en réécrivant stratégiquement certaines parties d’un projet, qui seront ensuite réutilisées dans un contexte plus large, où une équipe humaine et l’IA reconstruiront l’application dans les règles de l’art. Nos expériences nous ont montré qu’il était trop ambitieux d’attendre de l’IA qu’elle utilise une architecture entièrement nouvelle tout en traduisant l’ancien code vers le nouveau. En revanche, il est possible de &#8220;vibe coder&#8221; une grande partie de la charpente typique d’un nouveau projet, puis d’y injecter de manière ciblée un certain nombre de morceaux de code qui sont des traductions de parties d’un projet legacy. En tant qu’êtres humains, notre tâche consiste à indiquer clairement quelle architecture nous attendons et quelles sont les règles de qualité du code nouveau.</p>



<p class="justify-text">L&#8217;un des principaux défis liés à la réécriture de code à l&#8217;aide de l&#8217;IA consiste à tester l&#8217;exactitude de la traduction&nbsp;: le code fait-il toujours ce qu&#8217;il faisait auparavant (indépendamment du fait que cela soit souhaitable, car même le business case peut parfois être trop obsolète dans le cas d&#8217;un projet legacy)&nbsp;? Pour les projets relativement récents, il existe déjà de nombreux tests que nous pouvons effectuer pour vérifier l&#8217;exactitude, mais avec les anciens systèmes legacy, nous sommes souvent confrontés au problème que l&#8217;application est simplement testée en production, ou du moins avec des données de production&nbsp;: il n&#8217;y a pas de tests spécifiques ni même de données de test pouvant être utilisées en toute sécurité. Dans ce cas, il s&#8217;agit de créer un environnement dans lequel nous pouvons tester le nouveau code en toute sécurité, ce qui est généralement un travail ad hoc et demande une certaine créativité. Nous ne pouvons pas envoyer de données de production vers le cloud, nous devons donc nous assurer que le LLM ne puisse pas les lire. Ce serait plus simple si nous pouvions utiliser des LLM fonctionnant en local, mais pour l&#8217;instant, ceux-ci ne sont pas encore assez puissants (quand ils sont disponibles) pour effectuer des tâches aussi complexes avec du code legacy.</p>



<p class="justify-text">L&#8217;interface utilisateur constitue un autre défi&nbsp;: dans les projets plus anciens, celle-ci est souvent obsolète et il faut construire une nouvelle GUI à partir de zéro. Cela pose toutefois le problème de ne plus disposer d&#8217;une base de référence dans l&#8217;ancien projet&nbsp;: la nouvelle interface devra généralement être testée manuellement par des personnes. J&#8217;espère toutefois que nous verrons des progrès dans ce domaine dans un avenir proche, en ce qui concerne les possibilités de l&#8217;IA. En effet, nous voyons déjà apparaître des systèmes capables de contrôler l&#8217;intégralité de votre ordinateur (comme OpenClawd), et l&#8217;intégration avec des frameworks plus traditionnels pour le test d&#8217;une interface graphique fait également partie des possibilités.</p>



<p class="justify-text">Enfin, les petits projets legacy constituent également un domaine où nous pouvons obtenir des résultats rapides. Si nous utilisons un programme legacy petit à moyen, doté de fonctionnalités limitées et d’une GUI simple, ou présentant un input et un output clairs en cas de batch processing, et qu’il n’existe aucun business case justifiant son intégration dans une autre méthode de travail, nous pouvons alors tenter une approche directe pour construire une version moderne dans un nouveau langage de programmation à l’aide de l’IA. Dans ce cas, il faudra tout de même bien tester et adopter une approche structurée avec un accompagnement des développeurs humains, mais il est possible d&#8217;essayer cette méthode pour des applications non critiques. Une application à usage interne, par exemple, constitue généralement un bon premier candidat.</p>



<h3 class="wp-block-heading">Documentation du code legacy</h3>



<p class="justify-text">Parfois, la réécriture du code legacy avec l&#8217;IA est un peu trop ambitieuse, ou nous avons besoin de plus d&#8217;informations avant de nous y risquer. Il peut être intéressant de se tourner d’abord vers la documentation&nbsp;: l’IA peut également nous aider à faire en sorte que l’exploration d’une base de code legacy ressemble un peu moins à de l’archéologie de haut niveau.</p>



<p class="justify-text">Expliquer un morceau de code de petite à moyenne taille et en extraire la logique business, ou analyser un morceau plus important et en expliquer la structure et l’architecture, tout cela est tout à fait possible avec les grands modèles de langage actuels. Il est toutefois possible d’aller plus loin&nbsp;: il est possible de créer des outils d’IA pour l&#8217;aider à explorer la base de code et, par exemple, à générer des diagrammes illustrant les dépendances entre les segments de code. Ou bien on peut lui faire écrire des scripts afin de structurer soigneusement ses conclusions après chaque analyse dans un fichier texte pour elle-même et un PDF destiné à l’utilisateur humain.</p>



<p class="justify-text">Il est également possible d&#8217;adopter une approche hiérarchique&nbsp;: commencer par explorer la base de code, puis approfondir progressivement l&#8217;analyse des différents modules afin d&#8217;obtenir de plus en plus de détails et de compléter l&#8217;analyse. Il s&#8217;agit là de l&#8217;approche top-down, que nous pouvons toutefois compléter par une version bottom-up&nbsp;: une fois que nous sommes allés en profondeur, nous pouvons à nouveau demander un résumé afin de construire une présentation mieux documentée de la situation dans son ensemble.</p>



<p class="justify-text">Il est toutefois important ici de savoir à l&#8217;avance ce que nous souhaitons exactement atteindre. Une analyse générale d’une base de code par l’IA peut s’avérer intéressante lorsque les utilisateurs humains ne connaissent pas du tout le système et souhaitent disposer de points de repère pour se familiariser avec celui-ci.</p>



<p class="justify-text">Cependant, lorsque l&#8217;objectif est de pouvoir assurer la maintenance de la base de code, il est préférable de mettre en place un système proposant un chatbot qui connaît le contexte spécifique et les particularités du projet legacy, et qui peut répondre à des questions très ciblées à ce sujet. Cela est possible, par exemple, dans CoPilot Studio. Si cela ne fonctionne pas correctement, il est possible d&#8217;envisager de construire manuellement une knowledge base en utilisant l&#8217;IA qui pourra ensuite être utilisée par l&#8217;IA pour répondre aux questions.</p>



<p class="justify-text">Une autre option consiste à extraire des informations spécifiques de la base de code, telles que la logique business par module individuel, ou du pseudocode pouvant aider les développeurs humains à réimplémenter cette logique dans un autre projet. (Et bien sûr, une IA peut également être mise à contribution lors de cette deuxième étape).</p>



<p class="justify-text">Avec une touche de créativité, nous pouvons concevoir une meilleure approche pour la plupart des analyses ad hoc que celle consistant à &#8220;se contenter d’analyser à tout va&#8221;. Et la documentation d’un système legacy peut tout simplement constituer une première étape vers sa réécriture.</p>



<p></p>



<p></p>



<h2 class="wp-block-heading" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)">Conclusion&nbsp;: professionnels recherchés</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">Comme mentionné précédemment, les LLM nous offrent progressivement des possibilités très puissantes pour traiter nos bases de code legacy, surtout lorsque nous avons accès aux modèles volumineux et puissants disponibles aujourd’hui. Nous constatons toutefois qu’il s’agit en réalité d’une boîte à outils très bien fournie, comprenant plusieurs &#8220;power tools&#8221; puissants, et que nous devons savoir ce que nous voulons en faire et comment les utiliser au mieux.</p>



<p class="justify-text">Tout n’est pas encore entièrement automatisé&nbsp;: nous aurons donc toujours besoin de bons professionnels pour tirer le meilleur parti de ces outils. Notre conseil aux développeurs est de ne surtout pas avoir peur de l’IA et de l’utiliser régulièrement lors de l’analyse et du développement de logiciels&nbsp;: l’expérience est la meilleure école pour former les bons professionnels dont nous avons besoin dans ce domaine.</p>



<p class="justify-text">Pour l’instant, la conclusion est donc la suivante&nbsp;: pour le code legacy, l’IA n’est pas une panacée, mais une boîte à outils pratique qu’il vaut mieux essayer dans le cadre d’une approche plus large. Comme indiqué, nous nous pencherons plus tard dans l&#8217;année sur le milieu et la partie droite du spectre du code legacy. Nous pensons qu&#8217;il existe ici davantage de possibilités d&#8217;automatisation de certains workflows, surtout si nous exploitons davantage les agents. Il est donc possible que, pour des projets un peu plus simples et répétitifs, nous puissions évoluer du &#8220;professionnel&#8221; vers &#8220;l&#8217;usine&#8221;.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Protéger ses données des administrateurs&#160;: l’informatique confidentielle « on-premise »</title>
		<link>https://www.smalsresearch.be/proteger-ses-donnees-des-administrateurs-linformatique-confidentielle-on-premise/</link>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Tue, 17 Mar 2026 07:30:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></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=26501</guid>

					<description><![CDATA[Dans cet article et le suivant, nous nous penchons sur la possibilité de déployer des EEC sur notre propre infrastructure (on-premise). L’objectif est triple : bénéficier de la puissance de l’informatique confidentielle pour protéger les données et permettre de nouveaux cas d’usage, tout en gardant un certain contrôle sur la pile logicielle et matérielle, et ainsi renforcer la confiance de nos clients.]]></description>
										<content:encoded><![CDATA[
<p><em>Dit artikel is ook beschikbaar&nbsp;in het&nbsp;<a href="/je-data-beschermen-tegen-beheerders-on-premise-vertrouwelijke-it/">Nederlands</a>.</em></p>



<p>Et si vos administrateurs système pouvaient accéder à vos données sensibles sans que vous le sachiez&nbsp;? L’informatique confidentielle propose une solution&nbsp;: isoler les données, même de ceux qui gèrent l’infrastructure. Mais comment&nbsp;?</p>



<p>L’informatique confidentielle regroupe un ensemble de technologies permettant de protéger les données sensibles de telle sorte qu’il n’est pas nécessaire de les déchiffrer pour les traiter. Alors que certaines, comme le chiffrement homomorphe, sont encore très complexes à mettre en œuvre, les environnements d’exécution de confiance (EEC aussi appelés «&nbsp;<em>trusted execution environment (TEE)</em>&nbsp;» en anglais) ont atteint une bonne maturité, permettant de les considérer comme des composants importants dans la protection des données.</p>



<p>L’objectif premier des EEC est de dresser un rempart contre la curiosité des entités contrôlant l’infrastructure. Toutefois la protection technique ne résout pas tout. Les lois extraterritoriales [<a href="#ref1">1-5</a>] et l’usage de bibliothèques logicielles propriétaires imposées par certains fournisseurs d’infrastructure informatique peuvent fragiliser cette isolation.</p>



<p>Dans cet article et le suivant, nous nous penchons sur la possibilité de déployer des EEC sur notre propre infrastructure (<em>on-premise</em>). L’objectif est triple&nbsp;: bénéficier de la puissance de l’informatique confidentielle pour protéger les données et permettre de nouveaux cas d’usage, tout en gardant un certain contrôle sur la pile logicielle et matérielle, et ainsi renforcer la confiance de nos clients.</p>



<h1 class="wp-block-heading">Séparation des rôles</h1>



<p>Commençons par rappeler les différents acteurs qui interviennent lors du déploiement d’une application sur une infrastructure informatique. Leurs rôles doivent être hermétiquement séparés pour garantir l’intégrité du système.</p>



<ul class="wp-block-list">
<li><strong>L’opérateur d’infrastructure</strong> gère le matériel et les infrastructures (calcul, stockage, réseau), incluant la maintenance des environnements d’exécution de confiance. Il contrôle les mises à jour des micrologiciels et l’allocation des ressources, mais ne devrait pas pouvoir accéder aux données ou aux charges de travail exécutées.</li>



<li><strong>L’opérateur d’orchestration</strong>, qui peut être le même que l’opérateur d’infrastructure, est responsable de la gestion des grappes de serveurs et du déploiement des charges de travail. Il configure les ressources nécessaires aux applications et supervise les services associés (journalisation, surveillance). Ses privilèges devraient aussi être strictement limités afin d’éviter toute intrusion dans l&#8217;application, tout en permettant l’orchestration essentielle.</li>



<li><strong>Le fournisseur de la charge de travail</strong> conçoit les spécifications des applications et choisit les images de conteneurs adaptées, en garantissant leur conformité et leur intégrité. Il doit prouver aux propriétaires de données (voir ci-dessous) que le code utilisé est sécurisé et respectueux de la confidentialité, sans pour autant accéder directement aux données sensibles.</li>



<li><strong>Le fournisseur d’images de conteneurs</strong> construit, signe et chiffre les images conteneurs, assurant leur provenance et leur sécurité. Il fournit les clés de vérification et de déchiffrement. Sa collaboration avec le fournisseur de l’application est cruciale pour garantir la chaîne d’approvisionnement logicielle et assurer que le code déployé est exactement celui qui a été audité.</li>



<li><strong>Enfin, le propriétaire des données</strong> détient les données traitées par les applications et exige leur confidentialité et leur intégrité. Il accorde sa confiance au code de l’application (le conteneur) et aux preuves cryptographiques fournies par le microprocesseur, excluant de fait les opérateurs d’infrastructure et d’orchestration de son périmètre de confiance. Il peut imposer des vérifications supplémentaires pour s’assurer que ses données ne sont ni visibles ni manipulées par des personnes non autorisées.</li>
</ul>



<p>Les relations entre ces acteurs soulèvent des enjeux spécifiques&nbsp;: le propriétaire des données, par exemple, doit pouvoir faire confiance au code des conteneurs (fournis par le fournisseur de la charge de travail) pour traiter ses données, tout en protégeant celles-ci contre les autres acteurs comme l’opérateur d’infrastructure ou l’opérateur d’orchestration. Notamment les administrateurs de ces opérateurs ne devraient en aucun cas pouvoir avoir accès aux données traitées par les conteneurs.</p>



<h1 class="wp-block-heading">Environnement d’exécution de confiance</h1>



<p>Les EEC permettent de créer une barrière technique renforçant la confiance du propriétaire des données dans le conteneur applicatif. Nous avons déjà expliqué en détail leur fonctionnement ainsi que leurs avantages et inconvénients dans un rapport technique&nbsp;[<a href="#ref6">6</a>] et des articles de blogues&nbsp;[<a href="#ref7">7</a>], [<a href="#ref8">8</a>]. Dans cette section nous en rappelons les points clés avant de présenter des choix technologiques pour une mise en œuvre sur notre infrastructure de recherche.</p>



<p>Le bon fonctionnement des EEC réside dans le matériel. Certains micro-processeurs modernes permettent de réserver et de chiffrer une portion de la mémoire vive (RAM) dédiée à une machine virtuelle (VM) spécifique. Ainsi, un administrateur de la machine hôte, même avec les privilèges les plus élevés, ne verra que des données chiffrées s’il tente d’inspecter cette zone mémoire. Bien que des attaques par canaux auxiliaires existent (e.g.,&nbsp;[<a href="#ref9">9</a>]), leur complexité nécessite généralement un accès physique prolongé et l’ajout de composants matériels malveillants, ce qui les rend extrêmement difficiles à exécuter.</p>



<p>Pour que le propriétaire des données soit certain que son application s’exécute dans un environnement sain, il utilise le mécanisme d’<a href="/introduction-a-l-informatique-confidentielle/#Attestation">attestation</a>. Ce processus génère une signature cryptographique du contenu de la mémoire de la VM au moment de son lancement. Cette signature est certifiée par le fabricant du micro-processeur.</p>



<p>Ce processus a des limites&nbsp;notamment dans le cas où l’opérateur d’infrastructure est une société étrangère (e.g., Amazon AWS, Google Cloud ou Microsoft Azure) qui impose ses bibliothèques propriétaires dans la VM afin, par exemple, de fournir la bonne couche d’abstraction matérielle.</p>



<p>Cela nous a conduit à vouloir tester ce type de technologie dans notre laboratoire de recherche sur notre propre matériel, anticipant la possibilité de le faire un jour sur <a href="https://www.gcloud.belgium.be/">G-Cloud</a>. L’intérêt est de permettre à un client de SMALS de faire fonctionner un conteneur applicatif de manière sécurisée, sans qu’un administrateur de SMALS puisse accéder au contenu du conteneur.</p>



<p>Mais l’utilité des EEC dépasse la simple protection contre les administrateurs. Elle ouvre la voie à d’autres cas d’usage.</p>



<h1 class="wp-block-heading">Cas d’usage</h1>



<p>Un premier exemple se trouve dans le cadre de l’infrastructure européenne de <a href="https://health.ec.europa.eu/ehealth-digital-health-and-care/digital-health-and-care/electronic-cross-border-health-services_fr">services numériques de santé en ligne (eHDSI)</a>. Là, les professionnels de santé d’un pays de traitement peuvent demander les données de santé pertinentes du patient au pays d’affiliation de celui-ci. D’un point de vue technique, la demande est transmise par la passerelle du point de contact national pour la santé (NCPeH) du pays où l’événement de santé imprévu se produit, au pays d’affiliation. Les informations demandées doivent ensuite être récupérées auprès de l’infrastructure nationale du pays d’affiliation, traduites en anglais et transcodées (les données de santé sont transformées du système de codification national vers le système de codification communément accepté, par exemple du format <a href="https://www.hl7.org.uk/standards/hl7-standards/fhir/">FHIR</a> ou <a href="https://www.ehealth.fgov.be/standards/kmehr/en">KMEHR</a> vers <a href="https://www.hl7.org.uk/standards/hl7-standards/cda-clinical-document-architecture/">CDA</a>), puis renvoyées et présentées au professionnel de santé du pays de traitement. Compte tenu du caractère sensible des données, les données devraient être chiffrées de bout en bout, depuis la source de données sur l’infrastructure du pays d’affiliation jusqu’au prestataire de soins de santé dans le pays de traitement. Dans la pratique, cela n’est pas encore possible en raison des différences importantes entre les pays européens. Cependant, il devrait être possible, au minimum, de garantir que les données restent chiffrées et inaccessibles à tout utilisateur ou administrateur entre la source des données et la sortie de la passerelle NCPeH. Une possibilité consiste alors à utiliser des EEC pour effectuer la traduction et le transcodage des données.</p>



<p>Un autre exemple d’utilisation des EEC est la collaboration sécurisée entre entités ne souhaitant pas partager leurs données brutes. Dans le secteur de l’éducation et de l’emploi, une expérience menée par Bogdanov <em>et al</em> en Estonie&nbsp;[<a href="#ref10">10</a>] a montré la puissance des techniques d’informatique confidentielle. Les auteurs de cette étude ont cherché à déterminer si le fait de travailler pendant les études supérieures était corrélé à un échec d’obtention du diplôme dans les délais impartis – une question particulièrement cruciale pour le secteur des technologies de l’information et de la communication en Estonie. Pour répondre à cette problématique sans compromettre la confidentialité des données personnelles, les chercheurs ont combiné les registres d’éducation du ministère de l’Éducation et de la Recherche avec les données de paiements d’impôts du Conseil des taxes et des douanes, grâce à une technique particulière d’informatique confidentielle. Mais une variante plus simple avec un EEC eût été tout aussi efficace pour l’analyse tout en respectant le secret fiscal et la protection des données.</p>



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



<p>Plusieurs solutions logicielles sont disponibles pour mettre à profit les EEC sur notre propre infrastructure de recherche. Nous avons choisi d’utiliser le projet «&nbsp;<a href="https://confidentialcontainers.org/">Confidential Containers (CoCo)</a>&nbsp;» dont le code source est ouvert. Il permet en effet une bonne isolation des conteneurs applicatifs et prend en charge le mécanisme d’attestation de manière transparente, tout en préservant la flexibilité de déploiement et la compatibilité avec la plateforme <a href="https://kubernetes.io/">Kubernetes</a> sur laquelle il s’appuie. Chaque capsule Kubernetes est isolée dans une machine virtuelle confidentielle très légère, de manière à garantir que seules les applications autorisées peuvent accéder aux données sensibles.</p>



<p>Les conteneurs CoCo contiennent quelques composants logiciels nécessaires en plus de l’application elle-même. Ceux-ci permettent de télécharger l’image du conteneur à exécuter, de faciliter la vérification de l’attestation et d’appliquer certaines politiques de sécurité. Leur interface de programmation est relativement petite, notamment par rapport à une solution où tout un nœud Kubernetes serait mis à l’intérieur d’une machine virtuelle confidentielle. En outre, l’image de la machine virtuelle invitée est statique et générique sur toutes les charges de travail et même les plateformes, permettant ainsi d’assurer plus simplement des garanties de sécurité. En même temps, le partage entre les conteneurs dans la même capsule Kubernetes est aisé. Par exemple, l’espace de noms du réseau de la capsule ne quitte pas la machine virtuelle confidentielle, autorisant ainsi les conteneurs qu’elle contient à communiquer de manière confidentielle sans coût supplémentaire.</p>



<p>CoCo s’appuie sur les conteneurs <a href="https://katacontainers.io/">Kata</a>, un autre projet de logiciel libre, qui permet de faire fonctionner des capsules Kubernetes à l’intérieur de machines virtuelles confidentielles très légères (voir <a href="#Figure-1">Figure 1</a>). CoCo ajoute cependant deux composants cruciaux afin d’assurer confidentialité et sécurité (voir <a href="#Figure-2">Figure 2</a>).</p>



<ul class="wp-block-list">
<li>Le premier concerne la <strong>récupération des images des conteneurs</strong>&nbsp;: celles-ci sont habituellement téléchargées par le nœud principal Kubernetes avec l’aide d’une interface d’exécution de conteneur (CRI) comme «&nbsp;<code>containerd</code>,&nbsp;» exposant ainsi les images à la machine hôte à travers le système de fichiers. Avec CoCo, les images sont déchiffrées, et décompactées à l’intérieur de la machine virtuelle confidentielle, d’où la nécessité des composants susmentionnés.</li>



<li>Le second est l’<strong>attestation</strong> qui est, comme nous l’avons déjà vu, indispensable à l’établissement d’un environnement d’exécution de confiance. Par exemple, afin de déchiffrer une image, l’invité doit pouvoir obtenir la clé secrète de déchiffrement, mais celle-ci n’est fournie que si l’invité peut prouver son authenticité. C’est le rôle de deux composants&nbsp;qui s’appuient sur un système appelé «&nbsp;<em><a href="https://github.com/confidential-containers/trustee">Trustee</a></em>,&nbsp;» extérieur à la machine virtuelle et composé de deux services&nbsp;: un service d’attestation permettant de valider la base d’exécution de confiance et un service de médiation de clés permettant de fournir les ressources secrètes nécessaires à la machine virtuelle et à l’application.</li>
</ul>



<figure class="wp-block-image aligncenter size-full is-resized" id="Figure-1"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture1-Exemple-architecture.svg"><img decoding="async" src="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture1-Exemple-architecture.svg" alt="" class="wp-image-26519" style="width:600px"/></a><figcaption class="wp-element-caption">Figure 1 &#8211; Exemple d’architecture avec deux nœuds Kubernetes et des machines virtuelles confidentielles légères Kata, elles-mêmes contenant des capsules Kubernetes. La mémoire allouée à chaque machine virtuelle est directement chiffrée par le microprocesseur du nœud 2. Cela permet une forte isolation de chaque capsule non seulement vis-à-vis des autres, mais aussi vis-à-vis du noyau de la machine hôte.</figcaption></figure>



<p>CoCo fournit donc les bases pour construire des conteneurs applicatifs confidentiels en permettant d’exécuter ces conteneurs à l’intérieur de machines virtuelles confidentielles, gérant les images chiffrées et signées des conteneurs, les secrets scellés, et d’autres caractéristiques. Chaque conteneur ou groupe de conteneurs de la même application peut être assigné à une machine virtuelle confidentielle, incluant non seulement la charge de travail, mais aussi des processus permettant à l’application d’appeler certains services de sécurité. <strong></strong></p>



<figure class="wp-block-image aligncenter size-full is-resized" id="Figure-2"><a href="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture2-Schema-coco-1.svg"><img decoding="async" src="https://www.smalsresearch.be/wp-content/uploads/2026/03/Picture2-Schema-coco-1.svg" alt="" class="wp-image-26520" style="width:600px"/></a><figcaption class="wp-element-caption">Figure 2 – Représentation schématique d’un conteneur CoCo et de son environnement. À partir de l’utilisation de la commande <code>kubelet</code> pour lancer le déploiement d’un conteneur CoCo, une machine virtuelle légère est créée avec différents agents de base en son sein. L’un se charge de télécharger l’image (chiffrée et signée) du conteneur applicatif à partir d’un registre. Les autres permettent à la machine virtuelle de s’authentifier et de récupérer les clés nécessaires au déchiffrement et à la vérification de la signature de l’image, avant le lancement du conteneur. D’après <a href="https://github.com/confidential-containers/confidential-containers/blob/main/images/coco-threat-model.png">cette figure</a>.</figcaption></figure>



<p>Tout ce qui se trouve en dehors de la machine virtuelle confidentielle sur l’hôte est considéré comme non fiable, y compris l’outil <code>kubelet</code>, l’interface d’exécution de conteneurs et le noyau du système d’exploitation de l’hôte. Les échanges d’informations entre les contextes de confiance et non fiables sont strictement contrôlés, notamment via des politiques de sécurité dynamiques et configurables. Enfin, l’orchestration Kubernetes elle-même est considérée comme non fiable, limitant les garanties sur le planning ou l’ordre d’exécution des charges de travail, à l’exception de leur déploiement dans une enclave authentifiée.</p>



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



<p>Les conteneurs confidentiels s’inscrivent dans une démarche globale de sécurité, combinant attestation, vérification des images et bonnes pratiques de la chaîne d’approvisionnement logicielle. Ils permettent de traiter des cas d’usage plus simplement que la cryptographie avancée (collaboration confidentielle, intersection privée d’ensemble, pseudonymisation avancée, etc.). Certes les puristes argueront qu’une solution basée sur des conteneurs confidentiels est moins sûre, mais dans la pratique, elle sera probablement suffisante dans un cadre « <em>on-premise</em> », d’autant plus qu’elle simplifie beaucoup d’aspect une fois qu’elle est mise en place.</p>



<p>Dans l’article suivant, nous entrerons plus en détails dans l’installation et l’utilisation des conteneurs confidentiels CoCo.</p>



<h1 class="wp-block-heading">Références</h1>



<p id="ref1">[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C. Bômont, «&nbsp;Strategic Brief no.70 &#8211; 2024 &#8211; Extension of the FISA Law European “digital sovereignty” far from American concerns &#8211; IRSEM&nbsp;», Institut de Recherche Stratégique de l’Ecole Militaire. Consulté le: 9 février 2026. [En ligne]. Disponible sur: <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, «&nbsp;Europeans, forget the US Cloud Act… worry about FISA instead (!)&nbsp;». Consulté le: 1 juillet 2025. [En ligne]. Disponible sur: <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; M. Rochefort, «&nbsp;Microsoft face au Sénat : l’aveu qui fait vaciller la souveraineté numérique française&nbsp;», clubic.com. Consulté le: 9 février 2026. [En ligne]. Disponible sur: <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="ref4">[4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. Deridder, «&nbsp;Understanding Sovereignty: Who Rules your Cloud?&nbsp;», Dirk Deridder. Consulté le: 1 juillet 2025. [En ligne]. Disponible sur: <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="ref5">[5]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P. Kunert, «&nbsp;Microsoft exec admits it “cannot guarantee” data sovereignty&nbsp;», The Register. Consulté le: 28 juillet 2025. [En ligne]. Disponible sur: <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="ref6">[6]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F. A. P. Petitcolas, «&nbsp;Informatique confidentielle &#8211; État de l’art&nbsp;», Smals Research, juill. 2023. [En ligne]. Disponible sur: <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, «&nbsp;Introduction à l’informatique confidentielle&nbsp;», Smals Research. Consulté le: 9 janvier 2026. [En ligne]. Disponible sur: <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, «&nbsp;Outils pour l’informatique confidentielle&nbsp;», Smals Research. Consulté le: 9 janvier 2026. [En ligne]. Disponible sur: <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, et J. V. Bulck, «&nbsp;Battering RAM: Low-cost interposer attacks on confidential computing via dynamic memory aliasing&nbsp;», présenté à 47th IEEE Symposium on Security and Privacy (S&amp;P), mai 2026.</p>



<p id="ref10">[10]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. Bogdanov, L. Kamm, B. Kubo, R. Rebane, V. Sokk, et R. Talviste, «&nbsp;Students and taxes: a Privacy-preserving study using secure computation&nbsp;», <em>Proc. Priv. Enhancing Technol.</em>, vol. 2016, n<sup>o</sup> 3, p. 117‑135, juill. 2016, doi: 10.1515/popets-2016-0019.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Made by Smals Research – Croisement des données à caractère personnel dans le respect de la vie privée</title>
		<link>https://www.smalsresearch.be/innovationsmals-croisement-des-donnees-a-caractere-personnel-dans-le-respect-de-la-vie-privee/</link>
		
		<dc:creator><![CDATA[Kristof Verslype]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 06:30:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></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=26246</guid>

					<description><![CDATA[En collaboration avec des universités de renommée internationale, Smals a travaillé sur un prototype visant à simplifier considérablement la pseudonymisation et le croisement des données personnelles à des fins secondaires grâce à la cryptographie avancée.]]></description>
										<content:encoded><![CDATA[
<p><em>Dit artikel is ook beschikbaar&nbsp;in het&nbsp;<a href="/innovatiesmals-privacyvriendelijk-kruisen-van-persoonsgegevevens/" data-type="post" data-id="21119">Nederlands</a>.</em></p>



<p>Les données personnelles numériques constituent une source d&#8217;informations qui favorise l&#8217;innovation, le bien-être et la formulation de politiques. Ces données personnelles se trouvent dispersées dans de nombreuses organisations&nbsp;: l&#8217;une détient des données sur le cancer, une autre sur la consommation de médicaments et une autre encore sur les revenus. Dans la pratique, les données personnelles provenant de différentes organisations sont régulièrement regroupées afin de répondre à des questions spécifiques posées par des chercheurs et des décideurs politiques.</p>



<p>Les processus actuels garantissent que le respect de la vie privée dans ce contexte. Il s&#8217;agit malheureusement trop souvent d&#8217;une opération complexe, coûteuse et chronophage. En collaboration avec des universités de renommée internationale, Smals Research a donc travaillé à l&#8217;élaboration d&#8217;un prototype visant à simplifier considérablement ces processus à l&#8217;aide d&#8217;une cryptographie avancée.</p>



<h1 class="wp-block-heading">Problématique basée sur un cas concret</h1>



<p>Nous sommes partis d&#8217;une <a href="https://www.ehealth.fgov.be/ehealthplatform/file/cc73d96153bbd5448a56f19d925d05b1379c7f21/5749691d1687866fa0e6852fe4536cb54f2bf4ad/20-020-n042-behandeling-herstellende-multiple-sclerose.pdf">question de recherche concrète</a>&nbsp;:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Les patients atteints de SEP (sclérose en plaques) sous traitement à base de molécules de tériflunomide ou d&#8217;alemtuzumab courent-ils un risque accru de cancer par rapport aux patients atteints de SEP traités avec d&#8217;autres médicaments&nbsp;?</em></p>
</blockquote>



<p>Pour répondre à cette question, simple en soi, il est nécessaire de croiser les données médicales relatives aux patients atteints de SEP provenant de deux organisations, à savoir le <a href="https://kankerregister.org/fr">Registre belge du cancer (BCR)</a> et l&#8217;<a href="https://www.ima-aim.be/">Agence InterMutualiste (AIM)</a>.</p>



<p>Les deux organisations gèrent les données sous des pseudonymes distincts pour plus de confidentialité ; des codes uniques remplacent les numéros de registre national.</p>



<ul class="wp-block-list">
<li>Le BCR gère les données relatives au cancer concernant les personnes qui ont reçu un diagnostic de cancer. Le BCR ne sait pas quels enregistrements concernent des patients atteints de SEP.</li>



<li>L&#8217;AIM dispose de données relatives aux médicaments prescrits et peut sélectionner les enregistrements des patients atteints de SEP.</li>
</ul>



<p>Les chercheurs doivent avoir accès, dans un environnement sécurisé (<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>), aux données provenant du BCR et de l&#8217;AIM concernant tous les patients atteints de SEP. Les données relatives à un même patient mais issues de sources différentes doivent pouvoir être reliées entre elles sur la base d&#8217;un pseudonyme unique utilisé uniquement dans le cadre de cette question de recherche spécifique. Ceci est représenté dans l&#8217;illustration 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">Illustration 1&nbsp;: à gauche, l&#8217;ensemble des patients atteints de SEP, à droite, l&#8217;ensemble des citoyens ayant reçu un diagnostic de cancer. Seules les données relatives aux citoyens des deux régions vertes peuvent être divulguées sous forme pseudonymisée à l&#8217;environnement sécurisé.</figcaption></figure>



<p>La question centrale est la suivante&nbsp;:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Comment le BCR peut-il fournir uniquement des enregistrements sur les patients atteints de SEP à l&#8217;environnement sécurisé sans savoir qui est atteint de SEP ou quels enregistrements qu&#8217;il gère concernent des patients atteints de SEP&nbsp;?</em></p>
</blockquote>



<p>Dans une approche classique, soit le BCR enverra trop d&#8217;informations à l&#8217;environnement sécurisé – notamment des données sur chaque patient atteint d&#8217;un cancer –, soit des informations seront divulguées au BCR – qui découvrira alors quels enregistrements concernent des patients atteints de SEP. Une dernière possibilité consiste à faire appel à une entité centrale de confiance qui, certes, aura connaissance des données à caractère personnel, mais à qui l&#8217;on peut faire confiance pour ne pas en faire un usage illicite.</p>



<p>Aucune de ces approches n&#8217;est idéale. Aujourd&#8217;hui, tant au niveau national qu&#8217;international, on fait appel à des intermédiaires centraux fortement réglementés ou on opte pour des solutions sur mesure coûteuses et lentes, dans lesquelles un nouveau flux est défini, validé et mis en œuvre pour chaque question de recherche afin de protéger au maximum la vie privée.</p>



<p>De plus, le chercheur a généralement besoin d&#8217;accéder aux données brutes, ce qui rend les solutions basées sur le <a href="/secure-multiparty-computation-collectieve-berekeningen-op-verspreide-gevoelige-gegevens/">secure multi-party computation</a> inadaptées.&nbsp;</p>



<h1 class="wp-block-heading">Notre proposition de solution</h1>



<p>Partons d&#8217;un scénario fictif dans lequel nous travaillons avec un intermédiaire de confiance et où, pour simplifier, l&#8217;AIM et le BCR ne gèrent pas les données à caractère personnel sous des pseudonymes, mais sous des numéros de registre national. L&#8217;AIM et le BCR envoient tous deux toutes les données potentiellement pertinentes à l&#8217;intermédiaire de confiance.</p>



<p>Le BCR envoie à l&#8217;intermédiaire les données identifiées relatives au cancer de tous les citoyens qui ont reçu un diagnostic de cancer, ce qui est bien sûr beaucoup plus que ce dont le chercheur a besoin. L&#8217;intermédiaire reçoit également toutes les données identifiées relatives aux médicaments prescrits aux patients atteints de SEP de l&#8217;AIM et sait ainsi, sur cette base. </p>



<p><!--StartFragment --><span class="cf0">L&#8217;intermédiaire reçoit également toutes les données identifiées relatives aux médicaments prescrits aux patients atteints de SEP de l&#8217;AIM. Il sait ainsi quels enregistrements fournis par le BCR concernent des patients atteints de SEP et donc quels enregistrements sont pertinents dans le cadre de la question de recherche</span>. L&#8217;intermédiaire entreprend alors les étapes suivantes&nbsp;:</p>



<ol class="wp-block-list">
<li>Il supprime les enregistrements non pertinents, c&#8217;est-à-dire les enregistrements concernant tous les citoyens qui ont reçu un diagnostic de cancer mais qui ne sont pas atteints de SEP.</li>



<li>Il fusionne les enregistrements concernant les mêmes citoyens et remplace les numéros de registre national par des pseudonymes uniques dans les enregistrements fusionnés.</li>



<li>Il envoie le résultat – uniquement les enregistrements fusionnés – vers l&#8217;environnement sécurisé.</li>



<li>Il supprime toutes les données reçues et dérivées.</li>
</ol>



<p>Dans ce scénario, il n&#8217;y a pas de fuite involontaire de données vers les sources de données et l&#8217;environnement sécurisé ne reçoit que les données personnelles pseudonymisées minimales nécessaires.</p>



<p>Notre prototype fait exactement cela, mais <strong>sans l&#8217;intermédiaire de confiance</strong>. Le rôle de l&#8217;intermédiaire de confiance est distribué&nbsp;: les détenteurs de données – dans ce cas, l&#8217;AIM et le BCR – et un collecteur de données – dans ce cas, l&#8217;environnement sécurisé – interagissent pour assumer ensemble le rôle de l&#8217;intermédiaire de confiance. Les caractéristiques de sécurité mentionnées dans le paragraphe précédent sont conservées ; aucune information n&#8217;est donc divulguée involontairement aux détenteurs de données et le collecteur de données ne prend connaissance que des données pseudonymisées strictement nécessaires. La solution reste néanmoins pratique et efficace. Tout cela est possible grâce à une cryptographie avancée.</p>



<p>Comme nous l&#8217;avons mentionné précédemment, l&#8217;AIM et le BCR conservent les données sous des pseudonymes. Il existe des procédures permettant de les convertir de manière contrôlée en numéros de registre national. L&#8217;entité qui gère les données n&#8217;a jamais connaissance des registres nationaux et l&#8217;entité qui peut associer les pseudonymes aux numéros de registre national n&#8217;a à aucun moment accès aux données à caractère personnel proprement dites. Par souci de simplicité et pour la suite de cet article, nous partons du principe que les détenteurs de données connaissent les données identifiées par les numéros de registre national plutôt que par les pseudonymes. Notre concept peut également s&#8217;appliquer de manière sécurisée à des situations plus réalistes où ce n&#8217;est pas le cas.</p>



<h1 class="wp-block-heading">Dans la pratique</h1>



<p><a href="/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="/wp-content/uploads/2025/12/Wilhelm_Wandschneider_-_Lethe_Modell.jpg" alt=""></a>Smals Research a développé ce concept en collaboration avec des partenaires universitaires. Initialement baptisé Oblivious Join, il a été renommé <em>LetheLink</em> dans le contexte universitaire.&nbsp;<a href="https://fr.wikipedia.org/wiki/L%C3%A9th%C3%A9">Lethe</a> (Λήθη) est, dans la mythologie grecque, la déesse de l&#8217;oubli et l&#8217;un des cinq fleuves des enfers, au bord duquel les morts s&#8217;abreuvent pour oublier leur vie terrestre. Malgré cet oubli – ou plutôt ce manque de connaissance –, les entités en interaction parviennent à relier entre elles les données nécessaires. La convivialité et l&#8217;efficacité ont été au cœur du développement de ce concept.</p>



<p>Smals Research a développé un prototype démontrable qui donne déjà un aperçu du fonctionnement d&#8217;une solution entreprise-ready. L&#8217;utilisation du prototype est présentée dans l&#8217;illustration 2 et comprend les étapes suivantes&nbsp;:</p>



<ol class="wp-block-list">
<li><strong>Création d&#8217;un fichier JSON.</strong> Une organisation pouvant servir de point de contact (par exemple, la <a href="https://www.hda.belgium.be/fr">HDA</a> ou la <a href="https://www.ksz-bcss.fgov.be/fr">BCSS</a>) reçoit une demande d&#8217;un chercheur. Lorsque la base juridique pour ce traitement de données existe, cette organisation établit un fichier JSON signé numériquement. Ce fichier JSON contient, sous une forme structurée, toutes les informations nécessaires à l&#8217;exécution correcte du protocole pour le croisement sécurisé des données des détenteurs de données&nbsp;: les données de connexion des clients des détenteurs de données et du collecteur de données, les paramètres cryptographiques, les clés publiques, les informations sur les données que chaque détenteur de données doit fournir, etc. Dans la pratique, on partira de templates à partir desquels on pourra dériver des fichiers JSON avec un minimum d&#8217;effort.</li>



<li><strong>Distribution du fichier JSON.</strong> Ce fichier JSON est envoyé à la fois au collecteur de données et aux détenteurs de données. Tous vérifient la signature numérique. Toutes les entités concernées savent désormais comment exécuter le protocole et comment contacter les autres entités concernées en toute sécurité.</li>



<li><strong>Téléchargement du client.</strong> Si ce n&#8217;est pas déjà fait, le collecteur de données et les détenteurs de données téléchargent le client LetheLink.</li>



<li><strong>Création de fichiers CSV.</strong> Sur la base du fichier JSON, chaque détenteur de données génère un fichier CSV contenant toutes les données identifiées potentiellement pertinentes. Dans le scénario décrit précédemment, cela inclurait, pour le BCR, toutes les informations identifiées demandées concernant tous les citoyens ayant reçu un diagnostic de cancer. La création de ce fichier ne relève pas du champ d&#8217;application de LetheLink. Notre prototype ne prend en charge que les fichiers CSV, mais cette fonctionnalité peut être étendue.</li>



<li><strong>Importation du client.</strong> Chaque participant fournit le fichier JSON à son client LetheLink local. Les détenteurs de données fournissent également leur fichier CSV généré localement à leur client. Les données sont livrées en clair et le client se charge du chiffrement.</li>



<li><strong>Exécution du protocole.</strong> Le protocole est exécuté. Du côté du collecteur (SPE) des données, cela donne un fichier CSV qui ne contient que les données pseudonymisées et minimales nécessaires.</li>
</ol>



<figure class="wp-block-image aligncenter"><a href="/wp-content/uploads/2025/12/gebruik-1.png"><img loading="lazy" decoding="async" width="1024" height="572" src="/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">Illustration 2. Aperçu de l&#8217;utilisation de LetheLink dans la pratique</figcaption></figure>



<p>L&#8217;avantage de cette approche réside dans sa flexibilité d&#8217;utilisation. Certains détenteurs de données ne sont impliqués que très occasionnellement dans de tels projets croisés et tous les détenteurs de données ne disposent pas des mêmes ressources. Grâce à l&#8217;approche LetheLink, nul besoin de réaliser d&#8217;importants investissements ou préparatifs. Il suffit d&#8217;installer le client et de créer le fichier CSV.</p>



<p>L&#8217;illustration 3 présente un exemple fictif de tels fichiers CSV. En haut figurent des extraits de fichiers CSV que les détenteurs de données (trois dans le cas présent) fournissent chacun en entrée à leur client LetheLink. Au bas de l&#8217;illustration, un extrait du fichier CSV généré en sortie par le client du collecteur de données à la suite de l&#8217;exécution du protocole est présenté. Dans notre exemple fictif, le chercheur s&#8217;intéresse uniquement aux données transversales, c&#8217;est-à-dire aux données relatives aux 50&nbsp;000 patients atteints de SEP qui ont reçu un diagnostic de cancer et présentent un profil de risque élevé. La personne dont le numéro de registre national est 60.01.05-045.05 appartient à ce groupe. Le collecteur de données voit les informations combinées sur ce citoyen, non pas sous ce numéro de registre national, mais sous le pseudonyme &#8220;153807&#8230;&#8221;.</p>



<figure class="wp-block-image aligncenter"><a href="/wp-content/uploads/2025/12/fictional_data-1.png"><img loading="lazy" decoding="async" width="1024" height="574" src="/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">Illustration 3. Exemple fictif avec des extraits de trois fichiers CSV d&#8217;entrée (en haut) et le fichier de sortie résultant (en bas)</figcaption></figure>



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



<p>Dans le cadre de la collaboration académique, la performance a été considérablement améliorée au cours de plusieurs itérations, tant au niveau de l&#8217;algorithme qu&#8217;au niveau de la mise en œuvre. Les principaux résultats des tests sont présentés dans le tableau 1. Quelques précisions&nbsp;:</p>



<ul class="wp-block-list">
<li>Les tests ont été effectués sur des machines virtuelles AWS EC2 r7i.8xlarge, avec 32 vCPU (Intel Xeon Platinum 8588C @ 3,2 GHz) et 256 Go de RAM.</li>



<li>Une distinction est opérée entre une exécution sur un LAN à une vitesse de 1 Gbps et sur un WAN à une vitesse de 150 Mbps.</li>



<li>La variable <em>m</em> représente le nombre d&#8217;enregistrements fournis par chacune des sources de données. Dans nos tests, elle est comprise entre un minimum de 2<sup>16</sup>= 65.536 et maximum de 2<sup>24</sup>= 16.777.216. En réalité, le nombre d&#8217;enregistrements varie bien sûr selon la source de données, mais ces résultats fournissent déjà une limite supérieure.</li>



<li>La variable κ (kappa) représente le niveau de sécurité computationnel. Une sécurité de 128 bits est suffisante aujourd&#8217;hui, mais une sécurité de 192 ou même de 256 bits est recommandée pour les données qui restent sensibles pendant une longue période. La variable λ (lambda) représente le paramètre de sécurité statique correspondant.&nbsp;</li>



<li>La variable <em>n</em> représente le nombre de détenteurs de données. Nous avons effectué des tests avec 3, 5 et 7 détenteurs de données, mais il n&#8217;y a aucune limitation technique pour un nombre beaucoup plus important.</li>
</ul>



<figure class="wp-block-image alignnone"><a href="/wp-content/uploads/2025/12/results.png"><img loading="lazy" decoding="async" width="1024" height="255" src="/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">Résultats de performance (en secondes) du prototype LetheLink</figcaption></figure>



<p>Maintenant que nous savons comment interpréter ce tableau, nous constatons par exemple qu&#8217;il faut 25 secondes pour exécuter le protocole lorsque trois sources de données fournissent chacune 1 million (2<sup>20</sup>) d&#8217;enregistrements sur un WAN. La quantité de données fournies a également un impact sur le temps d&#8217;exécution, mais pour cela, nous vous renvoyons au tableau 3 de notre <a href="https://arxiv.org/abs/2512.08558">publication</a> commune.&nbsp;<strong>En résumé, tant le protocole que sa mise en œuvre sont particulièrement efficaces.&nbsp;</strong>Pour conclure, l&#8217;illustration 4 donne une idée générale de la réalisation des tests.</p>



<figure class="wp-block-image aligncenter"><a href="/wp-content/uploads/2025/12/1000014576-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="611" src="/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">Illustration 4. Illustration de l&#8217;exécution des tests</figcaption></figure>



<h1 class="wp-block-heading">Relation avec le service de pseudonymisation à l&#8217;aveugle d&#8217;eHealth</h1>



<p>Smals Research a développé le <a href="/basisprincipes-voor-een-moderne-pseudonimiseringsdienst-2/">service de pseudonymisation à l&#8217;aveugle pour eHealth</a> au cours de la période 2021-2022. Ce service permet de convertir les numéros de registre national en pseudonymes (codes uniques) et vice versa. Cette conversion est effectuée par un service de pseudonymisation qui est toutefois aveugle&nbsp;: il ne voit ni les numéros de registre national ni les pseudonymes. Ce service peut <a href="/kruisen-van-persoonsgegevens-met-ehealths-blinde-pseudonimiseringsdienst/">également</a> être utilisé pour pseudonymiser et croiser des données. Quelles sont les différences&nbsp;?</p>



<ul class="wp-block-list">
<li><strong>Statut.</strong>&nbsp;Le service de pseudonymisation à l&#8217;aveugle est déjà en production, tandis que LetheLink n&#8217;est qu&#8217;un prototype.</li>



<li><strong>Fuite de données.</strong>&nbsp;Pour les projets de recoupement plus complexes, tels que ceux évoqués dans cet article, le service de pseudonymisation à l&#8217;aveugle ne pourra pas toujours empêcher les fuites de données. Il y aura notamment des fuites de données lorsqu&#8217;une source de données ne peut pas déterminer de manière autonome quels enregistrements sont pertinents pour répondre à la question de recherche. Selon le use case, il peut s&#8217;agir d&#8217;une fuite de données résiduelle acceptable ou de fuites de données plus substantielles, qui portent effectivement atteinte à la vie privée des personnes concernées. D&#8217;autre part, LetheLink présente des risques lorsqu&#8217;une seule entité est à la fois détentrice et collectrice de données.</li>



<li><strong>Rapidité.</strong> Le service de pseudonymisation à l&#8217;aveugle d&#8217;eHealth est certes très rapide &#8211; il peut effectuer des milliers de conversions par seconde -, mais LetheLink est ultra-rapide &#8211; il effectue des dizaines de milliers de conversions par seconde et, dans certaines circonstances, peut dépasser les cent mille. Tout dépendra bien sûr de l&#8217;infrastructure utilisée.</li>



<li><strong>Infrastructure.</strong> Le service de pseudonymisation à l&#8217;aveugle d&#8217;eHealth est dans tous les cas une entité centrale qui doit disposer d&#8217;une capacité suffisante. LetheLink, en revanche, est distribué, ce qui rend inutile une telle entité centrale&nbsp;: il suffit que chaque entité exécute le client LetheLink sur ses machines existantes. Il peut même s&#8217;agir d&#8217;ordinateurs portables classiques.</li>



<li><strong>Intégration.</strong>&nbsp;Afin d&#8217;utiliser le service de pseudonymisation à l&#8217;aveugle, une organisation doit intégrer une logique dans son application client. Nous savons par expérience que cela est relativement simple, mais cela reste néanmoins un investissement. LetheLink est un client autonome et ne nécessite donc aucun processus d&#8217;intégration.</li>



<li><strong>Types de demandes.</strong> Le service de pseudonymisation à l&#8217;aveugle d&#8217;eHealth peut traiter tant les demandes en batch que les demandes qui doivent être traitées en temps réel. LetheLink ne prend en charge que les traitements en batch.</li>
</ul>



<p>Ce positionnement respectif de LetheLink et du service de pseudonymisation à l&#8217;aveugle d&#8217;eHealth devrait aider les organisations à déterminer la technologie la plus adaptée à leurs use cases.</p>



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



<p>Un certain nombre d&#8217;extensions de LetheLink seront nécessaires pour pouvoir l&#8217;utiliser dans la pratique. Toutes les extensions proposées sont déjà conceptuellement possibles, mais ne sont pas toujours intégrées dans le prototype.&nbsp;<strong>Cela ne se fera que si une demande concrète est formulée.</strong></p>



<ul class="wp-block-list">
<li><strong>Taille minimale de l&#8217;ensemble de résultats.</strong>&nbsp;Si l&#8217;ensemble de résultats pseudonymisés pour le collecteur de données ne contient pas suffisamment d&#8217;enregistrements, il existe un risque pour la vie privée des personnes concernées et il est impossible de mener des recherches statistiquement pertinentes. C&#8217;est pourquoi le prototype prend déjà en charge la possibilité d&#8217;indiquer une taille minimale dans le fichier JSON.</li>



<li><strong>Réidentification contrôlée.</strong>&nbsp;Si les chercheurs constatent qu&#8217;un citoyen donné présente un risque élevé de développer une certaine maladie, il doit être possible d&#8217;en informer ce citoyen. De même, lorsqu&#8217;une enquête sur une fraude révèle une forte suspicion de fraude de la part de certains citoyens, il doit être possible d&#8217;en informer l&#8217;autorité compétente. Il doit donc être possible, dans des situations exceptionnelles, de vérifier l&#8217;identité d&#8217;un citoyen de manière contrôlée.</li>



<li><strong>Pseudonymes des détenteurs de données.</strong>&nbsp;Comme indiqué précédemment dans cet article, les détenteurs de données n&#8217;ont souvent pas eux-mêmes accès au numéro de registre national des citoyens dont ils gèrent les données. Dans de tels cas également, le protocole doit pouvoir être mis en œuvre efficacement.</li>



<li><strong>Divulgation sélective.</strong>&nbsp;Actuellement, le prototype se concentre sur des moyennes&nbsp;; ce n&#8217;est que si <em>tous</em> les détenteurs de données fournissent des enregistrements sur un même citoyen que l&#8217;enregistrement composite devient visible pour le collecteur de données. Dans la pratique, une plus grande flexibilité est requise, comme l&#8217;indique l&#8217;illustration 5. Dans le cas d&#8217;utilisation présenté en introduction de cet article, le chercheur avait besoin de données pseudonymisées sur tous les patients atteints de SEP, alors que notre prototype ne fournit actuellement que des données pseudonymisées sur tous les patients atteints de SEP ayant également reçu un diagnostic de cancer.</li>



<li><strong>Transfert multi-batch.</strong>&nbsp;Dans certains cas, les détenteurs de données doivent fournir des données à plusieurs reprises au collecteur de données, par exemple dans le cadre d&#8217;une étude longitudinale. Le collecteur de données doit être capable de relier entre elles les données relatives à un même citoyen au fil du temps.</li>



<li><strong>Communication simplifiée.</strong>&nbsp;Dans le prototype, tous les détenteurs de données concernés communiquent entre eux, puis envoient individuellement des données cryptées au collecteur de données. Dans un protocole adapté, les détenteurs de données n&#8217;échangeraient des données qu&#8217;avec et via le collecteur de données, par exemple via une interface REST. Dans la pratique, cette approche est plus souhaitable.</li>
</ul>



<p>Veuillez nous faire part de toute autre extension utile que vous pourriez envisager.</p>



<figure class="wp-block-image aligncenter"><a href="/wp-content/uploads/2025/12/selective_disclosure.png"><img loading="lazy" decoding="async" width="1024" height="570" src="/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">Illustration 5. Une possible extension, dans laquelle l&#8217;ensemble des résultats peut être plus que les simples enregistrements sur les citoyens pour lesquels chaque détenteur de données concerné fournit des informations</figcaption></figure>



<h1 class="wp-block-heading">Références</h1>



<p>Le concept initial ainsi que le prototype et les tests de performance ont été réalisés par Smals Research. Les partenaires universitaires, notamment le groupe <a href="https://www.esat.kuleuven.be/cosic/">COSIC</a> et le groupe <a href="https://distrinet.cs.kuleuven.be/">DistriNet</a> de la KU Leuven, ainsi que le groupe <a href="https://crysp.uwaterloo.ca/">CrySP</a> de l&#8217;université de Waterloo au Canada, se sont concentrés sur l&#8217;élaboration théorique. Cela a donné lieu à deux publications en 2025&nbsp;:</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">Publication de Springer&nbsp;:Privacy-By-Design in the Belgian Public Sector</a> Ce document accessible traite de deux solutions innovantes conçues par Smals Research pour la pseudonymisation et le croisement des données à caractère personnel&nbsp;: Lethelink et <a href="/kruisen-van-persoonsgegevens-met-ehealths-blinde-pseudonimiseringsdienst/">le service de pseudonymisation à l&#8217;aveugle d&#8217;eHealth</a>.</li>



<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">Publication de Springer&nbsp;:Privacy-By-Design in the Belgian Public Sector</a> Ce document accessible traite de deux solutions innovantes conçues par Smals Research pour la pseudonymisation et le croisement des données à caractère personnel&nbsp;: Lethelink et <a href="/kruisen-van-persoonsgegevens-met-ehealths-blinde-pseudonimiseringsdienst/">le service de pseudonymisation à l&#8217;aveugle d&#8217;eHealth</a>.</li>
</ul>



<p>Je vous invite également à consulter ma <a href="https://www.youtube.com/watch?v=-mx9vmdezL4">contribution à la conférence Devoxx</a> et mon <a href="https://www.smalsresearch.be/download/presentations/20240606_webinar_pseudonimisatie_PRINT.pdf">webinaire</a> de 2024 intitulé <em>&#8220;Privacy in Practice with Smart Pseudonymisation&#8221;.</em> LetheLink/Oblivious Join est l&#8217;une des trois techniques de pseudonymisation que j&#8217;y aborde.</p>



<p>Enfin, des <a href="/wp-content/uploads/2025/12/OJ-simple.pptx">slides</a> sont disponibles pour ceux qui souhaitent se faire rapidement une idée intuitive des principes de base de l&#8217;Oblivious Join. Les notes correspondantes fournissent des explications supplémentaires.</p>



<h2 class="wp-block-heading"><strong>Conclusion</strong></h2>



<p>L&#8217;utilisation secondaire des données à caractère personnel peut nous fournir de nombreuses informations qui soutiennent l&#8217;élaboration des politiques et stimulent la recherche scientifique. Pour exploiter ces informations, les données provenant de différentes sources doivent pouvoir être collectées de manière efficace, dans le respect de la vie privée. Cela signifie que seules les données à caractère personnel nécessaires sont pseudonymisées et croisées et que les autres entités participant à ce processus n&#8217;ont pas accès aux données à caractère personnel. Dans la pratique, cela était loin d&#8217;être évident.</p>



<p>En collaboration avec des universités de renommée internationale, Smals Research a donc élaboré un concept qui, grâce à une cryptographie avancée, permet de le faire de manière efficace. Un prototype démontrable a également été construit, ce qui constitue une première étape vers une mise en œuvre effective dans la pratique.</p>



<p>Au cours des dernières années, nous avons rencontré de nombreuses entités. Tout le monde considère qu&#8217;il s&#8217;agit d&#8217;un outil très utile, mais nous ne disposons pour l&#8217;instant pas de l&#8217;engagement de nos partenaires pour le mettre en pratique.</p>



<p><strong>Le défi principal aujourd&#8217;hui est donc de rendre cette solution prête à la production. N&#8217;hésitez pas à nous contacter si cette solution vous intéresse et si vous souhaitez éventuellement y contribuer.</strong></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Performance des LLM&#160;: Analyse comparative entre le français et le néerlandais</title>
		<link>https://www.smalsresearch.be/performance-des-llm-analyse-comparative-entre-le-francais-et-le-neerlandais/</link>
		
		<dc:creator><![CDATA[Katy Fokou]]></dc:creator>
		<pubDate>Mon, 09 Feb 2026 16:58:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[chatbot]]></category>
		<guid isPermaLink="false">/?p=25886</guid>

					<description><![CDATA[Notre évaluation d'un agent conversationnel RAG a révélé un écart de performance entre le français et le néerlandais, soulignant un défi persistant dans l'utilisation des grands modèles de langage (LLM) multilingues. Cette différence de performance s’explique en partie par la disponibilité des ressources utilisées pour entraîner ces modèles, mais d’autres facteurs peuvent également entrer en jeu.]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.smalsresearch.be/de-performance-van-llms-een-vergelijkende-analyse-tussen-frans-en-nederlands/" data-type="link" data-id="https://www.smalsresearch.be/de-performance-van-llms-een-vergelijkende-analyse-tussen-frans-en-nederlands/">Nederlandse versie</a></p>



<p>Le potentiel multilingue remarquable des grands modèles de langage (LLM) a contribué à leur adoption et à leur intégration généralisées au sein des applications basées par l’IA. Cependant, des disparités de performance existent entre l’anglais et d’autres langues, notamment les langues à faibles ressources.</p>



<p>Lors de l&#8217;évaluation d&#8217;un agent conversationnel (chatbot) RAG que nous avons développé, nous avons constaté une différence nette en termes de qualité des réponses selon la langue utilisée. Plus précisément, le chatbot a produit des réponses de meilleure qualité en français par rapport au néerlandais. Les réponses générées en français se caractérisaient par une plus grande fluidité et une meilleure fidélité aux informations requises par l’utilisateur. Les réponses en néerlandais ont tendance à être moins pertinentes. Ces résultats soulignent un défi crucial dans le développement des LLM utilisés par les chatbots&nbsp;: bien que ceux-ci présentent des capacités multilingues impressionnantes, les modèles actuels manifestent souvent un biais prononcé en faveur des langues à ressources élevées telles que l&#8217;anglais.</p>



<p>Cet article de blogue détaille les résultats de notre recherche sur l&#8217;écart linguistique que nous avons identifié, présentant les résultats de notre investigation.</p>



<h1 class="wp-block-heading">Écart de performance entre l’anglais et les autres langues&nbsp;: causes et facteurs</h1>



<p>Plusieurs facteurs contribuent au biais linguistique en faveur de l’anglais. Ceux-ci incluent&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>Déséquilibre des données</strong>&nbsp;: Le processus d’entraînement des grands modèles de langage repose sur des corpus textuels importants, mais ces derniers sont massivement dominés par l’anglais, suivi par les langues bien dotées en ressources linguistiques telles que le chinois, le français ou l’espagnol. En revanche, les données dans les langues à faibles ressources sont souvent de mauvaise qualité en raison d’un nombre limité de sources. Ce déséquilibre des données entraîne de faibles performances dans les langues autres que l’anglais, donnant des taux d’erreur plus élevés et des hallucinations. Afin de remédier à ce problème, les développeurs de modèles s’appuient sur une technique appelée “transfert inter linguistique”, où un modèle améliore ses performances dans les langues moins dotées en déduisant des schémas linguistiques universels ou partagés à partir des langues à ressources élevées. Bien que le pourcentage exact de données en langue anglaise dans les modèles propriétaires ne soit pas publiquement connu, 93 % des données utilisées pour entraîner GPT-3 sont en anglais. Les fournisseurs de grands modèles de langage, tels qu’OpenAI et Google, utilisent fréquemment l’archive de données web Common Crawl, qui est lui-même caractérisé par un ensemble de données ou l’anglais est prédominant (44 % en anglais, 4 % en français, 2 % en néerlandais). Ce biais est exacerbé dans des domaines spécialisés, tels que la finance et la santé, où les données de haute qualité sont particulièrement rares. Il est important de noter que le néerlandais est considéré comme une langue à ressources élevées dans le domaine du traitement automatique du langage naturel (NLP) bien que disposant de moins de ressources que le français ou l’anglais.</li>



<li><strong>Morphologie et tokenisation</strong>&nbsp;: Les architectures de modèles sont souvent optimisées pour l’anglais. Les processus de tokenisation peuvent être difficiles pour les langues à écriture non latine, telles que le chinois et le japonais, ainsi que pour les langues à morphologie de complexité moyenne à élevée, telles que le néerlandais. Les tokeniseurs centrés sur l’anglais peuvent éprouver des difficultés à traiter les mots composés (la combinaison de plusieurs noms en un seul mot), ce qui peut mener à un résultat grammaticalement incorrect lorsque les modèles génèrent du texte.</li>
</ul>



<p>Très peu d&#8217;études comparatives ont analysé les performances des grands modèles de langage en néerlandais et en français. Une étude analysant la qualité linguistique des LLM dans ces deux langues a révélé que les performances étaient généralement meilleures en français qu&#8217;en néerlandais, en particulier dans les tâches de génération d&#8217;articles [1]. Une autre étude a rapporté de meilleures performances des LLM en anglais comparativement au néerlandais dans une tâche de question-réponse [2].</p>



<p>Des défis importants persistent dans l&#8217;industrie concernant l&#8217;application des grands modèles de langage à des domaines techniques non anglais, en particulier dans des secteurs tels que la médecine et la finance. Les déploiements actuels nécessitent souvent un affinage des modèles pré-entrainés tels que Mistral et Llama pour atteindre des performances satisfaisantes.</p>



<p>Un autre défi bien connu dans l&#8217;application de modèles d&#8217;IA dans l&#8217;environnement linguistique néerlandais est la reconnaissance vocale, largement due à la grande variation des accents régionaux. Nos expériences de transcription d’enregistrements de réunions Teams ont révélé que les transcriptions françaises étaient systématiquement de meilleure qualité que les transcriptions néerlandaises. Cependant, des outils spécialisés tels que Sembly fournissent des résultats de transcription en néerlandais acceptables.<a id="_msocom_1"></a></p>



<h1 class="wp-block-heading">Analyse comparative des performances du néerlandais et du français dans un chatbot</h1>



<p>Une analyse comparative des performances a été menée sur un chatbot développé pour répondre aux questions formulées par les citoyens. Pour l’évaluation initiale du chatbot, nous avons utilisé un ensemble de questions proposées par les experts métier. Ces mêmes questions ont été présentées au chatbot en français et en néerlandais, les réponses ont été évaluées par le même expert et revues par deux autres personnes. Les premières évaluations ont révélé une différence significative de performance entre les deux langues&nbsp;: le chatbot a obtenu un taux de précision de 95 % en français, contre 82 % en néerlandais.</p>



<p>Suite au déploiement du chatbot dans un environnement de production, une seconde phase d’évaluation a été réalisée en utilisant des questions soumises par les utilisateurs et enregistrées dans une base de données. Nous avons de nouveau relevé une divergence de performances&nbsp;: 82 % de précision en français et 69 % en néerlandais.</p>



<p>Plusieurs facteurs pourraient contribuer à ces écarts observés, notamment&nbsp;:</p>



<ul class="wp-block-list">
<li>Les biais introduits par les évaluateurs – les évaluateurs sont plus ou moins sévères dans leurs évaluations;</li>



<li>La variation dans les types de questions (ambiguës, mal formulées, hors sujet) – les mêmes questions n’ont pas été systématiquement évaluées dans les deux langues;</li>



<li>La différence de qualité dans la récupération des sources (<em>retrieval</em>) – on observe des variations entre les langues dans les sources de données récupérées pour alimenter la génération;</li>



<li>Les capacités intrinsèques du modèle génératif (GPT-4o) dans les deux langues.</li>
</ul>



<p>Des investigations supplémentaires étaient donc nécessaires pour pleinement comprendre les différences observées en français et en néerlandais et atténuer ces facteurs.</p>



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



<p>Afin d’évaluer rigoureusement les performances des LLM à la fois en français et en néerlandais, une expérience a été menée avec le chatbot. Nous avons sélectionné un échantillon de questions où les réponses précédentes des LLM avaient été jugées inexactes, en nous assurant que les questions étaient ni trop complexes, ni trop simplistes. Il était crucial que chaque question formulée par un utilisateur soit traduite entre le français et le néerlandais pour faciliter une comparaison directe. Le processus d’évaluation a impliqué deux évaluateurs indépendants, un expert métier et un expert technique, afin de réduire les biais et d’assurer une évaluation robuste. Les évaluateurs ont évalué l’exactitude, la pertinence et la fluidité des réponses générées. De plus, d’autres modèles que GPT-4o ont été testés.</p>



<p>En plus des tests en néerlandais et en français, nous avons également réalisé un test où des questions en néerlandais ont été traduites en anglais. Les réponses ont été générées en anglais puis traduites à nouveau en néerlandais.</p>



<h1 class="wp-block-heading"><strong>Résultats</strong></h1>



<p><em>Question en néerlandais, Réponse en anglais</em></p>



<p>L’expérience consistant à traduire des questions posées en néerlandais en anglais et à traduire ensuite des réponses en néerlandais a révélé une performance nuancée. Si la traduction des questions néerlandaises en anglais a entraîné une légère amélioration de la qualité des réponses, passant de 67 % à 73 %, le processus inverse, traduisant les réponses anglaises générées en néerlandais, a davantage dégradé la qualité des réponses.</p>



<p><em>Précision des réponses françaises versus précision des réponses néerlandaises</em></p>



<p>Lors de notre expérience, nous avons comparé les réponses générées à partir de questions en néerlandais et leurs équivalents en français sur plusieurs ensembles de test. Nous avons observé l’influence de la composition de ces ensembles sur l’évaluation du modèle. En effet, Les scores variaient d’un ensemble à l’autre pour chaque modèle et chaque langue, et les disparités de performance entre les langues ne se manifestaient pas toujours. Cela souligne l&#8217;importance du processus de sélection des questions de test: pour notre dernier test, nous avons constitué un ensemble de test équilibré intégrant des échantillons de questions soumises par les utilisateurs dans les deux langues et des questions élaborées par des experts du domaine. Contrairement à ce qui avait été initialement observé, les résultats présentés ci-dessous ne révèlent qu’une différence légère en termes de précision entre le français et le néerlandais <strong>pour notre cas d&#8217;utilisation.</strong></p>



<p>Table 1. Résultats de l’évaluation finale du chatbot.</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:100%">
<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>
<p>&nbsp;</p>
</td><td><p><strong>Score<span style="font-family: inherit; font-size: inherit; font-weight: inherit; color: initial;"> maximum</span></strong></p></td><td>
<p><strong>GPT-5</strong></p>
</td><td>
<p><strong>Gemini</strong></p>
</td><td>
<p><strong>o3</strong></p>
</td><td><br><p><strong>Meilleur score (Gemini)</strong></p><br></td></tr><tr><td>
<p><strong>FR</strong></p>
</td><td>
<p>60</p>
</td><td>
<p>44</p>
</td><td>
<p><strong>46</strong></p>
</td><td>
<p>32</p>
</td><td>
<p><strong>77%</strong></p>
</td></tr><tr><td>
<p><strong>NL</strong></p>
</td><td>
<p>60</p>
</td><td>
<p>38</p>
</td><td>
<p><strong>43</strong></p>
</td><td>
<p>32</p>
</td><td>
<p><strong>72%</strong></p>
</td></tr></tbody></table></figure>
</div>
</div>



<p><em>Note&nbsp;: Les questions mal formulées en français ou en néerlandais ont été exclues de l&#8217;ensemble de test car elles se sont révélées difficiles à traduire avec précision dans l&#8217;autre langue.</em></p>



<p><em>Comparaison des LLM</em></p>



<p>GPT-5 a démontré de bonnes performances en termes de précision et de concision, cependant il a présenté un écart de précision plus important entre le français et les néerlandais que les autres modèles. Gemini, bien qu’il affiche de meilleures performances tant en français qu’en néerlandais, a généré des réponses notablement plus longues, ce qui a entraîné une utilisation de jetons plus élevée. Nous avons également observé que Claude Sonnet, qui présente une précision similaire à celle de Gemini, avait quelques fois intégré de l’anglais dans la réponse générée, plus souvent en néerlandais qu’en français. Après évaluation, les experts du domaine ont conclu que Gemini était le modèle le plus adapté à leur cas d’utilisation.</p>



<p><em>Effet de la récupération</em></p>



<p>Le processus de <a href="https://www.smalsresearch.be/de-meilleurs-resultats-de-recherche-grace-aux-bases-de-donnees-vectorielles/" data-type="link" data-id="https://www.smalsresearch.be/de-meilleurs-resultats-de-recherche-grace-aux-bases-de-donnees-vectorielles/">récupération </a>consiste à extraire des fragments de texte pertinents pour répondre à une question à partir de la base de données vectorielle, en fonction de la similarité entre la question et ces fragments. Cette similarité est calculéee à l&#8217;aide des représentations vectorielles des textes, générées par un modèle d&#8217;<em>embedding</em>. Nous avons analysé des questions qui avaient donné initialement de meilleurs résultats en français qu’en néerlandais et avons observé qu’environ 50 % de l’information récupérée (contexte) était partagée entre les deux langues. Afin d’évaluer l’impact des 50 % restants d’informations divergentes, nous avons soumis le modèle (Gemini) à des contextes identiques pour générer des réponses tant en français qu’en néerlandais. Malgré l’utilisation de ces contextes identiques, le modèle a continué à présenter des disparités de performance entre le français et le néerlandais. Par conséquent, le processus de récupération semble avoir une influence limitée sur l’écart de performance observé entre les deux langues.</p>



<h1 class="wp-block-heading">Conclusions et recommandations</h1>



<p>L’écart de performance des grands modèles de langage rapporté entre le néerlandais et &nbsp;l’anglais est un fait établi, enraciné dans la domination écrasante de l’anglais dans les corpus d’entraînement. Cet écart est exacerbé par la morphologie spécifique du néerlandais. Comparativement, si les LLM produisent généralement de meilleurs résultats en français, cela est dû à une meilleure représentation de la langue au sein des corpus d’entraînement.</p>



<p>Notre expérience a fourni des informations précieuses sur les performances des LLM dans une application RAG (Retrieval Augmented Generation) en néerlandais et en français. Bien que nous ayons initialement observé une différence significative en termes de justesse entre les réponses en néerlandais et les réponses en français, des investigations approfondies ont révélé que d’autres facteurs que la capacité du modèle pouvaient influencer les résultats. L’écart de performance est donc moins important que ce que nous pensions. De plus, nous avons constaté que les variations dans la composition de l’ensemble de test introduisaient de légères fluctuations dans les résultats. Ces conclusions démontrent que la performance des LLM est très sensible au contexte et à la formulation spécifique des questions. Nous avons également observé une légère amélioration de la qualité des réponses lors de la traduction des questions néerlandaises en anglais; cependant, cet avantage a été largement annulé par la traduction ultérieure de ces réponses anglaises en néerlandais.</p>



<p>Les conclusions présentées ci-dessus sont valables lorsqu’on considère un chatbot utilisant des contenus soigneusement rédigées dans un langage commun pour répondre à des questions. Elles ne sont pas nécessairement applicables à d’autres cas d’utilisation, il est donc essentiel de réaliser des évaluations approfondies pour chaque cas, en particulier lorsqu’on travaille dans des domaines spécifiques tels que la santé, la finance, le droit…</p>



<h3 class="wp-block-heading"><strong>Devrions-nous utiliser un modèle monolingue&nbsp;?</strong></h3>



<p>Nous n’avons pas été en mesure d’examiner cette question de manière approfondie. Notre recherche dans la littérature n’a pas révélé de preuves solides indiquant une amélioration des performances grâce aux LLM dédiés au néerlandais&nbsp;; a contrario, la présence de langues à ressources élevées dans les modèles multilingues semble améliorer la performance de langues moins dotées jusqu’à un certain degré. Cependant, plusieurs initiatives ont été lancées pour le développement de LLM en néerlandais. Les plus notables sont&nbsp;:</p>



<ul class="wp-block-list">
<li>GEITje&nbsp;: Un modèle basé sur Mistral 7B et affiné sur le néerlandais. Ce modèle n’est plus disponible en raison de problèmes de droits d’auteur.</li>



<li><a href="https://gpt-nl.nl/gpt-nl/">GPT-NL</a>&nbsp;: Une initiative en cours, soutenue par les Pays-Bas, visant à développer un LLM adapté à la langue et à la culture néerlandaise.</li>
</ul>



<p><strong>Références</strong></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>(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> (article de blogue PremAI)</li>



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



<p>&nbsp;</p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rules as Code&#160;: leçons tirées d&#8217;une expérience</title>
		<link>https://www.smalsresearch.be/rules-as-code-partie2-fr/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Sat, 31 Jan 2026 19:35:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></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=26114</guid>

					<description><![CDATA[Que se passe-t-il lorsqu'on s'attaque à un projet de Rules As Code avec un EDI basé sur l'IA ?]]></description>
										<content:encoded><![CDATA[
<p><em>Dit artikel is ook beschikbaar&nbsp;<a href="/rules-as-code-deel2-nl/" data-type="post" data-id="22734">in het Nederlands</a>.</em></p>



<p><a href="/rules-as-code-fr/">Dans un article précédent</a>, nous avons examiné <a href="https://interoperable-europe.ec.europa.eu/collection/govtechconnect/news/rules-code-rac">Rules as Code</a>, une approche visant à réduire l&#8217;écart entre les réglementations et les logiciels. Nous avons illustré qu&#8217;il existe de nombreux obstacles pratiques à surmonter, malgré l&#8217;objectif louable. L&#8217;encodage uniforme des règles avec leur historique, leurs interdépendances et leurs dépendances est un défi qui peut nécessiter un investissement considérable en termes de personnel et de ressources. De plus, une gestion active permanente est nécessaire pour prendre en compte chaque modification apportée aux règles. Même à petite échelle, une collaboration étroite entre juristes et développeurs est indispensable, car des décisions motivées devront régulièrement être prises en matière d&#8217;interprétation. En l&#8217;absence de normes industrielles et alors que les meilleures pratiques sont encore en cours d&#8217;élaboration, les <em>early adopters</em> risquent de devoir payer la <a href="https://terryu.substack.com/p/bridging-the-gap-between-early-and">pioneer tax</a>. La complexité des compétences gouvernementales ne facilite pas une éventuelle application en Belgique.</p>



<p>Partiellement sous l&#8217;impulsion du <a href="https://www.oecd.org/en/publications/cracking-the-code_3afe6ba5-en.html">rapport détaillé de l&#8217;OCDE de 2020</a>, certaines administrations se sont déjà pleinement engagées dans l&#8217;élaboration de proof-of-concepts, parfois à grande échelle. Il existe donc aujourd&#8217;hui plusieurs cadres relativement matures. La France est sans aucun doute le pays pionnier&nbsp;; l&#8217;initiative que nous allons présenter ci-dessous vient de France. Les <a href="https://regels.overheid.nl/">Pays-Bas</a> ne sont pas en reste&nbsp;: l&#8217;administration fiscale néerlandaise utilise depuis un certain temps déjà son propre langage de domaine, <a href="https://regels.overheid.nl/docs/methods/REGELSPRAAK">RegelSpraak</a>, qu&#8217;elle interprète et traite à l&#8217;aide du <em>rule engine</em> <a href="https://regels.overheid.nl/docs/methods/ALEF">ALEF</a>. Cependant, le <a href="https://gitlab.com/normativesystems">code source publié</a> à ce sujet semble pour l&#8217;instant se concentrer davantage sur la méthodologie que sur les applications.</p>



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



<p>OpenFisca <a href="https://openfisca.org/en/about/">a vu le jour en 2011 </a>en tant que moteur de <a href="https://en.wikipedia.org/wiki/Microsimulation">microsimulation</a> open source permettant de convertir les règles fiscales et sociales (&#8220;tax &amp; benefit system&#8221;) en code exécutable. Les effets de cette réglementation, et les éventuelles modifications, peuvent alors être simulés tant pour des cas individuels que pour des populations entières. Parmi les sites web utilisant OpenFisca en arrière-plan, on peut citer <a href="https://leximpact.an.fr/">LexImpact</a> (simulation des modifications de la législation socio-fiscale), <a href="https://www.mesdroitssociaux.gouv.fr/">Mes droits sociaux</a> (simulation des droits sociaux) et <a href="https://mes-aides.1jeune1solution.beta.gouv.fr/">1jeune1solution</a> (mesures de soutien diverses). Parmi les exemples étrangers, citons <a href="https://benefitme.nz/">BenefitMe</a> (Nouvelle-Zélande), <a href="https://lesmevesajudes.barcelona.cat/">Les meves ajudes</a> (Barcelone) ou <a href="https://www.policyengine.org/">PolicyEngine</a> (Royaume-Uni/États-Unis) – ces derniers ayant toutefois nécessité des <a href="https://github.com/PolicyEngine">modifications importantes</a> du moteur.</p>



<p>Afin de modéliser notre propre système fiscal et/ou de sécurité sociale, nous devons créer une <em>fourche </em>du <a href="https://github.com/openfisca/country-template">Template country OpenFisca</a> générique. Plusieurs autres pays ont déjà expérimenté cette approche, comme le Sénégal, le Paraguay et la Tunisie, qui figurent dans la <a href="https://github.com/orgs/openfisca/repositories">liste des repositories</a>. La législation régionale ou locale peut être ajoutée grâce à <a href="https://openfisca.org/doc/contribute/extensions.html">des extensions plugin</a>à un système national, comme <a href="https://github.com/openfisca/openfisca-paris">celui de Paris</a>. Une fois le repository initialisé, nous pouvons commencer à travailler sur ce qui pourrait un jour devenir <em>openfisca-belgium</em>. La modélisation dans OpenFisca se fait en écrivant des classes et des méthodes Python, qui représentent les entités, les variables et les formules de calcul issues de la réglementation.</p>



<p>Malheureusement, c&#8217;est à peu près là que s&#8217;arrête la partie facile. Le repository du country template est minimaliste et, bien qu&#8217;il existe une <a href="https://openfisca.org/doc/index.html">documentation</a> avec un petit tutoriel pour créer sa propre version, celle-ci se concentre principalement sur les premières étapes. Les directives sur la manière de structurer au mieux notre propre fourche dès que le nombre de variables et de paramètres augmente font largement défaut. Le repository du projet parent <a href="https://github.com/openfisca/openfisca-france/tree/master">openfisca-france</a> peut certes servir d&#8217;exemple, mais il est très volumineux et ne permet pas vraiment de comprendre les raisons de leurs choix structurels ou architecturaux.</p>



<p>L&#8217;aspect d&#8217;une GUI ou d&#8217;une interface web reste également sous-estimé. Pourtant, l&#8217;interface de <a href="https://socio-fiscal.leximpact.an.fr/?parameters=irpp_economique&amp;waterfall=brut_to_disponible">LexImpact simulator pour l&#8217;impôt sur le revenu en France</a>, par exemple, est justement un point fort. Comme guide pour la construction d&#8217;une interface web, on se réfère à <a href="https://github.com/redte-ch/ReDistributeMe/tree/main">tutoriels et slides d&#8217;un workshop</a>, où les premières étapes sont présentées dans <a href="https://svelte.dev/">Svelte</a>, <a href="https://react.dev/">React</a> et <a href="https://vuejs.org/">VueJS</a>. Cependant, le fait qu&#8217;une GUI ou une application web doive encore être construite <em>from scratch</em> en plus d&#8217;une instance OpenFisca propre constitue un obstacle supplémentaire à l&#8217;adoption. La construction d&#8217;une GUI est en effet chronophage. Il serait utile de disposer de bibliothèques OpenFisca-GUI avec des composants réutilisables pour les principaux frameworks web, afin qu&#8217;un serveur OpenFisca puisse éventuellement être associé à une interface web générique par défaut. Un <a href="https://www.drupal.org/project/webform_openfisca">plugin Drupal</a> semble actuellement être le seul à aller quelque peu dans cette direction.</p>



<h1 class="wp-block-heading">L&#8217;IA à la rescousse&nbsp;?</h1>



<p>Étant donné qu&#8217;OpenFisca, Svelte, React et Vue sont tous nouveaux pour l&#8217;auteur, et que les outils d&#8217;IA promettent d&#8217;accélérer l&#8217;intégration des développeurs, nous saisissons l&#8217;occasion pour tester simultanément l&#8217;IDE <a href="https://cursor.com/download">Cursor</a> alimenté par l&#8217;IA. Ce clone de <a href="https://code.visualstudio.com/">Visual Studio Code</a> est enrichi de la possibilité d&#8217;appeler des LLM (dans notre cas, basés sur le cloud public). De plus, des sélections issues de fichiers du projet peuvent être marquées comme contexte pour la question. Cursor peut fournir des <a href="https://cursor.com/docs">suggestions</a> d&#8217;ajouts ou de modifications à apporter aux fichiers qui, une fois approuvées, peuvent être directement intégrées dans la base de code.</p>



<p>Interagir avec des modèles d&#8217;IA <a href="https://news.stanford.edu/stories/2025/10/ai-chatbot-privacy-concerns-risks-research">comporte des risques pour la confidentialité</a>. Cette expérience est principalement possible car nous travaillons avec du code open source, des réglementations publiées et leur documentation également publique, qui ne sont pas sensibles. Cependant, étant donné que tout ce qui se trouve dans l&#8217;IDE peut être envoyé au modèle de langage, nous devons toujours veiller à ne pas ouvrir dans l&#8217;IDE des fichiers contenant des identifiants, des clés API ou des informations personnelles. Cela reste la responsabilité de chaque développeur. Dans tous les cas, il est recommandé d&#8217;être prêt à faire tourner les clés API ou les credentials, car dans le feu de l&#8217;action d&#8217;un debugging, il est facile de partager trop d&#8217;informations avec un LLM.</p>



<p>Enfin, il convient de mentionner que cette expérience a été réalisée avec les versions 1.6 et 1.7 de Cursor en septembre-octobre 2025, avec le modèle de langage sous-jacent GPT-4.5 d&#8217;OpenAI, puis GPT-5.0, utilisé avec une clé API dédiée (et non via Cursor). Les versions ultérieures disposent de nombreuses fonctionnalités plus récentes (notamment des workflows <em>agentic</em>) et il est possible que l&#8217;expérience soit aujourd&#8217;hui (janvier 2026) très différente. Cependant, les principaux enseignements restent généralement valables pour tout développement alimenté par l&#8217;IA, que ce soit via IDE, ligne de commande ou les deux (par exemple, Anthropic <a href="https://code.claude.com/docs/en/overview">Claude Code</a>).</p>



<p>Dans un premier temps, nous ajoutons la documentation nécessaire à notre projet. Nous prenons comme exemple la <a href="https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&amp;lg_txt=f&amp;type=&amp;sort=&amp;numac_search=&amp;cn_search=2002052647&amp;caller=eli&amp;&amp;view_numac=2002052647nl">loi du 26 mai 2002 concernant le droit à l&#8217;intégration sociale</a>. Avec tous les autres arrêtés royaux, lois et circulaires pertinents, elle est clairement répertoriée sur le site web du <a href="https://www.mi-is.be/fr/reglementations">SPP Intégration sociale</a>. Afin de faciliter la recherche et l&#8217;interprétation du texte pour un LLM dans un IDE, nous l&#8217;enregistrons sous forme de fichier texte plat sans mise en forme, que nous ajoutons à un nouveau dossier contenant les sources pertinentes dans l&#8217;arborescence source du projet. Nous ne pouvons que supposer que cette approche est optimale, mais il faut bien commencer quelque part.</p>



<h2 class="wp-block-heading">Entités</h2>



<p>Les entités dans OpenFisca indiquent pour qui nous effectuons le calcul. Il peut s&#8217;agir d&#8217;individus, de familles ou d&#8217;autres groupes de personnes (entreprises, organisations, etc.). Ce sont les fondements sur lesquels nous pourrons ensuite spécifier des variables qui, ensemble, formeront une &#8220;situation&#8221; pour laquelle nous pourrons effectuer un calcul.&nbsp;Les entités <em>Person</em> et <em>Household</em> sont déjà présentes <a href="https://github.com/openfisca/country-template/blob/main/openfisca_country_template/entities.py">dans le code</a>. Une question logique se pose donc&nbsp;: sur la base du texte de loi donné, pouvons-nous définir d&#8217;autres entités qui seraient utiles&nbsp;?</p>



<p>Après avoir posé la question à GPT-5 dans Cursor, avec le texte de loi sélectionné comme contexte, il nous est proposé d&#8217;ajouter les entités suivantes&nbsp;:</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>Les modifications proposées au code sont syntaxiquement correctes. Cependant, aucune de ces trois modifications n&#8217;est utile ou nécessaire&nbsp;: dans les trois cas, il s&#8217;agit de variantes de<em> Person</em>. Les propriétés qui leur permettraient, par exemple, de percevoir un revenu d&#8217;intégration sont plutôt des variables ajoutées à l&#8217;entité <em>Person</em> déjà existante. La valeur de ces variables dépend en outre d&#8217;autres variables également liées à ce même individu, telles que les revenus du travail ou le statut d&#8217;invalidité. Les entités, qui servent principalement à des concepts autonomes, ne sont pas le bon choix dans ce cas.&nbsp;</p>



<p>En outre, GPT-5 semble avoir mal interprété le concept de &#8220;rôle&#8221; au sein d&#8217;une entité de groupe OpenFisca. Il tente de construire &#8220;Eligible Person for Societal Integration&#8221; avec différents &#8220;rôles&#8221; comme composants&nbsp;: &#8220;Belgian National&#8221;, &#8220;EU Citizen&#8221;, &#8220;Foreigner&#8221;, &#8220;Stateless&#8221;, &#8220;Refugee&#8221;&#8230; Sans doute parce que ces possibilités apparaissent à l&#8217;<a href="https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&amp;lg_txt=f&amp;type=&amp;sort=&amp;numac_search=&amp;cn_search=2002052647&amp;caller=eli&amp;&amp;view_numac=2002052647nl#Art.3">Art.3, 3°, de la loi</a>. Dans OpenFisca, cependant, une entité de groupe est composée de personnes qui se voient chacune attribuer un rôle. Un <em>Household</em> comprend ainsi des rôles <em>Adult</em> et <em>Child</em>. Il est assez absurde qu&#8217;une <em>EligiblePerson</em> puisse comprendre plusieurs <em>Foreigners</em>. La nationalité ou l&#8217;origine, ou d&#8217;autres conditions fixées dans cette loi, sont également ici des variables liées à la personne, et non à une entité en soi.&nbsp;</p>



<p>À un autre moment, une entité distincte a été créée pour le CPAS. Bien qu&#8217;il semble logique de modéliser les CPAS et de les considérer comme une entité – ils sont en effet mentionnés dans la loi –, ce n&#8217;est pas (encore) le cas ici. Il n&#8217;existe en effet pas différents types de CPAS avec des caractéristiques ou des rôles différents, pour lesquels nous devrions effectuer des calculs différents à chaque fois. Dans le contexte de cette loi, où c&#8217;est le citoyen pour lequel nous calculons le droit à l&#8217;aide sociale, le CPAS est avant tout une donnée constante et invariable. Dans OpenFisca, nous pouvons donc pour l&#8217;instant ignorer cet aspect. (Un type d&#8217;entité &#8220;institut&#8221; n&#8217;est pas non plus prévu.)&nbsp;</p>



<p>Nous constatons ici que Cursor ne peut pas répondre &#8220;non&#8221; à la question de savoir si d&#8217;autres entités utiles peuvent être ajoutées. Il ne peut pas critiquer ou corriger de son propre chef le raisonnement qui sous-tend cette question. Tout au long de l&#8217;expérience, Cursor et GPT-5 ont également montré une tendance à la complexité inutile. Cela représente un risque important pour les développeurs qui travaillent avec du code ou des frameworks inconnus&nbsp;: si l&#8217;on suit trop rapidement ces suggestions, on risque de perdre le contrôle par la suite et de devoir apporter des corrections très difficiles aux fondements du projet. Une fois qu&#8217;une mauvaise voie a été empruntée, il s&#8217;avère également difficile de revenir en arrière et de faire oublier ces étapes. Surtout si on les a d&#8217;abord acceptées par ignorance, elles s&#8217;inscrivent dans le contexte et sont reprises dans les questions suivantes. Ce <a href="https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html">&#8220;context rot&#8221;</a> insidieux est désormais un problème bien connu et une cause importante de perte de temps avec le <em>AI enabled coding</em>.</p>



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



<p>Le cœur du modèle réside dans les variables qui représentent les droits et les conditions prévus par la loi.&nbsp;L&#8217;<a href="https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&amp;lg_txt=f&amp;type=&amp;sort=&amp;numac_search=&amp;cn_search=2002052647&amp;caller=eli&amp;&amp;view_numac=2002052647nl#Art.2">article 2</a> de la loi énumère les différentes formes d&#8217;intégration sociale auxquelles une personne peut avoir droit (notamment l&#8217;emploi, le revenu d&#8217;intégration, le projet individualisé).&nbsp;L&#8217;<a href="https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&amp;lg_txt=f&amp;type=&amp;sort=&amp;numac_search=&amp;cn_search=2002052647&amp;caller=eli&amp;&amp;view_numac=2002052647nl#Art.2">article 3</a> contient les conditions qu&#8217;une personne doit remplir pour exercer ce droit. Nous avons transposé ces dispositions étape par étape dans le code.</p>



<p>Dans la pratique, le droit à l&#8217;intégration sociale signifie qu&#8217;un CPAS doit soutenir une personne par le biais (1) d&#8217;un emploi ou d&#8217;une formation, (2) d&#8217;un revenu d&#8217;intégration, ou (3) d&#8217;un projet individualisé d&#8217;intégration sociale. Cela peut se traduire par trois variables booléennes sur l&#8217;entité Personne, par exemple <code>employment_right</code>, <code>living_wage_right</code> et <code>individualized_project_right</code>. Cursor fournit ici une suggestion de code pertinente et propose une formule <em>placeholder</em> simple&nbsp;: tant qu&#8217;une personne &#8220;est éligible à l&#8217;intégration&#8221; (une autre variable), le droit s&#8217;applique. Nous obtenons ainsi la définition suivante de<em> </em><code>employment_right</code>&nbsp;:</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>Le contenu de cette formule <em>placeholder </em>est abordé dans l&#8217;article 3 ci-dessous. Celui-ci modélise les conditions suivantes pour être éligible&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>Séjour en Belgique </strong>(selon les règles à déterminer par arrêté royal).</li>



<li><strong>Âge</strong>&nbsp;: la personne est<strong> majeure</strong> (18 ans et plus) ou, si elle est mineure, <strong>assimilée </strong>à une personne majeure selon les exceptions prévues par la présente loi.</li>



<li><strong>Nationalité ou statut de séjour&nbsp;</strong>: la personne est belge, citoyenne de l&#8217;UE (après 3 mois de séjour), étrangère enregistrée, apatride, réfugiée ou bénéficiaire d&#8217;une protection subsidiaire.</li>



<li><strong>Ressources insuffisantes</strong></li>



<li><strong>Disposition à travailler</strong> (sauf si cela est impossible pour des raisons de santé ou d&#8217;équité).</li>



<li><strong>Épuisement des droits issus d&#8217;autres régimes</strong></li>
</ul>



<p>Toutes ces conditions sont regroupées dans une variable booléenne centrale <code>societal_integration_right</code>. Cette variable indique si une personne, compte tenu de sa situation personnelle, <strong>peut</strong> prétendre à l&#8217;intégration sociale. En fait, il s&#8217;agit de la traduction de <em>&#8220;la personne remplit-elle toutes les conditions de l&#8217;article 3&nbsp;?</em>&#8220;. La formule combine toutes les sous-conditions&nbsp;:</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>Notons ici quelques lacunes étranges dans la suggestion de Cursor. Ainsi, le nom de la variable <code>societal_integration_right</code> n&#8217;est pas identique au placeholder <code>eligible_for_integration</code> défini précédemment, alors que c&#8217;était pourtant l&#8217;intention. En outre, la condition de nationalité omet tout simplement la possibilité d&#8217;une protection subsidiaire. Enfin, la sixième condition, qui stipule que la personne doit d&#8217;abord faire valoir ses droits à d&#8217;éventuelles prestations sociales, est mentionnée de manière très rudimentaire sous le nom de <code>claiming_benefits</code>, un nom de variable qui ne reflète pas vraiment ce qui est visé.</p>



<p>Nous pouvons donc accepter cette suggestion, mais nous sommes immédiatement obligés d&#8217;apporter trois corrections. Nous pouvons facilement détecter la non-conformité du nom de la variable, car les tests ne fonctionneront pas s&#8217;il reste des variables non déclarées dans le code. Un élément manquant dans la formule, tel qu&#8217;une condition oubliée, est cependant beaucoup plus facile à négliger et, s&#8217;il n&#8217;est pas détecté, entraîne à coup sûr des erreurs d&#8217;exécution. Nous constatons donc ici la nécessité de se référer au texte de loi afin de vérifier que le code généré correspond bien à ce que dit le texte de loi. Cette vérification doit être effectuée avec suffisamment d&#8217;attention pour pouvoir identifier les appellations malheureuses ou les interprétations subtiles erronées du texte.</p>



<p>Les corrections éventuelles doivent également être effectuées le plus rapidement possible. Si un code erroné reste présent dans l&#8217;éditeur, il fera en effet partie du contexte utilisé par le modèle d&#8217;IA et servira lui-même de base pour les suggestions suivantes. Cela peut conduire à une situation où l&#8217;on continue à recevoir des suggestions contenant toujours les mêmes erreurs, qu&#8217;il faut donc corriger à chaque fois, ce qui n&#8217;est pas propice à la productivité.</p>



<p>Les variables utilisées dans la méthode <code>formula()</code> de <code>societal_integration_right</code> ci-dessus doivent bien sûr être définies à leur tour&nbsp;: pour chacune de ces variables, nous devons écrire une classe. Cela peut donner lieu à des chaînes complexes de dépendances. Ainsi,<em> </em><code>is_major</code> pourrait être une simple variable d&#8217;entrée booléenne, mais nous pouvons également la calculer sur la base de la date du jour et d&#8217;une nouvelle variable <code>birthdate</code>. Le calcul de la formule des variables peut également utiliser les paramètres d&#8217;une loi – ainsi, en Belgique, la majorité n&#8217;est atteinte qu&#8217;à partir de 18 ans depuis le <a href="https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&amp;lg_txt=f&amp;type=&amp;sort=&amp;numac_search=&amp;cn_search=1990011930&amp;caller=eli&amp;&amp;view_numac=1990011930nl">1<sup>er</sup> mai 1990</a>. Cela nous ramènerait alors au Code civil et à son histoire – pour rester concis, nous n&#8217;approfondirons pas cette question pour l&#8217;instant.</p>



<p>Dernière remarque&nbsp;: le modèle tel qu&#8217;il est construit ici est bien sûr une représentation simplifiée. Notez toutefois que même dans ce cas, après seulement trois articles de loi, nous avons déjà défini une dizaine de classes Python, avec la possibilité d&#8217;en ajouter d&#8217;autres si nous souhaitons approfondir le sujet. Cursor et GPT-5 écrivent un code relativement verbeux, avec de nombreuses variables et méthodes auxiliaires, qui pourraient parfois être simplifiées. Certains détails de la loi, tels que le délai d&#8217;attente de trois mois pour les citoyens de l&#8217;UE ou les exceptions qui existent pour certaines catégories de mineurs (<a href="https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&amp;lg_txt=f&amp;type=&amp;sort=&amp;numac_search=&amp;cn_search=2002052647&amp;caller=eli&amp;&amp;view_numac=2002052647nl#Art.7">art. 7</a>), nécessiteraient de nombreuses variables ou conditions supplémentaires dans un modèle complet.</p>



<h1 class="wp-block-heading">IA et code&nbsp;: quelques pièges</h1>



<p>En ce qui concerne les meilleures pratiques pour l&#8217;utilisation de l&#8217;IA dans le cadre de tels projets, nous identifions encore quelques pièges, en plus de ceux que nous avons déjà mentionnés.</p>



<p>Ajouter trop de documentation au début conduit rapidement à une &#8220;<a href="https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html">confusion contextuelle</a>&#8220;, dans laquelle les suggestions ou les réponses du LLM sont basées sur des informations qui ne sont pas (encore) pertinentes. Il est préférable d&#8217;ajouter la documentation progressivement, au fur et à mesure que la fonctionnalité se développe, plutôt que d&#8217;ajouter l&#8217;analyse complète et le contexte à l&#8217;IDE dès le départ. Dans le cas de la réglementation, ajoutez les règles article par article à l&#8217;IDE, au fur et à mesure de l&#8217;avancement du projet, et résistez à la tentation d&#8217;intégrer à l&#8217;avance l&#8217;ensemble du texte de loi dans l&#8217;IDE en tant que &#8220;référence encyclopédique&#8221;.</p>



<p>Le &#8220;context rot&#8221; ou &#8220;context poisoning&#8221; survient lorsque l&#8217;IA s&#8217;engage dans une mauvaise voie, s&#8217;y enlise et finit par oublier des informations plus pertinentes, ce qui rend la récupération plus difficile. Le &#8220;<a href="https://www.anthropic.com/engineering/multi-agent-research-system">context quarantining</a>&#8220;, qui consiste à diviser le problème en sous-problèmes plus petits, chacun avec son propre contexte, est un remède logique à ce problème. C&#8217;est également la voie empruntée par la plupart des systèmes de &#8220;deep research&#8221; ou &#8220;<a href="https://www.anthropic.com/engineering/multi-agent-research-system">multi agentic</a>&#8220;. Dans un IDE, cela impliquerait qu&#8217;un système d&#8217;IA devrait segmenter la base de code et la documentation à partir d&#8217;une certaine taille. La mise en œuvre technique de cette solution en arrière-plan semble être un défi de taille, et différents IDE développeront probablement leur propre approche à cet égard dans un avenir proche.</p>



<p>Une autre source de frustration était que l&#8217;IA plaçait parfois le code ou les fichiers au mauvais endroit ou supposait que certaines choses existaient. Par exemple, les formules générées faisaient référence à des variables qui n&#8217;étaient pas encore définies. Cela génère bien sûr des messages d&#8217;erreur lors des tests. Nous devions alors ajuster l&#8217;IA ou insérer nous-mêmes des variables supplémentaires pour couvrir ces références. Même des détails mineurs, tels que le formatage de la documentation ou la création ou non des importations nécessaires, nécessitaient parfois une correction manuelle. Ce type d&#8217;incohérences démontre qu&#8217;il n&#8217;est pas possible de se fier aveuglément aux suggestions de l&#8217;IA. Un développeur doit constamment vérifier si le code généré correspond à l&#8217;intention et, dans le cas contraire, intervenir immédiatement.</p>



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



<p>Nous souhaitons également signaler l&#8217;existence de <a href="https://publi.codes/">publi.codes</a> comme alternative possible à OpenFisca. Plus récent et plus moderne, ce dernier exige que les règles soient codées au format YAML, ce qui est beaucoup plus pratique que l&#8217;écriture de sous-classes en Python et beaucoup plus lisible pour les non-développeurs. En contrepartie, on est toutefois limité aux <a href="https://publi.codes/docs/mecanismes">opérations autorisées</a> par le moteur sous-jacent. Ce n&#8217;est qu&#8217;à partir de la <a href="https://github.com/orgs/publicodes/projects/5">version 2, encore en cours de développement</a>, que des possibilités d&#8217;encoder des <a href="https://github.com/publicodes/publicodes/issues/707">barèmes</a> ou des <a href="https://github.com/publicodes/publicodes/issues/705">abattements</a> (montants exonérés), très fréquents en Belgique, seront ajoutées.</p>



<p>La version actuelle de publi.codes dépend en outre de l&#8217;écosystème NPM, qui est actuellement régulièrement affecté par des <a href="https://about.gitlab.com/blog/gitlab-discovers-widespread-npm-supply-chain-attack/">attaques du supply chain</a>. Publi.codes v2 serait quant à lui <a href="https://publi.codes/blog/publicodes-v2">compilé vers OCaml</a>, un langage de programmation que nous n&#8217;utilisons pas chez Smals. Étant donné qu&#8217;il y a peu de chances que Smals souhaite introduire ce langage de programmation dans son portefeuille (et mettre en place une équipe de support à cet effet), il ne semblait pas très utile d&#8217;examiner publi.codes en profondeur dans le cadre de cet exercice. Il convient toutefois de noter que publi.codes dispose de <a href="https://publi.codes/docs/api/react-ui">quelques libraries</a> prêtes à l&#8217;emploi en matière de composants UI.</p>



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



<p>OpenFisca et publi.codes sont deux systèmes particulièrement performants lorsque les règles peuvent être modélisées sous forme de calculs explicites et testables. Ils sont moins adaptés aux réglementations qui font appel aux décisions discrétionnaires, à la libre interprétation, aux exceptions sans paramètres clairs ou aux workflows de &#8220;case management&#8221;. Il s&#8217;agit avant tout de systèmes de calcul et de règles, et non de plateformes de traitement de dossiers. Ils peuvent donc éventuellement servir de moteur pour des applications capables de calculer les impôts ou les allocations au niveau de la personne/du ménage (droit à quelque chose + montant), ou pour simuler l&#8217;impact politique d&#8217;éventuelles modifications (&#8220;combien coûte cette réforme&nbsp;?&#8221;, &#8220;qui y gagne/y perd&nbsp;?&#8221;). Cela peut être intéressant tant pour les législateurs que pour les citoyens.</p>



<p>Cependant, un projet OpenFisca ne se met pas en place rapidement. Sur le plan conceptuel, OpenFisca est quelque peu déroutant pour un développeur&nbsp;: bien qu&#8217;OpenFisca utilise des classes Python, celles-ci ne servent pas à modéliser des objets, mais à enregistrer de manière déclarative des entités, des variables et des règles de calcul issues de la réglementation. Étant donné que par variable, il faut écrire une classe et que des dizaines de variables peuvent facilement entrer en jeu dans un article de loi complexe, on se retrouve avec une pile de code qui s&#8217;accumule rapidement et qui est difficile à organiser de manière claire. En outre, le développement d&#8217;une interface graphique nécessite également beaucoup de travail supplémentaire. Le projet manque encore de <em>tooling </em>nécessaire pour atténuer ces problèmes récurrents. (Bien sûr, cela n&#8217;aide pas lorsque l&#8217;<a href="https://openfisca.org/en/about/">administration publique</a>, qui semble considérer que les projets open source peuvent par définition s&#8217;autofinancer, décide soudainement de fermer les vannes en 2020.</p>



<p>Enfin, nous pouvons ajouter que cette expérience a été à la fois un <em>reality check</em> utile et instructif sur ce que les LLM peuvent apporter, et gâcher, à un environnement de travail de développeur. Le meilleur conseil reste de garder les rênes fermement en main et de travailler par petites étapes incrémentielles. Certains outils d&#8217;IA seront plus performants que d&#8217;autres dans divers domaines. Donner des réponses négatives ou détecter des erreurs dans les questions reste un défi pour les LLM, ce qui comporte certains risques. Cependant, l&#8217;assistance IA dans les IDE évolue rapidement, et une expérience similaire se déroulera sans doute différemment l&#8217;année prochaine.</p>



<p>Rules As Code ne signifie certainement pas qu&#8217;aujourd&#8217;hui, nous pouvons fournir un texte de loi à une IA pour qu&#8217;elle déploie un programme. Cependant, dans les années à venir, les <a href="https://rules-as-code.yellenge.nl/">forums spécialisés</a> accorderont sans aucun doute une grande attention à l&#8217;interaction entre la loi, la mise en œuvre et les outils d&#8217;IA. Pour l&#8217;instant, la complexité de la réglementation elle-même, même avec une IA de plus en plus performante, reste le principal obstacle aux projets Rules As Code.</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>Confidentialité et évolutivité grâce à divulgation nulle de connaissance  </title>
		<link>https://www.smalsresearch.be/privacy-en-schaalbaarheid-met-zero-knowledge-bewijzen-2/</link>
		
		<dc:creator><![CDATA[Kristof Verslype]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></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=23410</guid>

					<description><![CDATA[Les preuves zero-knowledge contribuent à améliorer la confidentialité et l'évolutivité dans le contexte de la blockchain. De quoi s'agit-il, quels sont les défis et sont-elles déjà mises en œuvre ?]]></description>
										<content:encoded><![CDATA[
<p><em>Dit artikel is ook beschikbaar&nbsp;in het <a href="/privacy-en-schaalbaarheid-met-zero-knowledge-bewijzen/" data-type="post" data-id="21119">Nederlands</a>.</em></p>



<figure class="wp-block-image alignright"><a href="/wp-content/uploads/2025/12/MartinHandfordWallyFriends.png"><img loading="lazy" decoding="async" width="244" height="300" src="/wp-content/uploads/2025/12/MartinHandfordWallyFriends-244x300.png" alt="" class="wp-image-24630" 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></figure>



<p><a href="https://fr.wikipedia.org/wiki/O%C3%B9_est_Charlie_%3F">Où est Charlie&nbsp;?</a> est un jeu bien connu qui consiste à trouver un personnage spécifique &#8211; appelé Charlie &#8211; dans un dessin très détaillé où figurent de nombreux autres personnages. Comment Paula (fournisseur de preuve ou prouveur) peut-elle prouver à Victor (vérificateur) qu&#8217;elle sait où se trouve Charlie sans révéler de détails sur sa position dans l&#8217;image&nbsp;? Paula peut se servir d&#8217;un cache dont la hauteur et la largeur sont deux fois plus grandes que celles de l&#8217;image dans laquelle est caché Charlie. Au centre du cache se trouve un trou de la taille de Charlie. En positionnant le cache de manière à ce que le trou laisse entrevoir Charlie uniquement, Paula prouve à Victor qu&#8217;elle a localisé Charlie sans révéler d&#8217;informations sur son emplacement.</p>



<p>Il s&#8217;agit là d&#8217;un exemple de <em>preuve à divulgation nulle de connaissance</em> (en anglais <em>zero-knowledge proof</em>), ou <em>preuve ZK</em>, qui permet à une partie de prouver une affirmation à une autre partie sans divulguer plus de détails sur cette affirmation. À strictement parler, l&#8217;exemple de Charlie n&#8217;est pas tout à fait sans divulgation de connaissance, car des informations sur la posture et l&#8217;expression faciale de Charlie sont également divulguées, ce qui peut aider à le retrouver.</p>



<p>Un autre <a href="https://eprint.iacr.org/2018/046.pdf">exemple</a>, pour lequel une preuve de concept a été élaborée, permettrait de prouver au public que l&#8217;ADN d&#8217;un candidat à la présidence n&#8217;est pas répertorié dans une base de données ADN médico-légale. La police exécuterait un code accessible au public sur des données qui resteraient cachées au public&nbsp;: la base de données ADN et le profil ADN du candidat à la présidence. Le résultat pourrait être &#8220;<em>aucune correspondance</em>&#8220;, &#8220;<em>correspondance partielle</em>&#8221; ou &#8220;<em>correspondance complète</em>&#8220;. Le public – du moins les cryptographes parmi eux – serait alors convaincu que le résultat est l&#8217;exécution correcte du code sur les données confidentielles. L&#8217;affirmation prouvée ici à l&#8217;aide d&#8217;une preuve ZK concerne l&#8217;intégrité des <u>calculs sur des données confidentielles </u>.</p>



<p>Les titres numériques anonymes, abordés dans un <a href="_wp_link_placeholder" data-wplink-edit="true">précédent article,</a> permettent en revanche aux citoyens de prouver de manière sélective certaines <u>caractéristiques</u> les concernant, telles que leur majorité, leur nationalité ou la détention d&#8217;un permis de conduire valide. Les titres numériques anonymes recourent intensivement aux preuves ZK. Comme nous le verrons plus loin dans cet article, les ZKP peuvent également être utilisés pour la divulgation sélective de données à caractère personnel.</p>



<p>En résumé, les preuves ZK permettent à une partie, le prouveur, de prouver des affirmations à une autre partie, le vérificateur, sans intermédiaire de confiance. Ces affirmations peuvent donc porter sur des calculs sur des données confidentielles, mais aussi sur des caractéristiques (attributs) d&#8217;un citoyen (ou même d&#8217;un animal ou d&#8217;un objet).</p>



<p>Formellement, une preuve ZK doit répondre à trois critères&nbsp;:</p>



<ol class="wp-block-list">
<li><strong>Complétude (<em>completeness</em>).</strong> Si l&#8217;affirmation est vraie, un vérificateur en sera convaincu.</li>



<li><strong>Robustesse (<em>soundness</em>).</strong> Si l&#8217;affirmation est fausse, le prouveur ne peut pas, dans la pratique, convaincre à tort le vérificateur du contraire.</li>



<li><strong>Zéro-connaissance (<em>zero-knowledge</em>). </strong>Si l&#8217;affirmation est vraie, le vérificateur n&#8217;apprend rien de plus que cette affirmation.</li>
</ol>



<p>Cet article aborde deux cas d&#8217;utilisation importants pour les ZKP&nbsp;: l&#8217;amélioration de l&#8217;évolutivité et de la confidentialité des applications blockchain d&#8217;une part, et la gestion de l&#8217;identité des citoyens dans le respect de la vie privée d&#8217;autre part.</p>



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



<figure class="wp-block-image alignright"><a href="/wp-content/uploads/2025/09/chain-7071730_1280.jpg"><img loading="lazy" decoding="async" width="300" height="212" src="/wp-content/uploads/2025/09/chain-7071730_1280-300x212.jpg" alt="" class="wp-image-23397" 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></figure>



<p>De nombreux <a href="https://onlinelibrary.wiley.com/doi/full/10.1002/spy2.401">cas d’usage potentiels</a> ont déjà été définis dans la littérature, même si, à ce jour, seul un nombre limité d&#8217;entre eux ont été mis en pratique. L&#8217;un des principaux domaines d&#8217;application est celui de la <strong><em>blockchain</em> et des monnaies virtuelles (cryptomonnaies)</strong>.</p>



<p>Les preuves ZK y sont utilisées pour améliorer la confidentialité des transactions. Dans le Bitcoin et quelques autres monnaies virtuelles, l&#8217;adresse (le numéro de compte) de l&#8217;expéditeur, l&#8217;adresse du destinataire et le montant transféré sont visibles par tous pour chaque transaction&nbsp;; tout est publié sur la blockchain. Une situation loin d&#8217;être idéale sur le plan de la confidentialité&#8230;</p>



<p>La monnaie virtuelle <a href="https://z.cash/learn/what-are-zk-snarks/"><em>Zcash</em></a> permet aux utilisateurs de dissimuler ces trois éléments à l&#8217;aide de preuves ZK. Pour ce faire, elle recourt aux <em>zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)</em>, développés en 2012 et appliqués pour la première fois par <a href="https://z.cash/learn/what-are-zk-snarks/"><em>Zcash</em></a>. Le S dans zk-SNARKs signifie &#8220;<em>succint</em>&#8220;, soit &#8220;<em>concis</em>&#8221; en français. Les preuves ZK dans Zcash peuvent &#8220;<em>être vérifiées en quelques millisecondes et ne font que quelques centaines d&#8217;octets&#8221;</em>.</p>



<p>Outre la confidentialité, les preuves ZK sont également utilisées pour augmenter l&#8217;évolutivité des <em>blockchains</em>. La capacité limitée des <em>blockchains</em> a incité la communauté à rechercher activement des moyens d&#8217;améliorer l&#8217;évolutivité sans compromettre la sécurité ou la vitesse. Une meilleure évolutivité signifie qu&#8217;une transaction nécessite moins de ressources avec, à la clé, une baisse des coûts de transaction. L&#8217;une des approches les plus prometteuses est celle des <em>zk-rollups</em>, utilisés sur la <em>blockchain</em> Ethereum par <a href="https://www.alchemy.com/starknet"><em>Starknet</em></a><em>, </em><a href="https://www.zksync.io/"><em>ZKsync</em></a><em> et</em> <a href="https://polygon.technology/"><em>Polygon</em></a> entre autres. Au lieu de placer chaque transaction séparément sur la <em>blockchain</em>, celles-ci sont regroupées hors chaîne, exécutées et seul le résultat, accompagné d&#8217;une preuve ZK de bonne exécution, est placé sur la <em>blockchain</em>. Cela permet de réduire le nombre d&#8217;octets écrits sur la <em>blockchain</em>, et la vérification de la preuve ZK est plus rapide que la vérification de toutes les transactions individuelles. Un espace de stockage et une puissance de calcul moindres sont donc requis.</p>



<p>Parallèlement, des preuves ZK sont en cours d&#8217;élaboration pour démontrer qu&#8217;un <em>smart contrat</em> (code) a été correctement exécuté. Là encore, la raison est l&#8217;évolutivité&nbsp;: chaque fois qu&#8217;une fonction d&#8217;un <em>smart contract</em> (code sur la <em>blockchain</em>) est appelée aujourd&#8217;hui, chaque nœud de la <em>blockchain</em> exécute exactement le même code. L&#8217;idée est qu&#8217;un seul nœud exécute le <em>smart contract</em> et prouve sa bonne exécution. Les autres nœuds vérifient la preuve. Si une preuve ZK est plus efficace que l&#8217;exécution du <em>smart contract</em>, on augmente l&#8217;évolutivité.</p>



<h1 class="wp-block-heading"><strong>Gestion de l&#8217;identité</strong></h1>



<figure class="wp-block-image alignright"><a href="/wp-content/uploads/2025/12/eid-be.png"><img loading="lazy" decoding="async" width="300" height="189" src="/wp-content/uploads/2025/12/eid-be-300x189.png" alt="" class="wp-image-24638" 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></figure>



<p></p>



<p>Les <a href="/controle-over-uw-digitale-identiteit-met-anonieme-credentials/">titres numériques anonymes</a> &#8211; qui font appel aux preuves à divulgation nulle de connaissance (zero knowledge proof – ZKP) – permettent à un citoyen de divulguer de manière sélective des informations le concernant, par exemple sa majorité. Dans la réalité, malheureusement, aucun pays ou région n&#8217;a massivement adopté les titres numériques anonymes dans les documents d&#8217;identité. Aussi des recherches plus récentes se sont-elles penchées sur d&#8217;autres pistes, à savoir la génération d&#8217;une ZKP sur la base d&#8217;un document d&#8217;identité existant. Des travaux académiques récents se sont concentrés sur le <a href="https://eprint.iacr.org/2022/878.pdf">passeport</a>&nbsp;et le <a href="https://eprint.iacr.org/2024/2010.pdf">permis de conduire</a> aux États-unis.</p>



<p>Durant l’été 2025, la VUB&nbsp;a <a href="https://eprint.iacr.org/2025/1266">publié</a>&nbsp;une étude consacrée à la carte d&#8217;identité belge.<br>Cette étude s&#8217;inscrit dans le cadre du projet&nbsp;<a href="https://sdm.brussels/">SDM</a> financé par&nbsp;<a href="https://www.innoviris.brussels/">Innoviris</a>. S&#8217;il s&#8217;agit d&#8217;un travail prometteur, il comporte toutefois divers défis. Un premier défi concerne la faible efficacité&nbsp;: il faut 22 secondes à un ordinateur portable pour générer une preuve, délai qui sera encore plus long sur un téléphone. La révocation représente un deuxième défi&nbsp;: lorsqu&#8217;une carte eID est perdue ou volée et que les certificats sur la carte sont révoqués en conséquence, il ne doit plus être possible de générer des ZKP. &nbsp;</p>



<p>La VUB souhaite aller encore plus loin, à savoir utiliser les ZKP pour démontrer qu&#8217;un citoyen dispose de certains droits, sans divulguer d&#8217;autres données à caractère personnel. À l&#8217;avenir, un citoyen pourrait ainsi prouver qu&#8217;il remplit les conditions pour bénéficier d&#8217;un&nbsp;<a href="https://www.vlaanderen.be/bouwen-wonen-en-energie/huren-en-verhuren/geconventioneerde-verhuur-en-huur-budgethuren/budgethuren-geconventioneerd-huren">loyer modéré</a>, sans avoir à donner de plus amples informations à ce sujet.</p>



<p>Itsme a récemment annoncé son <a href="https://www.itsme-id.com/en-BE/business/services/qualification">Itsme Qualify</a>, qui autorise une divulgation sélective de données à caractère personnel au moyen de ZKP. Actuellement, seule la vérification de l&#8217;âge est prise en charge, mais itsme prévoit d&#8217;étendre cette fonctionnalité. Malheureusement, votre auteur n&#8217;a pas pu trouver de détails accessibles au public sur cette fonctionnalité et n&#8217;est pas parvenu à obtenir plus d&#8217;informations auprès d&#8217;itsme. Il est à espérer que ce manque de transparence ne soit que temporaire, car les ZKP, comme toute autre cryptographie, sont plus sûrs lorsque tous les détails sont publics et peuvent être validés par des experts.</p>



<p>Enfin, sachez qu&#8217;il existe des solutions de gestion d&#8217;identité qui combinent la «&nbsp;blockchain&nbsp;» et les ZKP.&nbsp;<a href="https://www.privado.id/"><em>Privado ID</em></a>&nbsp;est l&#8217;une des initiatives les plus visibles qui était jusqu&#8217;à récemment connue sous le nom de <em>Polygon ID</em>. Un émetteur y confirme les attributs personnels d&#8217;un citoyen – par exemple la date de naissance – en plaçant une valeur de hachage spécialement formée à partir de l&#8217;ensemble des attributs sur un réseau blockchain comme Ethereum. Le citoyen peut alors s&#8217;en servir pour prouver de manière sélective à un tiers des informations à caractère personnel le concernant, telles que sa majorité. Notez que tous les ZKP qui utilisent la même valeur de hachage comme base peuvent être liés entre eux.&nbsp;</p>



<h1 class="wp-block-heading">Résistance quantique</h1>



<figure class="wp-block-image alignright"><a href="/wp-content/uploads/2025/12/physics-3864569_640.jpg"><img loading="lazy" decoding="async" width="300" height="200" src="/wp-content/uploads/2025/12/physics-3864569_640-300x200.jpg" alt="" class="wp-image-24635" 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></figure>



<p>Comme déjà expliqué en détail dans des <a href="/tag/quantum-computing/">articles</a> précédents de Smals Research, il existe un risque que de puissants ordinateurs quantiques puissent à l&#8217;avenir briser la cryptographie moderne à clé publique.</p>



<p>Les technologies telles que zk-SNARK et <a href="https://eprint.iacr.org/2017/1066.pdf">Bulletproofs</a>, qui permettent de prouver l&#8217;exactitude des calculs, ne sont <u>pas</u> résistantes aux ordinateurs quantiques. C&#8217;est notamment pour cette raison que les <a href="https://eprint.iacr.org/2018/046.pdf"><em>zk-STARKs</em></a> (Z<em>ero-Knowledge Scalable Transparent Arguments of Knowledge</em>) ont vu le jour en 2018. Comme l&#8217;illustre la figure ci-dessous, l&#8217;efficacité computationnelle reste élevée, mais les preuves sont beaucoup plus volumineuses. Néanmoins, elles sont déjà utilisées à des fins d&#8217;évolutivité et de confidentialité entre autres par <a href="https://www.starknet.io/">StarkNet</a> et <a href="https://starkware.co/starkex/">StarkEx</a>, qui sont tous deux des solutions d&#8217;évolutivité pour Ethereum.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>&nbsp;</td><td class="has-text-align-center" data-align="center">
<p><strong>Résistant à l&#8217;informatique quantique</strong></p>
</td><td class="has-text-align-center" data-align="center">
<p><strong>Temps prouveur</strong></p>
</td><td class="has-text-align-center" data-align="center">
<p><strong>Temps vérificateur</strong></p>
</td><td class="has-text-align-center" data-align="center">
<p><strong>Taille preuve</strong></p>
</td></tr><tr><td>
<p><em>Zk-SNARKs</em></p>
</td><td class="has-text-align-center" data-align="center">
<p>Non</p>
</td><td class="has-text-align-center" data-align="center">
<p>2,3 S</p>
</td><td class="has-text-align-center" data-align="center">
<p>10 ms</p>
</td><td class="has-text-align-center" data-align="center">
<p>&nbsp;288 B</p>
</td></tr><tr><td>
<p><em>Bulletproofs</em></p>
</td><td class="has-text-align-center" data-align="center">
<p>Non</p>
</td><td class="has-text-align-center" data-align="center">
<p>30 S</p>
</td><td class="has-text-align-center" data-align="center">
<p>1100 ms</p>
</td><td class="has-text-align-center" data-align="center">
<p>1,3 KB</p>
</td></tr><tr><td>
<p><em>Zk-STARKs</em></p>
</td><td class="has-text-align-center" data-align="center">
<p>Oui</p>
</td><td class="has-text-align-center" data-align="center">
<p>1,6 S</p>
</td><td class="has-text-align-center" data-align="center">
<p>16 ms</p>
</td><td class="has-text-align-center" data-align="center">
<p>&gt; 40 KB</p>
</td></tr></tbody></table></figure>



<p class="has-text-align-center"><em>Comparaison de trois solutions ZK pour prouver des calculs (<a href="https://technorely.com/insights/the-role-of-bulletproofs-in-ensuring-privacy-for-smart-contracts">source</a>)</em></p>



<p>Des preuves ZK résistantes à l&#8217;informatique quantique pour les calculs sont donc possibles, même si les preuves deviennent beaucoup plus volumineuses. Leur adoption par la communauté <em>blockchain</em> reste pour l&#8217;instant limitée&nbsp;; les zk-SNARKs demeurent la technologie ZK dominante dans le contexte de la <em>blockchain</em>. Le travail de la VUB sur la gestion d&#8217;identité utilise également aujourd&#8217;hui les zk-SNARKs.</p>



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



<p>Les preuves à divulgation nulle de connaissance existent depuis plusieurs décennies et ont déjà fait l&#8217;objet de nombreux développements et recherches. Dans cet article, nous avons identifié les deux principaux cas d&#8217;utilisation&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>Confidentialité et évolutivité sur les réseaux blockchain.</strong> La technologie ZKP permet de prouver qu&#8217;un calcul sur des données confidentielles a été effectué correctement. Ceci peut se faire relativement rapidement et contribue à accroître l&#8217;évolutivité des réseaux blockchain. Bien qu&#8217;elle puisse en théorie être appliquée en dehors de la blockchain, on n&#8217;y assiste pas (encore&nbsp;?) dans la pratique. Travailler avec des parties centrales et la législation est aujourd&#8217;hui plus facile à mettre en œuvre et à expliquer.</li>



<li><strong>Gestion d&#8217;identité dans le respect de la vie privée.</strong> La technologie ZKP permet de divulguer de manière sélective des données à caractère personnel vous concernant. Cela peut se faire sur la base de documents d&#8217;identité classiques, tels que la carte d&#8217;identité électronique belge. De même, des documents d&#8217;identité peuvent être délivrés sous la forme de titres numériques anonymes. Les ZKP peuvent être très lourds sur le plan computationnel, surtout lorsque l&#8217;on utilise une technologie résistante à l&#8217;informatique quantique et que l&#8217;on part de documents d&#8217;identité officiels existants. </li>
</ul>



<p>L&#8217;utilisation de la technologie pour les ZKP et les titres numériques anonymes pour améliorer la confidentialité pose un certain nombre de <a href="https://brave.com/blog/zkp-age-verification-limits/">défis</a>. Nous avons déjà évoqué la performance, la résistance à l&#8217;informatique quantique et la révocation. Il faut également tenir compte de l&#8217;absence de normes, du risque que des informations contextuelles, telles qu&#8217;une adresse IP, compromettent la confidentialité, ainsi que de l&#8217;impact potentiel sur l&#8217;expérience utilisateur pour le citoyen, qui doit passer par une fenêtre supplémentaire.</p>



<p>C&#8217;est peut-être en partie pour cette raison que Gartner a déclaré en 2024 que la technologie ZKP était obsolète<span style="font-size: revert; color: initial;">, ce qui a suscité une certaine </span><a style="font-size: revert;" href="https://www.linkedin.com/posts/nigel-smart-3196b85_gartners-latest-privacy-hype-cycle-has-a-activity-7226536073517015041-Apu1/">indignation</a><span style="font-size: revert; color: initial;"> parmi les cryptographes. Malgré l&#8217;utilisation des preuves ZK dans Web3 (blockchain) et un nombre limité de configurations pour l&#8217;identité numérique, l&#8217;intérêt pour cette technologie stagne selon Gartner. Cela a été confirmé plus tôt cette année lorsque </span><a style="font-size: revert;" href="https://sovrin.org/">Sovrin</a><span style="font-size: revert; color: initial;"> a supprimé son réseau d’identité auto-souveraine (SSI &#8211; </span><em style="font-size: revert; color: initial;">self-sovereign identity</em><span style="font-size: revert; color: initial;">). L&#8217;avenir nous dira si Gartner a raison. Ce serait tragique, compte tenu de la puissance et de la polyvalence de cette technologie, sur laquelle les chercheurs travaillent depuis plusieurs décennies et qui devrait pourtant avoir un potentiel considérable dans le secteur public.</span></p>



<p><strong>N&#8217;hésitez pas à nous contacter si vous êtes intéressé&nbsp;!</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sens, absurdité et utilité des LLM : méritent-ils ce battage médiatique ?</title>
		<link>https://www.smalsresearch.be/sens-absurdite-et-utilite-des-llm-meritent-ils-ce-battage-mediatique/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 09:17:25 +0000</pubDate>
				<category><![CDATA[[FR]]]></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=24579</guid>

					<description><![CDATA[Nous avons probablement atteint le point culminant du battage médiatique autour de l&#8217;IA&#160;: d&#8217;un côté, l&#8217;IA suscite l&#8217;enthousiasme, de l&#8217;autre, elle commence déjà à créer la désillusion. On parle aussi de plus en plus d&#8217;une bulle sur le marché des grands acteurs technologiques. Mais quelle est réellement l&#8217;utilité des LLM à l&#8217;heure actuelle&#160;? Pouvons-nous encore [&#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:143px;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">Nous avons probablement atteint le point culminant du battage médiatique autour de l&#8217;IA&nbsp;: d&#8217;un côté, l&#8217;IA suscite l&#8217;enthousiasme, de l&#8217;autre, elle commence déjà à créer la désillusion. On parle aussi de plus en plus d&#8217;une bulle sur le marché des grands acteurs technologiques. Mais quelle est réellement l&#8217;utilité des LLM à l&#8217;heure actuelle&nbsp;? Pouvons-nous encore espérer de nombreuses améliorations&nbsp;? Et qu&#8217;en est-il des hallucinations&nbsp;?</p>



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



<p class="justify-text">Vous avez probablement déjà vécu cette situation&nbsp;: vous discutez avec ChatGPT ou un autre robot conversationnel «&nbsp;intelligent&nbsp;» et celui-ci produit sans détour une affirmation que vous savez fausse. Ou vous êtes développeur et votre <a href="https://blog.singleton.io/posts/2025-06-14-coding-agents-cross-a-chasm/">assistant de codage fonctionne plutôt bien</a>, jusqu&#8217;à <a href="https://martinfowler.com/articles/pushing-ai-autonomy.html">ce que vous en demandiez plus</a>, mais la nouvelle fonctionnalité ajoutée à votre programme <a href="https://www.csoonline.com/article/4053635/when-ai-nukes-your-database-the-dark-side-of-vibe-coding.html">est loin d&#8217;être à la hauteur</a>. Et ce ne sont là que vos propres expériences, modestes. En effet, les expériences relatées par les autres ou celles relayées dans la presse ou sur les réseaux sociaux sont sans doute bien plus extrêmes&nbsp;: d&#8217;un côté, des cris de joie à l&#8217;idée que l&#8217;IA amorce une nouvelle révolution industrielle et des messages alarmistes selon lesquels elle entraînera des pertes d&#8217;emploi, de l&#8217;autre, des articles qui disent que les projets d&#8217;IA ne cessent d&#8217;échouer et des récits sur <a href="https://www.vrt.be/vrtnws/nl/2023/03/24/chatgpt-nepbronnen/">les hallucinations ridicules, voire dangereuses</a> que ne cessent de produire les robots conversationnels basés sur l’IA. Que faut-il dès lors en penser&nbsp;?</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:414px;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">Pour une meilleure compréhension, un bref intermède, pas trop technique, sur ce que sont les LLM (je vous prie de m&#8217;excuser de rester volontairement vague à ce sujet&nbsp;: pour une meilleure explication, je vous recommande les <a href="/chatgpt-een-eerste-indruk/">articles de blog</a> de mes <a href="/1-an-chatgpt/" data-type="post" data-id="19587">collègues</a>)&nbsp;: les modèles de langage d&#8217;IA prédisent ce que doit être le prochain morceau de texte, en se basant sur des probabilités. Ils ont été entraînés sur une telle quantité de texte que les phrases aléatoires qu&#8217;ils produisent sont de grande qualité et semblent parfaitement cohérentes (et le sont souvent). Ils ne réfléchissent donc pas comme un être humain&nbsp;: leur fonctionnement est très &#8220;basé sur le texte&#8221;. Il s&#8217;agit davantage de trouver et de répéter des modèles que de faire preuve d&#8217;une véritable compréhension&nbsp;; l&#8217;intelligence qui s&#8217;en dégage est un <a href="https://fr.wikipedia.org/wiki/%C3%89mergence">phénomène émergent</a>. Le nom le plus cocasse que j&#8217;ai entendu jusqu&#8217;à présent est &#8220;<a href="https://fr.wikipedia.org/wiki/Perroquet_stochastique">perroquet stochastique</a>&#8220;.</p>



<p class="justify-text">Selon Gartner, nous avons déjà <a href="https://www.gartner.com/en/articles/hype-cycle-for-artificial-intelligence">dépassé le pic des attentes déraisonnables et nous sommes désormais dans la phase de désillusion</a>. <a href="https://ai.plainenglish.io/wall-street-is-wrong-about-artificial-intelligence-4d58369ddcb2">D&#8217;autres journalistes</a> parlent d&#8217;un effet de mode ou d&#8217;une bulle.<br>Des milliards sont investis dans de nouveaux centres de données pour alimenter la machine IA, parfois même avec de nouvelles centrales électriques, alors que <a href="https://www.computerworld.com/article/3998244/ai-chatbots-see-fast-adoption-but-deliver-minimal-productivity-gains-study-finds.html">la rentabilité est encore loin d&#8217;être atteinte</a>. S&#8217;agit-il réellement d&#8217;une bulle&nbsp;? Tout dépend de votre <a href="https://danielmiessler.com/blog/no-ai-is-not-a-bubble">définition d&#8217;une bulle</a>&#8230; En tout cas, cela ressemble à un pari énorme, parfois géostratégique, sur la prochaine technologie qui pourrait changer et <a>améliorer</a> radicalement le monde, voire le conquérir, voire le détruire&#8230; Tandis que j&#8217;écris ces lignes, certains n&#8217;hésitent pas à affirmer que la bulle est sur le point d&#8217;éclater, avec comme principaux arguments les <a href="https://graceblakeley.substack.com/p/the-ai-circular-economy">investissements circulaires</a> d&#8217;un certain nombre de grandes entreprises dans leurs capacités respectives et <a href="https://www.bbc.com/news/articles/cpd2qv58yl5o">l&#8217;ouverture de ChatGPT au contenu érotique</a>, une décision qui semble davantage refléter une pression sur les flux de trésorerie qu&#8217;une ouverture d&#8217;esprit.</p>



<p class="justify-text">Un autre problème réside dans le fait qu&#8217;actuellement, <a href="https://olivermolander.medium.com/gartners-ai-hype-cycle-way-passed-its-due-date-and-are-we-entering-a-classical-ml-winter-7c09041c72c4">les investissements dans les LLM freinent également le développement d&#8217;un certain nombre d&#8217;autres technologies d&#8217;IA très utiles</a> (mais lorsque la tempête se sera calmée, les centres de données pourraient bien s&#8217;avérer utiles pour ces dernières). Certains pensent d&#8217;ailleurs que pour obtenir une véritable intelligence, nous devrons développer <a href="https://www.forbes.com/sites/robtoews/2023/09/03/transformers-revolutionized-ai-what-will-replace-them/">une autre technologie d&#8217;IA</a> (même si, au final, celle-ci <a href="https://www.a16z.news/p/bitter-economics">utilisera toute la puissance de calcul que nous déployons actuellement </a>), et que <a href="https://thenewstack.io/entering-ai-autumn-why-llms-are-nearing-their-limit/">les LLM atteignent peu à peu leurs limites</a>, avec des améliorations incrémentielles de plus en plus faibles (et <a href="https://www.begeek.fr/les-benchmarks-dia-sous-le-feu-des-critiques-424095">des résultats de tests gonflés</a>). Malgré <a href="https://algonaute.fr/fr/stupefiant.html">la leçon amère</a> que davantage de données et de puissance de calcul ont permis les plus grands progrès, des voix s&#8217;élèvent maintenant pour dire qu&#8217;on ne pourra pas construire une Intelligence Artificielle Générale (AGI) avec les LLM ; il faudra se tourner vers de nouvelles recherches. Et entre-temps, on peut aussi démontrer que <a href="https://intelligence-artificielle.developpez.com/actu/375803/OpenAI-l-avoue-generation-de-contre-verites-de-citations-fictives-ou-de-faits-inexacts-les-hallucinations-de-ChatGPT-ne-disparaitront-jamais-L-IA-generative-face-a-sa-limite-structurelle/">les hallucinations en font tout simplement partie</a> et <a href="https://openai.com/fr-FR/index/why-language-models-hallucinate/">qu&#8217;elles ne disparaîtront probablement jamais complètement</a>&nbsp;: les mauvaises herbes ne disparaissent jamais. </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">Mais dans un jardin envahi par les mauvaises herbes, de belles plantations sont tout de même possibles, moyennant quelques efforts. Et dans un tel jardin, les LLM ont bel et bien leur utilité&nbsp;: lorsqu&#8217;une tâche concerne principalement le texte et le langage, ils sont par exemple très performants (pensez au résumé, à la traduction, à la création, à la construction de raisonnements très simples&#8230;). Et même pour la programmation (qui est une sorte de manipulation d&#8217;un langage spécifique), nous constatons l&#8217;enthousiasme de nombreux développeurs qui ont vu leur productivité augmenter (mais <a href="/ia-pour-ameliorer-securite-du-code-1/">la sécurité demeure un point d&#8217;attention&nbsp;!</a>). En tant qu&#8217;assistant intelligent général, les LLM peuvent également jouer un rôle, à condition que l&#8217;utilisateur soit suffisamment informé sur un sujet et ait l&#8217;esprit critique. Et peut-être doivent-ils simplement continuer à <a href="https://jenson.org/boring/">évoluer pour devenir le meilleur outil pour une certaine niche</a> de tâches.</p>



<p class="justify-text">J&#8217;ai moi-même une histoire nuancée à raconter&nbsp;: dans mon <a href="/vibe-coding-avec-les-ides-agentique/">précédent article de blog</a>, j&#8217;ai évoqué quelques petits succès avec le <a href="https://www.infoworld.com/article/4058076/vibe-coding-and-the-future-of-software-development.html">vibe coding</a>, ainsi que les limites de l&#8217;IA lorsque les tâches deviennent plus importantes ou plus complexes. Je constate la même chose dans le travail que j&#8217;ai effectué depuis&nbsp;: l&#8217;analyse et la traduction de code hérité à l&#8217;aide de ces modèles de langage. Là aussi, le succès est mitigé&nbsp;: pas de baguette magique, difficile voire impossible à automatiser, mais tout de même un gain de temps visible dans la compréhension des codes de taille moyenne et la réécriture des petits morceaux de code de ce type de projets (plus de détails à ce sujet dans un prochain article de blog).</p>



<p><strong>Conclusion</strong></p>



<p class="justify-text">Un LLM n&#8217;est qu&#8217;une des nombreuses technologies «&nbsp;intelligentes&nbsp;» disponibles actuellement, même s&#8217;il s&#8217;agit de la plus accessible et la plus visible. C&#8217;est peut-être ce qui explique à la fois l&#8217;engouement et la controverse qu&#8217;elle suscite.</p>



<p class="justify-text">Les LLM sont-ils utiles&nbsp;? J&#8217;oserais dire que oui. Cependant, compte tenu de l&#8217;état actuel de la technologie, il est fondamental de nuancer cette affirmation&nbsp;: mettez un LLM à la disposition d&#8217;un expert humain en tant qu&#8217;<a href="https://leadershiplighthouse.substack.com/p/i-went-all-in-on-ai-the-mit-study">outil puissant</a>&nbsp;! <strong>La véritable valeur ne réside donc pas dans le remplacement, mais dans l&#8217;augmentation.</strong> Nous verrons si tous les <a href="/agents-ia-avantages-defis-et-cas-utilisation/">systèmes basés sur des agents</a> changeront la donne au cours de l&#8217;année à venir.<a id="_msocom_1"></a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Neosemantics &#8211; Semantic tools for Neo4J</title>
		<link>https://www.smalsresearch.be/neosemantics-semantic-tools-for-neo4j/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Thu, 04 Dec 2025 13:02:12 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Quick reviews]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/neosemantics-semantic-tools-for-neo4j/</guid>

					<description><![CDATA[(FR) Neosemantics est un plugin java pour Neo4J, ayant pour but de rendre accessibles les outils sémantiques de RDF, afin de pouvoir les utiliser directement au sein de Neo4J. (NL) Neosemantics is een Java plug-in voor Neo4J, ontworpen om RDF-semantische tools toegankelijk te maken voor direct gebruik binnen Neo4J.]]></description>
										<content:encoded><![CDATA[
<p><strong>(FR)</strong> Neosemantics est un plugin java pour Neo4J, ayant pour but de rendre accessibles les outils sémantiques de RDF, afin de pouvoir les utiliser directement au sein de Neo4J.</p>



<p><strong>(NL)</strong> Neosemantics is een Java plug-in voor Neo4J, ontworpen om RDF-semantische tools toegankelijk te maken voor direct gebruik binnen Neo4J.</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/Quick-review-n10s.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of Quick-review-n10s."></object><a id="wp-block-file--media-db2780a5-840d-4008-ac93-5e78372e49bb" href="https://www.smalsresearch.be/wp-content/uploads/2025/12/Quick-review-n10s.pdf">Quick-review-n10s</a><a href="/wp-content/uploads/2025/12/Quick-review-n10s.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-db2780a5-840d-4008-ac93-5e78372e49bb">Download</a></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Expériences avec la Crypto Policy as Code</title>
		<link>https://www.smalsresearch.be/experiences-avec-la-crypto-policy-as-code/</link>
		
		<dc:creator><![CDATA[Kristof Verslype]]></dc:creator>
		<pubDate>Tue, 02 Dec 2025 15:52:26 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=24600</guid>

					<description><![CDATA[La politique de cryptographie en tant que code ou Crypto Policy as Code (CPaC) est un principe très récent qui permet de respecter automatiquement les recommandations en matière de cryptographie. Cet article vise à concrétiser nos idées concernant la CPaC. Une représentation des politiques cryptographiques en JSON est proposée et utilisée à titre de base pour quelques expériences.]]></description>
										<content:encoded><![CDATA[
<p><em>Dit artikel is ook beschikbaar&nbsp;in het&nbsp;<a href="/experimenten-met-crypto-policy-as-code/">Nederlands</a>.</em></p>



<p>La politique de cryptographie en tant que code ou <a href="/vers-une-observation-automatique-des-recommandations-cryptographiques/">Crypto Policy as Code (CPaC)</a> est un principe très récent qui permet de respecter automatiquement les recommandations en matière de cryptographie. Cet article vise à concrétiser nos idées concernant la CPaC. Une représentation des politiques cryptographiques en JSON est proposée et utilisée à titre de base pour quelques expériences. L&#8217;objectif est de rendre le potentiel de la CPaC plus tangible et plus compréhensible, et ainsi d&#8217;inspirer certains lecteurs.</p>



<h1 class="wp-block-heading">« Everything as Code »</h1>



<p>L&#8217;approche <em>Everything as Code</em> (tout en tant que code) vise à exprimer tous les composants d&#8217;un système informatique (infrastructure, réseau, sécurité, pipelines de déploiement&#8230;) sous forme de code. Elle autorise un haut degré d&#8217;<strong>automatisation</strong> des processus et de la gestion. Elle nous offre un meilleur <strong>aperçu</strong> et nous permet de mieux <strong>anticiper</strong> et d&#8217;intervenir en cas de besoin. Il en résulte également une <strong>cohérence </strong>et une <strong>évolutivité</strong> accrues grâce à une moindre intervention humaine. Il nous semble non seulement utile, mais aussi nécessaire à terme d&#8217;adopter cette approche dans le cadre de la gouvernance cryptographique.&nbsp;</p>



<p>Lorsque Smals Research a débuté l’étude du CPaC début 2025, il n’existait pratiquement aucune information à ce sujet. Depuis, le CPaC semble également avoir attiré l’attention de plusieurs entreprises, notamment <a href="https://garantir.io/cryptographic-policy-enforcement-at-scale-automating-compliance-without-slowing-down-devops/">Garantir</a>.</p>



<p>Un premier aspect de la CPaC est l&#8217;expression des actifs cryptographiques (algorithmes, clés, certificats, hardware, bibliothèques&#8230;) sous forme de code. Cela permet de gérer et d&#8217;interroger automatiquement l&#8217;inventaire des actifs cryptographiques d&#8217;une organisation. Un tel inventaire est systématiquement recommandé dans le contexte de l&#8217;état de préparation quantique et de l&#8217;agilité cryptographique.</p>



<p>Le modèle <a href="https://cyclonedx.org/capabilities/cbom/">CBOM</a> (<em>Cryptography Bill of Materials</em> ou nomenclature de cryptographie) permet d&#8217;exprimer les actifs cryptographiques d&#8217;une organisation en code JSON. Bien qu&#8217;il soit encore très récent, nous pensons qu&#8217;il sera largement adopté dans les années futures. Nous prévoyons qu&#8217;à l&#8217;avenir, les services <em>cloud</em>, les bibliothèques, les systèmes d&#8217;exploitation et le hardware, entre autres, seront fournis avec une description de la cryptographie appliquée et supportée, exprimée selon le modèle CBOM. Une organisation pourra ensuite importer ces descriptions dans son inventaire cryptographique.</p>



<p>Eu égard à cette perspective, nous intégrons autant que possible nos propositions de CPaC dans le modèle CBOM. L&#8217;illustration ci-dessous est le résultat d&#8217;une analyse statique du code et montre dans le code CBOM que <a href="https://fr.wikipedia.org/wiki/Chiffrement_RSA">RSA-2048</a>&nbsp;est utilisé à trois endroits dans une application.&nbsp;&nbsp;</p>



<figure class="wp-block-image aligncenter"><a href="/wp-content/uploads/2025/11/image-1.png"><img loading="lazy" decoding="async" width="1024" height="512" src="/wp-content/uploads/2025/11/image-1-1024x512.png" alt="" class="wp-image-24307" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/image-1-1024x512.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/11/image-1-300x150.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/image-1-768x384.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/11/image-1-1536x768.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2025/11/image-1.png 1864w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p></p>



<h1 class="wp-block-heading">« Crypto Policy as Code »</h1>



<p>Smals dispose d&#8217;une politique cryptographique qui indique quels algorithmes et paramètres cryptographiques sont recommandés, lesquels sont sûrs bien que non recommandés, lesquels doivent être progressivement supprimés et lesquels ne sont pas sûrs. Actuellement, ces recommandations sont exprimées de manière classique, que seuls les humains peuvent facilement comprendre. Nous nous sommes demandé comment exprimer ces recommandations sous forme de code.</p>



<figure class="wp-block-image alignright"><a href="/wp-content/uploads/2025/11/image.png"><img loading="lazy" decoding="async" width="300" height="283" src="/wp-content/uploads/2025/11/image-300x283.png" alt="" class="wp-image-24306" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/image-300x283.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/image.png 613w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></figure>



<p></p>



<p>Penchons-nous sur <em>AES-128-GCM</em>.&nbsp;<a href="https://fr.wikipedia.org/wiki/Advanced_Encryption_Standard"><em>AES</em></a>&nbsp;est le chiffre de bloc&nbsp;; il chiffre ou déchiffre des blocs de 128 bits. Le nombre <em>128</em> dans AES-128-GCM fait référence à la longueur en bits de la clé utilisée. Grâce au mode <a href="https://fr.wikipedia.org/wiki/Galois/Counter_Mode">GCM</a>, il est également possible de chiffrer et déchiffrer de plus grandes quantités de données.</p>



<p>Dans la partie gauche de l&#8217;illustration ci-dessous, la description de l&#8217;AES-128-GCM est présentée selon le modèle CBOM. On y trouve notamment des informations sur le niveau de sécurité classique et le niveau de sécurité quantique. Dans la partie droite de l&#8217;illustration se trouve notre proposition de formulation des recommandations sous forme de code. Nous maximisons ainsi la compatibilité avec CBOM&nbsp;; la structure, la nomenclature et les clés d&#8217;identification sont conservées. Dans le même temps, nous évitons la duplication des données que nous trouvons déjà dans la description CBOM.</p>



<figure class="wp-block-image aligncenter"><a href="/wp-content/uploads/2025/11/AES-128-GCM-ascode.png"><img loading="lazy" decoding="async" width="1024" height="571" src="/wp-content/uploads/2025/11/AES-128-GCM-ascode-1024x571.png" alt="" class="wp-image-24310" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/AES-128-GCM-ascode-1024x571.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/11/AES-128-GCM-ascode-300x167.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/AES-128-GCM-ascode-768x428.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/11/AES-128-GCM-ascode-1536x856.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2025/11/AES-128-GCM-ascode.png 1721w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p></p>



<p>Les recommandations se trouvent dans le bloc <em>recommendation</em>. Il contient au minimum le niveau de recommandation <em>recommended</em>, <em>secure</em>, <em>phase-out</em> ou <em>insecure</em>.<em>&nbsp;</em>En outre, ce bloc peut contenir des informations supplémentaires facultatives, telles que&nbsp;:</p>



<ul class="wp-block-list">
<li>la date à laquelle le mécanisme cryptographique doit disparaître progressivement ;</li>



<li>la date de la dernière révision de la recommandation ;</li>



<li>les conditions d&#8217;utilisation correcte du mécanisme cryptographique ;</li>



<li>les remarques, par exemple sur les raisons pour lesquelles le mécanisme cryptographique n&#8217;est plus considéré comme sûr.</li>
</ul>



<p>À titre expérimental, l&#8217;équipe Smals Research a déjà exprimé certaines recommandations cryptographiques sous forme de code, notamment les fonctions de hachage cryptographiques, le&nbsp;<a href="https://fr.wikipedia.org/wiki/Cryptographie_sym%C3%A9trique">chiffrement symétrique</a>,&nbsp;les <a href="https://fr.wikipedia.org/wiki/Code_d%27authentification_de_message">message authentication codes</a>&nbsp;(MAC),&nbsp;les <a href="https://fr.wikipedia.org/wiki/Fonction_de_d%C3%A9rivation_de_cl%C3%A9">key derivation functions</a>&nbsp;(KDF) et <a href="https://fr.wikipedia.org/wiki/Transport_Layer_Security">TLS</a>. Ces recommandations cryptographiques sont relativement simples et compatibles avec CBOM. De plus, un schéma JSON a été défini afin de valider l&#8217;exactitude de la syntaxe et de la structure de nos recommandations.</p>



<h1 class="wp-block-heading">Dérogations sous forme de code</h1>



<p>Idéalement, chaque partie qui sollicite nos services, notamment les hôpitaux, les pharmaciens et les CPAS, doit mettre à jour son logiciel en temps utile afin qu&#8217;il prenne en charge la cryptographie la plus récente et la plus sûre. Dans la pratique cependant, cette opération n&#8217;est pas toujours exécutée aussi rapidement et une dérogation à la politique cryptographique doit être autorisée exceptionnellement afin de ne pas compromettre les services essentiels aux citoyens.</p>



<p>L&#8217;illustration ci-dessous montre un exemple fictif d&#8217;une telle dérogation (<em>deviation</em>), où la structure proposée par Smals Research est suivie. Elle se compose de quatre blocs&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>Scope.</strong> La dérogation peut s&#8217;appliquer à un service entier ou à certains modules spécifiques de celui-ci.</li>



<li><strong>Approval.</strong> Nous trouvons ici la référence à l&#8217;approbation par le management, ainsi que la justification et la durée de la dérogation. </li>



<li><strong>Assessment. </strong>Il s&#8217;agit de l&#8217;évaluation du risque. Une dérogation ne peut être approuvée qu&#8217;après une estimation préalable du risque, telle que décrite dans cette section.</li>



<li><strong>Allow. </strong>Cette section énumère les algorithmes ou suites cryptographiques autorisés. La structure de ce bloc provient directement du modèle CBOM.</li>
</ul>



<figure class="wp-block-image aligncenter"><a href="/wp-content/uploads/2025/11/devascode-1.png"><img loading="lazy" decoding="async" width="1024" height="565" src="/wp-content/uploads/2025/11/devascode-1-1024x565.png" alt="" class="wp-image-24313" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/devascode-1-1024x565.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/11/devascode-1-300x165.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/devascode-1-768x424.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/11/devascode-1.png 1436w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p></p>



<h1 class="wp-block-heading">Scripts expérimentaux</h1>



<p>L&#8217;équipe Smals Research a rédigé plusieurs scripts afin d&#8217;illustrer la puissance de la CPaC. Les recommandations sous forme de code, les dérogations sous forme de code et/ou les descriptions CBOM constituent l&#8217;input.</p>



<h2 class="wp-block-heading">Script 1&nbsp;: configuration TLS</h2>



<p><a href="https://fr.wikipedia.org/wiki/Transport_Layer_Security">TLS</a>&nbsp;(Transport Layer Security) est un protocole populaire de communication sécurisée entre deux parties. Avant d&#8217;échanger des données, les parties conviennent de la suite cryptographique (combinaison d&#8217;algorithmes) qu&#8217;elles utiliseront à cette fin.&nbsp;<a href="https://www.openssl.org/">OpenSSL</a>&nbsp;est un client TLS populaire.</p>



<p>Notre premier script génère la configuration OpenSSL relative à la cryptographie sur la base de la politique en tant que code et, le cas échéant, d’une déviation en tant que code. Le code produit, dont vous trouverez un exemple ci-dessous, peut ensuite être intégré dans <a href="https://man.openbsd.org/openssl.cnf.5"><em>openssl.cnf</em></a>, qui est le fichier de configuration openSSL. La dernière ligne de notre exemple contient la liste des suites cryptographiques&nbsp;; la dernière provient d’une dérogation, les autres sont sécurisées selon la politique cryptographique. L’ordre est important ici&nbsp;; la dérogation a la priorité la plus faible.</p>



<pre class="wp-block-code"><code><strong>&#91;default_conf]</strong>
ssl_conf = ssl_section

<strong>&#91;ssl_section]</strong>
system_default = system_default_section

<strong>&#91;system_default_section]</strong>
MinProtocol = TLSv1.3
CipherString = # Sets the ciphersuite list for TLSv1.2 and below to value. This list will be combined with any configured TLSv1.3 ciphersuites.
Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_CCM_8_SHA256</code></pre>


<p>À terme, cela pourrait servir de base pour maintenir à jour de manière coordonnée la configuration cryptographique pour le TLS de milliers de machines. Bien évidemment, cela nécessite la mise en place des procédures pour éviter les erreurs.</p>
<p>Nous proposons que la politique et les déviations en tant que code soient gérées par un service central. La politique peut être accessible à l’ensemble de l’organisation, tandis que les déviations doivent être protégées par un contrôle d’accès strict.</p>
<h2>Script 2&nbsp;: génération d&#8217;un PDF</h2>
<p>Pour la plupart des gens, un PDF bien structuré reste plus lisible qu’un fichier JSON. À partir de fichiers JSON, il n’est pas sorcier de générer de tels documents. C’est ce que réalisent nos deux scripts suivants.</p>
<p>Un PDF généré à titre expérimental contenant des recommandations de chiffrement symétrique peut être téléchargé <a href="/wp-content/uploads/2025/11/recommendation_symmetric-encryption.pdf">ici</a>. Il est parti du principe<em> policy as code</em>, mais il est fait également appel à CBOM pour enrichir le PDF ; les niveaux de sécurité classique et quantique en sont extraits.</p>
<p>Un deuxième fichier PDF généré à titre expérimental peut être téléchargé <a href="/wp-content/uploads/2025/11/recommendations_tls.pdf">ici</a>. Il contient des recommandations pour les suites cryptographiques TLS, complétées par des informations supplémentaires issues de la politique de cryptographie en tant que code. Un exemple de ce type d’informations est la date limite à laquelle une suite cryptographique peut être utilisée. Si un tel document était partagé avec les partenaires, cela leur permettrait d’anticiper en temps utile.</p>
<h2><strong>Script 3&nbsp;: OPA policy verification</strong></h2>
<p>CPaC est un concept puissant. Les scripts précédents nous permettaient de générer des fichiers PDF et des configurations TLS. CPaC nous permet également de valider les artefacts existants, en vérifiant si un chiffrement sûr est utilisé.</p>
<p><a href="https://www.openpolicyagent.org/">OPA</a> signifie Open Policy Agent. Il s&#8217;agit d&#8217;un moteur de politiques open source qui permet de séparer la logique applicative et les politiques. OPA permet aux organisations de centraliser leurs politiques et de les appliquer en temps réel. Différents services (Kubernetes, pipelines CI/CD, API gateways&#8230;) envoient des requêtes (<em>queries</em>) au format JSON au moteur de politiques afin de savoir si une action demandée par un client est autorisée. Sur la base d&#8217;une politique exprimée dans le langage <a href="https://www.openpolicyagent.org/docs/policy-language">Rego</a>, le moteur de politiques indique au service si la requête doit recevoir une réponse positive ou négative. Par exemple, le moteur de politiques peut recevoir la requête d&#8217;une application demandant si une personne âgée de 15 ans est autorisée à utiliser l&#8217;application, alors que la politique stipule que l&#8217;âge minimum est de 18 ans. Le moteur de règles peut également être interrogé pour déterminer si une configuration réseau est conforme à la politique OPA. Par exemple, il peut exiger que les ports Telnet ne soient jamais ouverts.</p>


<figure class="wp-block-image aligncenter size-full is-resized"><a href="/wp-content/uploads/2025/11/opa.png"><img loading="lazy" decoding="async" width="884" height="612" src="/wp-content/uploads/2025/11/opa.png" alt="" class="wp-image-24319" style="width:500px" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/11/opa.png 884w, https://www.smalsresearch.be/wp-content/uploads/2025/11/opa-300x208.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/11/opa-768x532.png 768w" sizes="auto, (max-width: 884px) 100vw, 884px" /></a></figure>



<p>Les services peuvent également poser des questions au moteur OPA concernant la <a href="https://www.openpolicyagent.org/docs/policy-reference/builtins/crypto">cryptographie</a>&nbsp;: la valeur donnée est-elle la valeur de hachage correcte (également appelée <em>fingerprint</em> ou <em>digest</em>) d’une charge utile donnée&nbsp;? Une valeur est-elle le MAC correct pour une donnée d’entrée et une clé donnés&nbsp;? Un certificat est-il signé par une autorité de confiance&nbsp;? Un certificat utilise-t-il une courbe elliptique sécurisée&nbsp;? …</p>



<p>Vous trouverez ci-dessous un exemple d’une telle requête et la politique correspondante. La politique stipule que la valeur de hachage de la charge utile est calculée à l’aide de la fonction de hachage (non sécurisée) <a href="https://fr.wikipedia.org/wiki/MD5">MD5</a>.</p>



<pre class="wp-block-code"><code><strong>Input by service to policy engine</strong>
{
  "payload": {
    "user": "alice",
    "action": "read",
    "resource": "/api/users"
  },
  "expected_digest": "ea99819f665c10c744cbbf8da651c37a"
}</code></pre>



<pre class="wp-block-code"><code><strong>OPA Policy (in Rego) applied by the policy engine</strong> 
package crypto_digest_verification
payload_json&nbsp;:= json.marshal(input.payload)
computed_digest&nbsp;:= crypto.<strong>md5</strong>(payload_json)
digest_valid&nbsp;:= computed_digest == input.expected_digest</code></pre>



<p>Une organisation souhaitant mettre en place CPaC devra vérifier que ses politiques OPA existantes sont conformes à la dernière version de la politique cryptographique. Notre script final vérifie donc si la cryptographie utilisée dans la politique OPA est conforme à notre politique cryptographique centrale. En entrée est la <em>crypto policy as code</em> et une politique OPA. En sortie on obtient soit un message indiquant que la politique OPA est conforme, soit, comme dans le cas ci-dessus, un avertissement précisant également quel algorithme non sécurisé a été utilisé. À long terme, nous souhaitons également pouvoir déduire directement de notre CPaC les politiques OPA relatives à la cryptographie.</p>



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



<p>Cet article met en lumière le potentiel d&#8217;une approche <em>everything as code</em> pour stimuler la maturité cryptographique d&#8217;une organisation. À l&#8217;aide d&#8217;un certain nombre de scripts relativement simples, nous montrons comment une politique cryptographique centralisée, exprimée sous forme de code, peut soutenir une organisation dans divers domaines, de l&#8217;automatisation des processus à la création de documentation, en passant par la vérification de l&#8217;utilisation de la cryptographie appropriée, par exemple dans les politiques OPA.</p>



<p>À terme, nous souhaitons permettre l&#8217;accès aux informations sous forme de code via des API REST. Ainsi, les informations les plus récentes seront affichées clairement sur des tableaux de bord interactifs pour les utilisateurs autorisés. Les systèmes et applications pourront également accéder aux informations en temps réel via cette API REST. Idéalement, nous travaillerons avec une politique et un inventaire unifiés sous forme de code, la cryptographie n&#8217;étant qu&#8217;un aspect de ce système.</p>



<p>Dans un monde idéal, une politique de cryptographie en tant que code &nbsp;pourrait être proposée par une organisation nationale ou européenne faisant autorité et pourrait être utilisée tant par le secteur public que par le secteur privé. Pour l’instant, cela reste une utopie. Au cours des prochaines années, nous pouvons nous attendre à une forte évolution dans ce domaine.</p>



<p><strong>N&#8217;hésitez pas à nous contacter si vous souhaitez échanger vos idées avec nous à ce sujet&nbsp;!</strong></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
