Hello World, je suisHello World, I'm

Mohamed Aziz Baoueb.

Élève-ingénieur en cybersécuritéCybersecurity engineering student Cloud & DevOpsCloud & DevOps Détection d'intrusionIntrusion detection

Élève-ingénieur à l'INSA Centre-Val de Loire, je construis des projets à la croisée de la sécurité, de l'infrastructure cloud et de l'automatisation, puis je les documente avec leurs chiffres et leurs limites.

Engineering student at INSA Centre-Val de Loire, I build projects where security, cloud infrastructure and automation meet, then document them with their numbers and their limits.

Disponible pour un stage dès avril 2027Available for an internship from April 2027

Voir mes projetsSee my projects GitHub ↗ LinkedIn ↗

cybersécurité

cybersecurity

Un détecteur d'intrusion qui apprend à quoi ressemble le trafic normal, une console d'usine séparée du réseau industriel par une diode de données, et un jeu d'entraînement au pentest conçu en équipe.

An intrusion detector that learns what normal traffic looks like, a factory console separated from the industrial network by a data diode, and a pentest training game built as a team.

AEGIS Mini-SOC → SecuriGlass →

cloud & devops

Un mini-cloud construit de zéro : des machines Linux louées à la minute, déployées avec Docker et Ansible, vérifiées par une chaîne CI/CD.

A mini cloud built from scratch: Linux machines rented by the minute, deployed with Docker and Ansible, checked by a CI/CD pipeline.

InsaCloud →

réseau & développement

network & development

Un jeu de stratégie en Python, puis sa version pair-à-pair avec un démon réseau en C, et une application web de révisions.

A strategy game in Python, then its peer-to-peer version with a C network daemon, and a revision web application.

MedievAIl Battle →MedievAIl Battle →

~/à-proposabout

Initialisation

Élève-ingénieur à l'INSA Centre-Val de Loire, spécialité Sécurité et Technologies Informatiques (promotion 2028). Mon premier projet web date d'un stage de l'été 2025 chez Anypli, en Tunisie. Depuis, j'ai construit un mini-cloud, un détecteur d'intrusion par machine learning et une console de supervision industrielle sécurisée.

Engineering student at INSA Centre-Val de Loire, Security and Computer Technologies major (class of 2028). My first web project came from an internship at Anypli, in Tunisia, in summer 2025. Since then I have built a mini cloud, a machine-learning intrusion detector and a secure industrial supervision console.

Ma façon de travailler : mesurer, documenter, et dire ce qui ne marche pas. Chaque projet a ses tests, ses chiffres et ses limites.

How I work: measure, document, and say what doesn't work. Every project has its tests, its numbers and its limits.

Je cherche un stage à partir de début avril 2027, en cybersécurité ou en cloud et DevOps.

I'm looking for an internship starting early April 2027, in cybersecurity or in cloud and DevOps.

$ whoami
mohamed-aziz-baoueb
$ cat ecoleschool.txt
INSA CVL · STI · promoclass of 2028
$ cat stageinternship.txt
dès avril 2027 · cybersécurité | cloud & DevOpsfrom April 2027 · cybersecurity | cloud & DevOps
$ ls projetsprojects/
insacloud/  aegis-mini-soc/  planificateur/
cap-stage/  securiglass-factory-os/  ai4brain/
medievail-battle/  medievail-p2p/  cyberquest/

~/projetsprojects

Opérations & projetsOperations & projects

Clique sur une image pour voir la démo, les captures et les mesures. Les chiffres viennent des dépôts.

Click an image to see the demo, the screenshots and the measurements. The numbers come from the repositories.

Projet personnel · sept. – oct. 2026Personal project · Sep – Oct 2026

InsaCloud

Un mini-fournisseur de cloud construit de zéro : on loue une machine Linux à la minute, depuis le navigateur.

A mini cloud provider built from scratch: rent a Linux machine by the minute, straight from the browser.

94 tests · 11 contrôles CI/CD · 9 rôles Ansible

94 tests · 11 CI/CD checks · 9 Ansible roles

Python · Flask · Docker · Ansible · Vagrant · nginx

Projet personnel · oct. 2026Personal project · Oct 2026

AEGIS Mini-SOC

Un détecteur d'intrusion réseau qui apprend la normale, et le poste d'analyste qui rend ses alertes exploitables.

A network intrusion detector that learns what normal looks like, and the analyst workstation that makes its alerts usable.

99,6 % de rappel · faux positifs de 341 à 53 par heure · MITRE ATT&CK

99.6% recall · false positives from 341 to 53 per hour · MITRE ATT&CK

Python · scikit-learn · FastAPI · React · scapy

Projet personnel · juil. 2025 – oct. 2026Personal project · Jul 2025 – Oct 2026

Planificateur de révisionsRevision planner

Les examens d'un côté, un planning de révision de l'autre, construit selon la répétition espacée.

Exams on one side, a revision schedule on the other, built on spaced repetition.

de 1 à 45 tests · TypeScript strict · un seul point d'entrée

from 1 to 45 tests · strict TypeScript · a single command to run it

TypeScript · React 18 · Strapi 5 · Vite · Vitest

Projet personnel · oct. 2026Personal project · Oct 2026

Cap Stage

Un suivi de candidatures de stage gratuit et partageable, sans compte à créer ni serveur : chacun garde ses données chez soi, ou dans son propre Google Drive.

A free, shareable internship-application tracker with no account to create and no server: everyone keeps their data at home, or in their own Google Drive.

0 serveur · 3 autorisations Google non sensibles · AES-256-GCM

0 servers · 3 non-sensitive Google scopes · AES-256-GCM

JavaScript · CSP · Web Crypto · OAuth 2.0 · API Google Drive

Projet personnel · oct. 2026Personal project · Oct 2026

SecuriGlass Factory OS

Une console de supervision sécurisée pour une ligne de trempe de verre : un automate simulé en C, une diode de données à sens unique entre le réseau industriel et le système d'information, une console web qui montre à chaque rôle ce qu'il doit voir, et un assistant IA protégé par quatre barrières.

A secure supervision console for a glass-tempering line: a simulated PLC written in C, a one-way data diode between the industrial network and the information system, a web console that shows each role only what it needs, and an AI assistant guarded by four barriers.

6 rôles · journal d'audit chaîné · attaque réseau réelle rejouée dans la vidéo

6 roles · hash-chained audit log · a real network attack replayed in the video

C11 · Python · FastAPI · React · TypeScript · PostgreSQL · Modbus TCP

Défi IEEE CISTAC 1.0 · oct. 2026IEEE CISTAC 1.0 challenge · Oct 2026

AI4BRAIN

Un agent d'aide à l'apprentissage, non clinique : cinq jeux d'une minute estiment cinq compétences du quotidien, chaque estimation est une fourchette qui se resserre avec la pratique, et un coach recommande le prochain jeu en expliquant pourquoi.

A non-clinical learning-support agent: five one-minute games estimate five everyday skills, each estimate is a range that narrows with practice, and a coach recommends the next game and explains why.

fourchettes à 95 % · 97,2 % de couverture en simulation · 19 tests

95% ranges · 97.2% coverage in simulation · 19 tests

Python · FastAPI · Pydantic · Next.js 14 · TypeScript · Tailwind · Recharts

~/projets-d-équipeteam-projects

Projet d'équipe · INSA CVL · oct. 2025 – janv. 2026Team project · INSA CVL · Oct 2025 – Jan 2026

MedievAIl Battle

Un simulateur de batailles médiévales en Python : deux armées pilotées par des IA, choisies parmi plusieurs stratégies, s'affrontent sur un champ de bataille avec mini-carte.

A medieval battle simulator in Python: two armies driven by AIs, picked from several strategies, fight on a battlefield with a mini-map.

5 IA au choix · tournoi de 500 matchs entre elles · architecture MVP

5 AIs to choose from · a 500-match tournament between them · MVP architecture

Python · POO · MVP

Projet d'équipe · INSA CVL · oct. 2025 – avril 2026Team project · INSA CVL · Oct 2025 – Apr 2026

MedievAIl Battle · réseau pair-à-pairMedievAIl Battle · peer-to-peer network

Le même jeu, joué à deux machines sans serveur central : chaque joueur lance le jeu en Python et un petit démon réseau en C qui relaie les messages en UDP vers l'autre machine.

The same game, played across two machines with no central server: each player runs the Python game and a small C network daemon that relays messages over UDP to the other machine.

2 processus par machine · relais UDP en C (177 lignes) · aucun serveur central

2 processes per machine · UDP relay in C (177 lines) · no central server

C · Python · UDP · IPC

Projet d'équipe · 4 étudiants · juin – oct. 2026Team project · 4 students · Jun – Oct 2026

CyberQuest

Un jeu de simulation de pentest : le joueur infiltre un réseau fictif depuis un terminal intégré, à travers des niveaux Linux, Docker et DVWA, une mission Active Directory et des défis d'injection de prompt sur des LLM, avec un assistant « Mentor » pour l'aider.

A pentest simulation game: the player infiltrates a fictional network from a built-in terminal, through Linux, Docker and DVWA levels, an Active Directory mission and prompt-injection challenges against LLMs, with a "Mentor" assistant to help.

6 étapes Active Directory · 13 niveaux web · 8 niveaux Linux · 2 défis d'IA

6 Active Directory steps · 13 web levels · 8 Linux levels · 2 AI challenges

React 18 · Vite · xterm.js · Canvas 2D · Node.js

~/arsenal

Arsenal techniqueTechnical arsenal

Chaque compétence renvoie à un projet précis.

Every skill points back to a specific project.

~/parcourstimeline

Journal de bordLogbook

  1. 2017 – 2020Collège Pilote de Monastir Mention très bien. Admission sur concours national.With distinction. Admission by national competition.
  2. 2017 · 2019 · 2020Formations ATAST en robotiqueATAST robotics training Arduino, Raspberry Pi, Python et C++, un mini-jeu Unity en équipe, conception 3D.Arduino, Raspberry Pi, Python and C++, a team-built Unity mini-game, 3D design.
  3. 2020 – 2023Lycée Pilote de Monastir, section mathématiquesLycée Pilote de Monastir, mathematics track Mention très bien.With distinction.
  4. sept. 2023Sep 2023Entrée à l'INSA Centre-Val de LoireJoined INSA Centre-Val de Loire Diplôme d'ingénieur, spécialité STI, promotion 2028.Engineering degree, STI major, class of 2028.
  5. juil. – août 2025Jul – Aug 2025Stage chez Anypli, TunisieInternship at Anypli, Tunisia Première application web : Agenda de Révision.First web application: Agenda de Révision.
  6. oct. 2025 – janv. 2026Oct 2025 – Jan 2026MedievAIl Battle Projet d'équipe : un simulateur de batailles en Python.Team project: a battle simulator in Python.
  7. oct. 2025 – avril 2026Oct 2025 – Apr 2026MedievAIl Battle · réseauMedievAIl Battle · network Projet d'équipe : le jeu en pair-à-pair, avec un démon réseau en C.Team project: the game over peer-to-peer, with a C network daemon.
  8. juin 2026Jun 2026CyberQuest Projet d'équipe : jeu de simulation de pentest.Team project: pentest simulation game.
  9. sept. 2026Sep 2026InsaCloud Mini-cloud construit de zéro.Mini cloud built from scratch.
  10. oct. 2026Oct 2026AEGIS Mini-SOC Détection d'intrusion par machine learning.Intrusion detection with machine learning.
  11. oct. 2026Oct 2026Cap Stage Suivi de candidatures de stage, sans serveur, avec synchronisation Google Drive.Internship-application tracker, serverless, with Google Drive sync.
  12. oct. 2026Oct 2026SecuriGlass Factory OS Console de supervision d'une usine de verre, avec diode de données et assistant IA protégé.Supervision console for a glass factory, with a data diode and a guarded AI assistant.
  13. oct. 2026Oct 2026AI4BRAIN Agent d'aide à l'apprentissage non clinique, pour le défi IEEE CISTAC 1.0.Non-clinical learning-support agent, for the IEEE CISTAC 1.0 challenge.

~/engagementscommunity

Au-delà du codeBeyond code

À l'INSA CVLAt INSA CVL

  • Ambassadeur REDEX GroupREDEX Group ambassadorAmbassadeur du partenariat entre REDEX Group et l'INSA CVL.Ambassador for the partnership between REDEX Group and INSA CVL.
  • Membre du BDE, pôle associationStudent union (BDE) member, associations team
  • Membre de la Team PiloteTeam Pilote member

Bénévolat à MonastirVolunteering in Monastir

  • Association El KOLLADepuis 2020. Recensement de familles dans le besoin, accompagnement d'enfants à besoins spécifiques, aides alimentaires.Since 2020. Surveying families in need, supporting children with special needs, food aid.
  • Notre Grand Bleu2022. Sensibilisation au rappel vaccinal COVID et à la propreté des plages, lâcher de tortues marines.2022. Awareness of COVID boosters and beach cleanliness, sea turtle release.
  • Jasmin Open, WTA 250Octobre 2022. Bénévole pour l'organisation du tournoi.October 2022. Volunteer on the tournament organisation.

~/contact

Initialiser la connexionInitialise the connection

Je cherche un stage à partir de début avril 2027, en cybersécurité ou en cloud et DevOps. Le plus rapide est de m'écrire sur LinkedIn, par email, ou de m'appeler.

I'm looking for an internship starting early April 2027, in cybersecurity or in cloud and DevOps. The fastest way to reach me is LinkedIn, email, or a phone call.

LinkedInlinkedin.com/in/mohamed-aziz-baoueb-2a0827301 GitHubgithub.com/aziz3r

Emailmohamed.baoueb@insa-cvl.fr

TéléphonePhone07 64 40 49 94+33 7 64 40 49 94

InsaCloud

démo : création de compte, location d'une machine, terminal, bureau, fin de location

demo: sign-up, renting a machine, terminal, desktop, end of rental

Terminal dans le navigateur
Terminal in the browser
Bureau XFCE en ligne
XFCE desktop, online
94tests automatisésautomated tests
11contrôles CI/CDCI/CD checks
9rôles Ansible idempotentsidempotent Ansible roles
  • Ce que ça faitWhat it does Un contrôleur Flask place chaque machine sur le worker le moins chargé et le pilote par SSH, sans exposer d'API Docker. L'utilisateur choisit Ubuntu, Debian ou Alpine, en terminal web ou en bureau XFCE (noVNC). La machine se détruit à l'expiration. A Flask controller places each machine on the least loaded worker and drives it over SSH, with no Docker API exposed. The user picks Ubuntu, Debian or Alpine, as a web terminal or an XFCE desktop (noVNC). The machine destroys itself on expiry.
  • Reprise sur panneFailover Un worker silencieux passe hors ligne au bout d'environ 90 s et ses machines sont recréées sur un autre nœud, sans perdre la durée réservée. A silent worker goes offline after about 90 s and its machines are recreated on another node, without losing the reserved time.
  • SécuritéSecurity Mot de passe root chiffré (Fernet) et affiché une seule fois, conteneurs sans capacités superflues (--cap-drop ALL), CSRF, verrouillage anti-force-brute, CSP stricte. Chaîne CI : ruff, bandit, pip-audit, gitleaks, DAST avec nuclei, ansible-lint, hadolint, Trivy, SBOM. Encrypted root password (Fernet) shown once, containers stripped of extra capabilities (--cap-drop ALL), CSRF protection, brute-force lockout, strict CSP. CI pipeline: ruff, bandit, pip-audit, gitleaks, DAST with nuclei, ansible-lint, hadolint, Trivy, SBOM.
  • Limite assuméeKnown limit Les fichiers de l'ancienne machine sont perdus lors d'une reprise : il n'y a pas de stockage partagé. Files from the old machine are lost during a failover: there is no shared storage.

AEGIS Mini-SOC

démo : connexion, tableau de bord, flux temps réel, incident expliqué, métriques du modèle

demo: login, dashboard, live flows, an explained incident, model metrics

Pourquoi cette alerte : chaque caractéristique est comparée à sa valeur normale
Why this alert: each feature is compared with its normal value
Ce que vaut le modèle, y compris la famille qu'il rate
What the model is worth, including the family it misses
99,6 %de rappel, mesurérecall, measured
341 → 53faux positifs par heurefalse positives per hour
9familles liées à MITRE ATT&CKattack families mapped to MITRE ATT&CK
  • Ce que ça faitWhat it does Une seule chaîne du paquet à l'incident, pour le laboratoire, le rejeu de PCAP et la capture réelle (scapy). 52 caractéristiques de flux, deux étages de machine learning (anomalies entraînées sur du trafic bénin seul, puis un classifieur qui nomme la famille et peut opposer son veto), un seuil par hôte et des alertes regroupées en incidents. Console React/TypeScript en temps réel (FastAPI, WebSocket). A single pipeline from packet to incident, for the lab, PCAP replay and live capture (scapy). 52 flow features, two machine-learning stages (anomalies learned on benign traffic only, then a classifier that names the family and can veto), a per-host threshold, and alerts grouped into incidents. Real-time React/TypeScript console (FastAPI, WebSocket).
  • Une erreur utileA useful mistake Ma première règle de seuil (médiane + k·MAD) a fait tomber le rappel à 14 %. Les scores étant déjà presque uniformes, je l'ai remplacée par un quantile propre à chaque hôte. My first threshold rule (median + k·MAD) dropped recall to 14%. Since the scores were already close to uniform, I replaced it with a per-host quantile.
  • À l'échelleAt scale 8 994 alertes regroupées en un seul incident, 30 000 paquets par seconde, 94 tests. 8,994 alerts grouped into a single incident, 30,000 packets per second, 94 tests.
  • Limite assuméeKnown limit La balise de commande et contrôle (C2) n'est détectée qu'à 48,6 %. Le produit l'affiche lui-même. The command-and-control beacon is only detected 48.6% of the time. The product shows this itself.

Planificateur de révisionsRevision planner

démo : connexion, ajout d'un examen, disponibilités, planning, calendrier, version anglaise

demo: login, adding an exam, availability, schedule, calendar, English version

Planning généré
Generated schedule
Vue semaine
Week view
Sur mobile
On mobile
1 → 45tests, avant et après la refontetests, before and after the rebuild
0any en TypeScript strictany left in strict TypeScript
1commande pour tout lancercommand to run everything
  • OrigineOrigin Né de mon stage chez Anypli (Tunisie, juillet – août 2025), sans aucune expérience du développement web au départ. Livré le 15 août 2025, puis repris seul pour le rendre fiable. Born from my internship at Anypli (Tunisia, July – August 2025), with no web development experience at the start. Delivered on 15 August 2025, then rebuilt on my own to make it reliable.
  • Ce que ça faitWhat it does L'étudiant saisit ses examens, leurs coefficients et ses disponibilités. Le moteur de planification (fonctions pures, isolé et testé) répartit des séances datées selon l'importance de chaque épreuve et son espacement. The student enters exams, their weights and availability. The planning engine (pure functions, isolated and tested) spreads dated sessions according to each exam's weight and spacing.
  • ArchitectureArchitecture Monorepo TypeScript : interface React 18 avec Vite et Redux Toolkit, API Strapi 5 qui cloisonne les données par étudiant, interface en français et en anglais. TypeScript monorepo: React 18 front end with Vite and Redux Toolkit, a Strapi 5 API that keeps each student's data separate, interface in French and English.

Cap Stage

démo sur données fictives : connexion, aperçu, glisser-déposer, fiche, ajout rapide, dossiers, projets, compétences, thème sombre, réglages

demo on fictitious data: sign-in, overview, drag and drop, application sheet, quick add, documents, projects, skills, dark theme, settings

Aperçu : relances, échéances, pipeline, compte à rebours
Overview: follow-ups, deadlines, pipeline, countdown
Fiche : domaine, ce que l'entreprise cherche vraiment, ce qui lui a été envoyé
Sheet: field, what the company really wants, what was sent to it
Compétences demandées, projets qui les démontrent, lacunes à combler
Requested skills, the projects that prove them, gaps to fill
0serveur, aucune donnée chez moiservers, no data held by me
3autorisations Google, aucune sensibleGoogle scopes, none sensitive
310 000itérations PBKDF2 pour le verrouillagePBKDF2 iterations for the lock
  • OrigineOrigin Né de ma propre recherche de stage de quatre mois (avril 2027), puis ouvert à mes amis : il fallait un outil que n'importe qui ouvre avec un lien, sans compte à créer et sans que je puisse lire ses données. Born from my own search for a four-month internship (April 2027), then opened to friends: it had to be a tool anyone opens from a link, with no account to create and no way for me to read their data.
  • Ce que ça faitWhat it does Une fiche par entreprise (statut, domaines, compétences demandées et clés, besoin réel, contraintes, processus), les documents envoyés version par version, les contacts et relances, une fiche par projet réalisé, et la comparaison entre ce que demandent les offres et ce que démontrent les projets. One sheet per company (status, fields, requested and key skills, real need, constraints, process), documents sent version by version, contacts and follow-ups, one sheet per project, and a comparison of what offers ask for against what projects demonstrate.
  • SécuritéSecurity Un seul fichier sans dépendance, dont la politique de sécurité (CSP) interdit tout envoi réseau hors Google. Contenu jamais injecté comme HTML, import de fichier normalisé champ par champ, verrouillage optionnel AES-256-GCM, données rattachées à l'identifiant opaque du compte Google. A single dependency-free file whose content security policy (CSP) forbids any network call except to Google. Content is never injected as HTML, imported files are normalised field by field, optional AES-256-GCM lock, data bound to the opaque Google account identifier.
  • SynchronisationSync Connexion Google (modèle de jeton) puis un fichier dans l'espace caché de l'application, drive.appdata, dans le Drive de chaque utilisateur : tous les navigateurs conviennent, et je ne vois jamais ces données. Sans compte, sauvegarde dans un dossier choisi (Chrome, Edge) ou export JSON et CSV. Google sign-in (token model) then a file in the application's hidden space, drive.appdata, in each user's own Drive: any browser works, and I never see the data. Without an account, backup to a chosen folder (Chrome, Edge) or JSON and CSV export.
  • Ce qui reste à validerStill to validate La connexion avec un véritable compte Google et le sélecteur de dossier natif ont été testés avec des simulateurs ; un essai complet sur Chrome et Safari reste à faire. Pas de suite de tests automatisés. Sign-in with a real Google account and the native folder picker were tested with simulators; a full run on Chrome and Safari is still to do. No automated test suite.

SecuriGlass Factory OS

démo (1 min 08) : connexion par rôle, redémarrage de l'automate, cycle de chauffe, attaque Modbus directe, alertes MITRE, arrêt d'urgence, injection de prompt bloquée, journal d'audit

demo (1 min 08): role-based sign-in, PLC restart, heating cycle, direct Modbus attack, MITRE alerts, emergency stop, blocked prompt injection, audit log

Production : la température monte, le détecteur d'anomalies signale déjà un écart entre les zones
Production: the temperature rises, the anomaly detector already flags a gap between zones
Attaque directe sur l'automate : 900 °C refusés par son firmware (bornes 500 – 750 °C)
Direct attack on the PLC: 900 °C refused by its firmware (limits 500 – 750 °C)
Arrêt d'urgence envoyé par le réseau : accepté ; sa levée est refusée, il faut un acquittement physique
Emergency stop sent over the network: accepted; the reset is refused, a physical acknowledgement is required
Alertes qualifiées MITRE ATT&CK et ATLAS, puis schéma de circulation des données OT → IT
Alerts tagged with MITRE ATT&CK and ATLAS, then the OT → IT data-flow diagram
L'assistant refuse une injection de prompt : motif hostile intercepté, incident consigné
The assistant refuses a prompt injection: hostile pattern intercepted, incident logged
Journal d'audit : la chaîne SHA-256 est recalculée côté serveur, 823 enregistrements vérifiés
Audit log: the SHA-256 chain is recomputed on the server, 823 records checked
563tests de l'API, sur une vraie base PostgreSQLAPI tests, run against a real PostgreSQL
763cas de fuzzing sur l'automate C, aucun plantagefuzzing cases on the C PLC, no crash
4barrières devant l'assistant IAbarriers in front of the AI assistant
  • Projet personnelPersonal project Preuve de concept de cybersécurité industrielle réalisée en octobre 2026 : une démonstration technique, pas un produit homologué. Tout tourne en local, sans service cloud, ce qui permet de l'attaquer sans risque pour un système réel. An industrial-cybersecurity proof of concept built in October 2026: a technical demonstration, not a certified product. Everything runs locally, with no cloud service, so it can be attacked with no risk to a real system.
  • Ce que ça simuleWhat it simulates La supervision d'une ligne de trempe de verre (norme EN 12150-1) : un automate en C11 pilote un four à quatre zones de chauffe, une passerelle lit ses mesures en lecture seule, une diode de données les transmet à sens unique à une API, puis à une console web qui affiche à chaque rôle ce qu'il a le droit de voir. The supervision of a glass-tempering line (EN 12150-1): a C11 PLC drives a four-zone furnace, a gateway reads its measurements read-only, a data diode sends them one way to an API, then to a web console that shows each role what it is allowed to see.
  • La diode de donnéesThe data diode Un émetteur UDP qui n'appelle jamais recv() : il n'existe aucune route de retour du système d'information vers l'automate. Les trames sont signées (Ed25519, SHA-256) et numérotées contre le rejeu. A UDP sender that never calls recv(): there is no return route from the information system to the PLC. Frames are signed (Ed25519, SHA-256) and numbered against replay.
  • Accès, données, traçabilitéAccess, data, traceability Six rôles ; contrôle par rôle (RBAC) puis règles contextuelles (ABAC) qui refusent tout par défaut, appliqués côté serveur. Données clients chiffrées au repos (AES-256-GCM), mots de passe en Argon2id, journal d'audit chaîné par SHA-256 et vérifié côté serveur. Six roles; role-based control (RBAC) then contextual rules (ABAC) that deny by default, enforced on the server. Customer data encrypted at rest (AES-256-GCM), passwords hashed with Argon2id, audit log chained with SHA-256 and verified on the server.
  • L'assistant IAThe AI assistant Quatre barrières successives : filtrage de la question, corpus fermé sur la norme EN 12150, génération contrainte, contrôle des grandeurs physiques en sortie. La démo montre une injection de prompt interceptée et consignée. Four successive barriers: question filtering, a closed corpus on the EN 12150 standard, constrained generation, a check of physical quantities on output. The demo shows a prompt injection intercepted and logged.
  • L'attaque rejouéeThe replayed attack Une écriture Modbus directe sur l'automate, sans passer par la console : 900 °C refusés par le firmware ; 750 °C sur deux zones acceptés, le four sort de la plage de sécurité affichée (620 – 730 °C) et le modèle d'anomalies le détecte ; arrêt d'urgence accepté à distance, mais sa levée refusée. A direct Modbus write to the PLC, bypassing the console: 900 °C refused by the firmware; 750 °C on two zones accepted, the furnace leaves the displayed safety range (620 – 730 °C) and the anomaly model catches it; emergency stop accepted remotely, but its reset refused.
  • Limites relevées par le rapportLimits listed in the report Cette attaque directe sur le réseau industriel n'apparaît pas dans les alertes de la console, faute de sonde réseau. Hors périmètre : plan de reprise, signature des consignes envoyées à l'automate, image Docker distroless, homologation. Certains tests sont ignorés sous macOS et restent à exécuter sous Linux. This direct attack on the industrial network does not show up in the console's alerts, for lack of a network probe. Out of scope: disaster recovery, signing the setpoints sent to the PLC, a distroless Docker image, certification. Some tests are skipped on macOS and still have to run on Linux.

C11 · Python · FastAPI · React · TypeScript · PostgreSQL · Modbus TCP

AI4BRAIN

démo (4 min, commentaire vocal en anglais) : présentation, consentement, un jeu, profil en fourchettes, coach, score de collaboration, profils de démonstration, version française, modèle bayésien, ce qui est validé et ce qui reste à faire

demo (4 min, English voice-over): overview, consent, a game, profile as ranges, coach, collaboration score, demo profiles, French version, Bayesian model, what is validated and what comes next

Accueil en français : l'application dit ce qu'elle est, et ce qu'elle n'est pas, avant de demander quoi que ce soit
Landing page in French: the app says what it is, and is not, before asking for anything
Consentement d'abord : ce qui est enregistré, ce qui ne l'est jamais, durée de conservation au choix
Consent first: what is recorded, what never is, a retention period of your choice
Briefing avant chaque jeu : ce qu'il entraîne, un exemple du quotidien, les règles et une démonstration animée
Briefing before each game: what it trains, an everyday example, the rules and an animated demo
Le coach : « la rapidité est autour de 56, à 8 près » ; la raison vient des chiffres qui ont décidé (profil de démonstration)
The coach: "Speed is around 56, give or take 8"; the reason comes from the numbers that decided (demo profile)
Profil : une fourchette à 95 % par compétence et sa fiabilité, jamais un score seul (profil de démonstration, données simulées)
Profile: a 95% range per skill and its reliability, never a lone score (demo profile, simulated data)
Score de collaboration avec l'IA : cinq composantes calculées à partir des échanges avec le coach (profil de démonstration)
AI collaboration score: five components computed from the exchanges with the coach (demo profile)

Captures de l'application réelle, interface en anglais sauf la première : elle est bilingue FR / EN.

Captures of the running app, interface in English except the first: it is bilingual FR / EN.

97,2 %des vraies valeurs dans l'intervalle à 95 % (simulation, séance 12)of true values inside the 95% interval (simulation, session 12)
−27 %d'erreur grâce à l'amortissement des séances d'inattention (simulation)error thanks to damping of lapse sessions (simulation)
19tests automatisés, dont un contrôle du vocabulaire sur 200 traces par langueautomated tests, including a vocabulary check on 200 traces per language
  • Le défiThe challenge Participation au défi IEEE CISTAC 1.0 (IEEE Computational Intelligence Society, section Tunisie) : concevoir un agent de « croissance cognitive » explicable, non clinique et honnête sur son incertitude. Le rapport IEEE de 5 pages est signé « Team AI4BRAIN ». An entry to the IEEE CISTAC 1.0 challenge (IEEE Computational Intelligence Society, Tunisia Chapter): build an explainable, non-clinical "cognitive growth" agent that is honest about its uncertainty. The 5-page IEEE report is signed "Team AI4BRAIN".
  • Ce que ça mesureWhat it measures Cinq jeux d'environ une minute : mémoire (n-back spatial), concentration (flanker), flexibilité (changement de règle), rapidité (temps de réaction à choix) et raisonnement (matrices). Chaque compétence est une fourchette à 95 % qui se resserre avec la pratique ; jamais de score seul, de diagnostic ni de comparaison avec d'autres personnes. Five games of about a minute: memory (spatial n-back), focus (flanker), flexibility (task switching), speed (choice reaction time) and reasoning (matrices). Each skill is a 95% range that narrows with practice; never a lone score, a diagnosis or a comparison with other people.
  • Le modèle « Brain Twin »The "Brain Twin" model Un filtre bayésien de type Kalman par compétence : une croyance gaussienne (estimation et incertitude) qui tient compte de la difficulté, du compromis vitesse-précision et de l'effet d'entraînement. Un écart au-delà de trois écarts-types gonfle le bruit pour qu'une mauvaise séance ne fasse presque pas bouger l'estimation ; une dérive minimale empêche l'incertitude de tomber à zéro, le modèle ne prétend jamais être certain. A Kalman-type Bayesian filter per skill: a Gaussian belief (estimate and uncertainty) that accounts for difficulty, the speed-accuracy trade-off and practice effects. A deviation beyond three standard deviations inflates the noise so that one bad session barely moves the estimate; a minimal drift keeps uncertainty from collapsing to zero, so the model never claims certainty.
  • Un coach qui ne peut pas inventerA coach that cannot make things up Une politique déterministe choisit le prochain jeu (marge de progression, incertitude, ancienneté de la pratique) ; un modèle de langage ne fait que la reformuler. Sa réponse doit être un JSON valide qui recopie la décision et ne contient aucun nombre absent de la trace, sinon l'application retombe sur un gabarit bilingue. Un garde-fou refuse le vocabulaire diagnostique et les comparaisons, en anglais et en français. A deterministic policy picks the next game (room to grow, uncertainty, recency of practice); a language model only rephrases it. Its answer must be valid JSON that copies the decision and contains no number absent from the trace, otherwise the app falls back to a bilingual template. A guardrail rejects diagnostic vocabulary and comparisons, in English and French.
  • Score de collaboration avec l'IAAI collaboration score Une note de 0 à 100 à la formule explicite (clarification, vérification critique, itération, autonomie, usage responsable), calculée à partir des échanges avec le coach et masquée tant qu'il n'y a pas assez de données. A 0 to 100 score with an explicit formula (clarification, critical verification, iteration, autonomy, responsible use), computed from the exchanges with the coach and hidden until there is enough data.
  • Vie privéePrivacy Identifiant pseudonyme aléatoire, ni nom, ni e-mail, ni caméra, ni micro. Le consentement et une durée de conservation (30, 90 ou 365 jours) sont exigés avant toute évaluation (HTTP 403 sinon) ; export JSON et suppression avec reçu à tout moment, purge des données expirées. Random pseudonymous id, no name, e-mail, camera or microphone. Consent and a retention period (30, 90 or 365 days) are required before any assessment (HTTP 403 otherwise); JSON export and deletion with a receipt at any time, purge of expired data.
  • L'évaluationThe evaluation Simulation de 200 utilisateurs × 5 compétences × 12 séances, avec un générateur volontairement différent de l'estimateur : l'écart-type de l'estimation passe de 25 à 4,1 points, l'erreur est de 3,55 contre 4,84 sans amortissement, 82,6 % des séances d'inattention sont amorties pour 0,12 % de fausses alertes, et la corrélation avec la vraie capacité atteint 0,94. A simulation of 200 users × 5 skills × 12 sessions with a generator deliberately different from the estimator: the standard deviation of the estimate falls from 25 to 4.1 points, the error is 3.55 against 4.84 without damping, 82.6% of lapse sessions are damped for 0.12% false alarms, and the correlation with true ability reaches 0.94.
  • Limites relevées par le rapportLimits listed in the report Aucune étude avec de vrais participants : tous les chiffres de fiabilité viennent de simulation, et aucune étude d'utilisabilité n'a été menée. Une minute de jeu donne des estimations bruitées, surtout pour le raisonnement (6 items). Compétences modélisées indépendamment, constantes de conception à calibrer. Pas d'authentification (le pseudonyme sert de secret) et un stockage en mémoire. Interface bilingue vérifiée automatiquement, pas par des locuteurs natifs. Les profils de la démo sont des personas simulés ; la page d'accueil compte les séances toutes compétences confondues et le graphique de projection ne couvre que la mémoire. No study with real participants: every reliability figure comes from simulation, and no usability study has been run. One minute of play gives noisy estimates, especially for reasoning (6 items). Skills are modelled independently, design constants need calibration. No authentication (the pseudonym acts as a secret) and an in-memory store. The bilingual interface was checked automatically, not by native speakers. Demo profiles are simulated personas; the home page counts sessions across skills and the projection chart covers only memory.
  • Pour l'essayerTo try it Python 3.9+ et Node 18+ : bash start.sh lance l'API (port 8000) et l'application (port 3000) ; la page /demo charge trois profils simulés. Python 3.9+ and Node 18+: bash start.sh starts the API (port 8000) and the app (port 3000); the /demo page loads three simulated profiles.

Python · FastAPI · Pydantic · Next.js 14 · TypeScript · Tailwind · Recharts

CyberQuest

démo de la version client-serveur : connexion, carte réseau, niveaux Linux, Docker et DVWA, mission Active Directory, défis d'IA, fin de partie

demo of the client-server version: login, network map, Linux, Docker and DVWA levels, Active Directory mission, AI challenges, endgame

Mission Active Directory : chaque étape cite sa technique MITRE ATT&CK
Active Directory mission: each step cites its MITRE ATT&CK technique
Terminal, objectifs, indices et assistant « Mentor »
Terminal, objectives, hints and the "Mentor" assistant
Niveau Docker : déployer DVWA, puis l'attaquer
Docker level: deploy DVWA, then attack it
AI_CORE : défis de prompt injection contre des LLM
AI_CORE: prompt-injection challenges against LLMs
Fin de partie : le mainframe Nexus en alerte rouge
Endgame: the Nexus mainframe on red alert
Carte réseau et chronomètre de partie
Network map and game timer
  • Projet d'équipeTeam project Réalisé à quatre à l'INSA CVL (juin – octobre 2026). Dépôt d'origine : JamaiAli/CyberquestProject. Mon dépôt conserve l'historique Git complet et les droits de chaque auteur. Built by four students at INSA CVL (June – October 2026). Original repository: JamaiAli/CyberquestProject. My repository keeps the full Git history and each author's rights.
  • Ce que fait le jeuWhat the game does Une carte réseau (base Kali, commandes Linux, Active Directory, application web, cœur IA). Chaque machine ouvre un niveau avec un terminal, des objectifs à valider, des indices et un assistant « Mentor » qui répond aux questions. A network map (Kali base, Linux commands, Active Directory, web application, AI core). Each machine opens a level with a terminal, objectives to validate, hints and a "Mentor" assistant that answers questions.
  • Le parcours de la démoThe demo's path Bases de Linux, déploiement de DVWA avec Docker, injection de commande, injection SQL, mission Active Directory (reconnaissance réseau puis énumération DNS), défis de prompt injection sur des LLM, puis la fin de partie. Linux basics, deploying DVWA with Docker, command injection, SQL injection, an Active Directory mission (network reconnaissance, then DNS enumeration), prompt-injection challenges against LLMs, then the endgame.
  • Le contenuThe content 6 étapes Active Directory (chaque étape cite sa technique MITRE ATT&CK), 13 niveaux d'applications web inspirés de DVWA et de l'OWASP Top 10, 8 niveaux Linux, 2 défis d'IA et 6 niveaux de prompt injection. Tout est simulé : aucune commande ne touche un vrai réseau. 6 Active Directory steps (each cites its MITRE ATT&CK technique), 13 web-application levels inspired by DVWA and the OWASP Top 10, 8 Linux levels, 2 AI challenges and 6 prompt-injection levels. Everything is simulated: no command touches a real network.
  • Deux architecturesTwo architectures Une version client-serveur (branche master : Node.js, Express, SQLite) et une version entièrement embarquée dans le navigateur (branche proof-of-concept, sauvegarde locale). La démo ci-dessus montre la première. A client-server version (master branch: Node.js, Express, SQLite) and a version that runs entirely in the browser (proof-of-concept branch, local save). The demo above shows the first one.
  • Limites relevées par le rapportLimits listed in the report Aucun test automatisé, et la branche autonome ne se construit pas telle quelle avec Vite 8 (constat du 15 octobre 2026). Le rapport signale aussi que le README décrit la CSP, la signature des sauvegardes et l'audit plus favorablement que le code ne le justifie. No automated tests, and the standalone branch does not build as is with Vite 8 (found on 15 October 2026). The report also notes that the README describes the CSP, save signing and audit more favourably than the code justifies.

React 18 · Vite · xterm.js · Canvas 2D · Node.js

MedievAIl Battle

démo : menu, configuration de la bataille et choix des IA, déroulement du combat, victoire

demo: menu, battle set-up and AI choice, the fight, victory

Menu : nouvelle bataille, scénarios, chargement, options
Menu: new battle, scenarios, load, options
Choix de l'IA de chaque équipe
Choosing each team's AI
Les armées se déploient : effectifs de chaque équipe et mini-carte à l'écran
The armies deploy: each team's headcount and a mini-map on screen
Mêlée : chevaliers, piquiers et arbalétriers au contact
Melee: knights, pikemen and crossbowmen in contact
Fin de bataille : victoire de l'équipe B
End of the battle: team B wins
Loi carrée de Lanchester : survivants mesurés (rouge) et prédiction (bleu), scénario N contre 2N
Lanchester's square law: measured survivors (red) and prediction (blue), N versus 2N scenario
  • Projet d'équipeTeam project Projet Python et programmation orientée objet de la formation STI3A à l'INSA CVL (octobre 2025 – janvier 2026), réalisé à sept. Dépôt de référence : awa-b/python-project-2025-2026. Mon dépôt est un miroir : il conserve l'historique Git complet et les droits de chaque auteur. Python and object-oriented programming project of the STI3A course at INSA CVL (October 2025 – January 2026), built by seven students. Reference repository: awa-b/python-project-2025-2026. My repository is a mirror: it keeps the full Git history and each author's rights.
  • Ce que fait le jeuWhat the game does On configure une bataille (IA de chaque équipe, taille des armées, terrain), puis on la regarde se dérouler : chaque IA donne ses ordres aux unités et le moteur résout les combats. Le jeu se lance en interface graphique plein écran, en vue terminal (curses) ou en ligne de commande. You set up a battle (each team's AI, army size, terrain), then watch it play out: each AI gives orders to its units and the engine resolves the fights. The game runs in a full-screen graphical interface, a terminal view (curses) or on the command line.
  • ArchitectureArchitecture Architecture MVP : un modèle (unités, armées, règles de combat), un présentateur qui déroule la bataille, et des vues interchangeables. MVP architecture: a model (units, armies, combat rules), a presenter that runs the battle, and interchangeable views.
  • Les expériences du rapportThe report's experiments Un tournoi de 500 matchs entre les cinq IA (131 secondes de calcul) donne un classement net, de Predict EINSTEIN à Captain BRAINDEAD. Surprise : l'IA à règles par type de cible, General STRATEGUS, perd contre une simple charge. La loi carrée de Lanchester n'est confirmée que partiellement : le camp le plus nombreux gagne toujours, mais avec plus de survivants que prévu. A 500-match tournament between the five AIs (131 seconds of computing) gives a clear ranking, from Predict EINSTEIN to Captain BRAINDEAD. Surprise: the AI with per-target-type rules, General STRATEGUS, loses to a plain charge. Lanchester's square law is only partly confirmed: the larger side always wins, but with more survivors than predicted.
  • Limites relevées par le rapportLimits listed in the report Aucun test automatisé ; l'aléa n'est pas initialisé par une graine, donc deux tournois identiques peuvent différer ; le ciblage est quadratique (0,5 s de calcul pour 54 unités, 6,8 s pour 210). Le menu décrit Predict EINSTEIN comme une IA qui « simule 5 coups », ce que le code ne fait pas. No automated tests; randomness is not seeded, so two identical tournaments can differ; targeting is quadratic (0.5 s of computing for 54 units, 6.8 s for 210). The menu describes Predict EINSTEIN as an AI that "simulates 5 moves ahead", which the code does not do.

Python · POO · MVP

MedievAIl Battle · réseau pair-à-pairMedievAIl Battle · peer-to-peer network

démo : deux instances côte à côte, lobby multijoueur (choix de l'IA et de la zone de départ), combat, fin de partie

demo: two instances side by side, multiplayer lobby (AI and starting zone), the fight, end of the game

Lobby multijoueur : chaque joueur choisit son IA
Multiplayer lobby: each player picks an AI
Zone de départ, puis créer (hôte) ou rejoindre
Starting zone, then create (host) or join
Début du combat : les deux instances montrent la même partie
Start of the fight: both instances show the same game
Mêlée, vue par les deux joueurs
Melee, as seen by both players
Fin de la partie enregistrée : le client affiche la victoire de l'équipe B, l'hôte n'a pas détecté la fin (les deux vues divergent)
End of the recorded game: the client shows team B's victory, the host has not detected the end (the two views diverge)
  • Projet d'équipeTeam project Projet réseaux de la formation STI3A à l'INSA CVL (octobre 2025 – avril 2026), réalisé à onze. Il prolonge la base du jeu Python ; le code réseau a été écrit du 8 au 29 avril 2026. Dépôt de référence : YOUSSEF4315/STI3A-Projet_reseaux_1. Mon dépôt est un miroir : il conserve l'historique Git complet et les droits de chaque auteur. Networking project of the STI3A course at INSA CVL (October 2025 – April 2026), built by eleven students. It extends the Python game; the network code was written between 8 and 29 April 2026. Reference repository: YOUSSEF4315/STI3A-Projet_reseaux_1. My repository is a mirror: it keeps the full Git history and each author's rights.
  • Deux programmes par machineTwo programs per machine Chaque joueur lance le jeu avec son IA (Python) et un démon réseau en C. Le jeu ne parle qu'à son démon local, en JSON sur UDP (IPC) ; seuls les démons communiquent à travers le réseau, en UDP pair-à-pair. Le démon est un relais : il transmet tel quel ce que le jeu lui confie. Each player runs the game with its AI (Python) and a C network daemon. The game only talks to its local daemon, in JSON over UDP (IPC); only the daemons communicate across the network, over peer-to-peer UDP. The daemon is a relay: it forwards as is whatever the game hands it.
  • Synchronisation de l'étatState synchronisation Chaque instance fait tourner sa propre simulation. Toutes les cinq images, elle diffuse l'état de ses unités (type, position, points de vie) et les points de vie des unités adverses : le premier message pèse 12,5 Ko pour 150 unités par camp. Each instance runs its own simulation. Every five frames, it broadcasts the state of its units (type, position, hit points) and the hit points of the opposing units: the first message weighs 12.5 KB for 150 units per side.
  • Deux versionsTwo versions Le README distingue une version 1 « best-effort » (un routeur Python de secours, qui montre les défauts d'un réseau sans cohérence : unités en double, « fantômes ») et une version 2 qui annonce un démon C avec propriété réseau, anti-zombie et victoire synchronisée. The README distinguishes a "best-effort" version 1 (a fallback Python router that shows the flaws of a network with no consistency: duplicated units, "ghosts") and a version 2 that announces a C daemon with network ownership, anti-zombie and synchronised victory.
  • Limites relevées par le rapportLimits listed in the report Le rapport constate que la propriété réseau, l'anti-zombie et la victoire synchronisée annoncées par le README ne sont pas dans le code du dépôt : le démon est un simple relais et les points de vie reçus sont écrits sans arbitrage. Sur la partie enregistrée, les deux écrans divergent en fin de combat. Sous macOS, le démon d'origine perd les paquets de plus de 9 Ko : la démo utilise une copie à tampons agrandis. Ni authentification ni chiffrement. The report finds that the network ownership, anti-zombie and synchronised victory announced by the README are not in the repository's code: the daemon is a plain relay and received hit points are written without arbitration. On the recorded game, the two screens diverge at the end of the fight. On macOS, the original daemon drops packets over 9 KB: the demo uses a copy with larger buffers. No authentication and no encryption.
  • Pour l'essayerTo try it Le README du dépôt décrit un essai sur une seule machine (adresse 127.0.0.1) : compiler le démon avec gcc, lancer deux démons et deux instances du jeu. Le rapport détaille la procédure, en quatre terminaux. The repository README describes a single-machine test (address 127.0.0.1): build the daemon with gcc, then start two daemons and two game instances. The report details the procedure, in four terminals.

C · Python · UDP · IPC

Ouvrir le PDF ↗Open the PDF ↗