CryptoVault

Coffre-fort numérique sécurisé
Contexte

CryptoVault est un projet de coffre-fort numérique sécurisé réalisé en binôme dans le cadre de ma formation en BTS Services Informatiques aux Organisations (option SLAM).

Ce projet avait pour objectif de strong concevoir et développer une application complète permettant de stocker, organiser et partager des fichiers de manière sécurisée. Il s'inscrit dans une démarche professionnelle visant à mettre en œuvre une architecture full-stack moderne, combinant une API REST, un client lourd JavaFX et une interface Web dédiée aux partages publics.

L'enjeu principal était de répondre aux problématiques actuelles liées à la protection des données numériques : contrôle des accès, gestion des habilitations, chiffrement des fichiers, traçabilité des actions et séparation des espaces utilisateurs.

Logo de CryptoVault

Réalisé dans un contexte pédagogique simulant un environnement professionnel, le projet nous a amenés à intervenir sur l'ensemble du cycle de développement : analyse du besoin, modélisation de la base de données, développement backend et frontend, intégration des mécanismes de sécurité, puis déploiement conteneurisé avec Docker.

CryptoVault représente ainsi une réalisation complète illustrant ma capacité à travailler en équipe sur une solution sécurisée, structurée et maintenable.

Fonctionnalités
Besoins

Le projet CryptoVault a été conçu pour répondre à des enjeux concrets liés à la gestion et à la sécurisation des données numériques.

Sur le plan fonctionnel, l'objectif était de proposer à chaque utilisateur un espace personnel sécurisé lui permettant de stocker et d'organiser ses fichiers au sein d'une arborescence de dossiers. La solution devait également intégrer un système de versionnage afin de conserver l'historique des modifications, ainsi qu'un mécanisme de contrôle des quotas pour limiter l'espace de stockage utilisé.

Un autre besoin essentiel concernait le partage sécurisé de fichiers ou de dossiers. Il était nécessaire de pouvoir générer des liens publics temporaires, configurables (date d'expiration, nombre de téléchargements), tout en garantissant une traçabilité des accès et des actions effectuées. Le système devait également distinguer les utilisateurs standards de l'administrateur, ce dernier disposant de fonctionnalités supplémentaires comme la gestion des quotas et des comptes.

Sur le plan technique, la solution devait centraliser la logique métier au sein d'une API REST sécurisée. L'authentification devait être robuste, basée sur des mécanismes modernes (JWT), et les données sensibles protégées via le hachage des mots de passe et le chiffrement des fichiers. La cohérence des données devait être assurée par un modèle relationnel normalisé et des contraintes d'intégrité.

Enfin, l'application devait être ergonomique et simple d'utilisation côté client, tout en permettant un déploiement reproductible et structuré grâce à la conteneurisation.

Environnement technologique

La solution repose sur un environnement technologique complet, couvrant le backend, le frontend, la base de données et le déploiement.

Backend

  • PHP 8.2 - développement de l'API REST et implémentation de la logique métier.
  • Slim 4 - framework léger pour la gestion des routes, middlewares et contrôleurs REST.
  • Medoo (ORM) - abstraction simplifiée de l'accès aux données via PDO.
  • MySQL - base de données relationnelle normalisée avec contraintes d'intégrité.
  • JWT (HMAC-SHA256) - authentification stateless sécurisée des utilisateurs.
  • Bcrypt - hachage sécurisé des mots de passe avec salage intégré et protection contre les attaques par force brute.
  • AES-256-GCM - chiffrement des fichiers avec authentification et garantie d'intégrité.
  • Middlewares de sécurité - gestion des rôles (user/admin), contrôle d'accès et validation des requêtes.

Client lourd

  • Java 17 LTS - socle applicatif stable et maintenable.
  • JavaFX 21 - développement de l'interface graphique.
  • Architecture MVC - séparation claire entre modèle, vue et contrôleur.
  • FXML & SceneBuilder - conception structurée des interfaces.
  • HTTP Client (REST) - communication sécurisée avec l'API.
  • Gestion asynchrone (Tasks JavaFX) - upload de fichiers avec barre de progression et interface réactive.

Client léger Web

  • HTML5 / CSS3 - structure et mise en forme des pages publiques.
  • Bootstrap 5 - interface responsive et ergonomique.
  • JavaScript (ES6) - gestion des interactions côté navigateur.
  • Intégration API REST - téléchargement sécurisé via lien public avec vérification des contraintes côté serveur (expiration, nombre d'usages, révocation).

Outils et déploiement

  • Docker / Docker Compose - conteneurisation et déploiement reproductible.
  • Git & GitHub - gestion de versions et collaboration en binôme.
  • IntelliJ IDEA & Visual Studio Code - environnements de développement.
  • Postman - tests et validation des endpoints REST.
  • Figma - conception des maquettes UI/UX.
Modèle conceptuel des données — CryptoVault Modèle conceptuel des données de l'application CryptoVault
Réalisation

Le développement de CryptoVault s'est déroulé en binôme selon une démarche progressive et structurée, allant de la modélisation des données à l'implémentation complète des fonctionnalités.

La première étape a consisté à concevoir le modèle relationnel de la base de données. Nous avons élaboré un MCD puis un schéma SQL intégrant les entités principales : utilisateurs, dossiers hiérarchiques, fichiers, versions, partages et journalisation. Les contraintes d'intégrité et les relations ont été soigneusement définies afin de garantir la cohérence et la séparation stricte des espaces utilisateurs.

Nous avons ensuite développé l'API REST, cœur de l'application. Celle-ci centralise l'ensemble de la logique métier : gestion des comptes, contrôle des habilitations, traitement des uploads, calcul des quotas, gestion des partages et vérifications de sécurité. Une attention particulière a été portée à la robustesse des contrôles (validation des entrées, vérification des droits, gestion des erreurs et des cas limites).

Le système de versionnage a été conçu pour conserver l'historique complet des fichiers, sans écrasement des données. Chaque nouvelle version est enregistrée de manière indépendante, garantissant traçabilité et intégrité.

Le client JavaFX a été développé pour offrir une expérience proche d'un explorateur de fichiers : navigation arborescente, affichage dynamique des ressources, gestion des versions et des partages. Les uploads sont gérés de manière asynchrone avec indicateur de progression afin de maintenir une interface fluide.

Une interface Web publique a également été réalisée pour permettre le téléchargement via lien sécurisé. Toutes les contraintes (expiration, nombre de téléchargements restants, révocation) sont contrôlées côté serveur avant toute autorisation.

Enfin, l'ensemble de la solution a été conteneurisé avec Docker afin de garantir un environnement de développement et de déploiement reproductible.

Cette réalisation illustre ma capacité à concevoir une architecture cohérente, sécurisée et maintenable, tout en travaillant en collaboration sur un projet structuré.

Bilan

CryptoVault constitue une étape majeure dans mon parcours de formation. Ce projet m'a permis d'approfondir des compétences techniques essentielles à la conception d'une application sécurisée et structurée.

Au-delà de l'implémentation fonctionnelle, j'ai pu travailler sur des problématiques concrètes telles que la conception d'une architecture REST robuste, la gestion des échanges entre clients et API, la mise en œuvre de mécanismes de sécurité (authentification, chiffrement, contrôle des accès) ainsi que la modélisation d'une base de données relationnelle normalisée garantissant la cohérence des informations.

La réalisation du projet m'a également confrontée à des enjeux proches du contexte professionnel : gestion des droits utilisateurs, traitement des erreurs et des cas limites, organisation du code, séparation claire des responsabilités entre les différentes couches de l'application, et rédaction d'une documentation complète et structurée.

Ce travail en binôme m'a permis de développer ma capacité à collaborer efficacement sur un projet technique, à structurer les tâches, à échanger sur les choix d'architecture et à maintenir une cohérence globale dans le développement.

Productions associées

Les livrables du projet CryptoVault s'articulent autour de plusieurs ensembles complémentaires, couvrant la conception, le développement et la documentation de la solution :

Documentation et conception

  • ◈ Documentation technique détaillée (architecture, sécurité, base de données, flux applicatifs).
  • ◈ Guide utilisateur décrivant le fonctionnement du client JavaFX et de l'interface Web publique.
  • ◈ Modélisation de la base de données : MCD, modèle relationnel et schéma SQL.
  • ◈ Maquettes UI/UX réalisées sous Figma.

Développement et architecture applicative

  • ◈ API REST sécurisée (PHP 8 / Slim 4 / Medoo / JWT).
  • ◈ Client lourd JavaFX (Java 17) interfacé avec l'API REST.
  • ◈ Interface Web publique de téléchargement via lien de partage.
  • ◈ Base de données MySQL normalisée + scripts SQL d'initialisation.
  • ◈ Environnement Docker Compose.
  • ◈ Code source versionné et disponible sur GitHub.

Organisation et validation

  • ◈ Travail collaboratif en binôme avec gestion de versions via Git/GitHub.
  • ◈ Tests des endpoints REST (Postman) et validation des flux fonctionnels.
  • ◈ Vérification des mécanismes de sécurité : contrôle des accès, gestion des rôles, expiration et limitation des liens de partage.
Perspectives

Plusieurs axes d'évolution ont été identifiés pour une version ultérieure de CryptoVault :

Évolutions fonctionnelles

  • ◈ Mise en place d'une authentification renforcée (double facteur - 2FA).
  • ◈ Protection optionnelle des liens de partage par mot de passe.
  • ◈ Mise en place de notifications (expiration imminente, dépassement de quota).
  • ◈ Gestion avancée des droits (groupes d'utilisateurs, permissions fines).
  • ◈ Développement d'une version full Web en complément du client JavaFX.
  • ◈ Ajout du déplacement de dossiers et fichiers.
  • ◈ Consultation d'un espace « Mon historique » pour visualiser les actions passées.
  • ◈ Ajout de pages informatives (« Mentions légales », « À propos »).
  • ◈ Renforcement de la politique de complexité des mots de passe.
  • ◈ Extension du système de journalisation via des triggers supplémentaires dans audit_logs.

Améliorations techniques

  • ◈ Déploiement sur un serveur distant avec configuration HTTPS complète.
  • ◈ Intégration de tests automatisés (unitaires et d'intégration).
  • ◈ Mise en place d'un système de sauvegarde et de restauration automatisé.
  • ◈ Ajout d'outils de supervision et de monitoring du service.

Pérennisation du projet

  • ◈ Maintien d'une documentation technique et utilisateur à jour.
  • ◈ Amélioration continue de la sécurité applicative.
  • ◈ Structuration du projet pour faciliter son évolution vers un environnement professionnel réel.
Compétences

1. Gérer le patrimoine informatique

  • 1.1. Recenser et identifier les ressources numériques
  • Dans le cadre du projet Coffre-fort numérique, j'ai recensé et identifié l'ensemble des ressources nécessaires au fonctionnement du service : API REST développée en PHP (Slim), base de données relationnelle MySQL, environnement conteneurisé Docker, client lourd JavaFX et client léger Web pour le téléchargement des fichiers.
  • 1.3. Mettre en place et vérifier les niveaux d'habilitation associés à un service
  • J'ai mis en place un système d'authentification par JWT permettant de gérer les habilitations des utilisateurs, de sécuriser l'accès aux ressources et de restreindre les actions selon les rôles définis (utilisateur / administrateur).
  • 1.5. Gérer des sauvegardes
  • J'ai mis en place un système de sauvegarde du backend à l'aide de scripts automatisés permettant de générer des archives complètes (base de données, volumes Docker, code et configuration) et d'assurer leur restauration en cas de besoin.

4. Travailler en mode projet

  • 4.1. Analyser les objectifs et les modalités d'organisation d'un projet
  • J'ai analysé les objectifs fonctionnels et techniques à partir du cahier des charges afin de définir un périmètre de réalisation centré sur un MVP. J'ai également pris en compte les contraintes techniques et l'organisation du travail en binôme pour répartir les développements entre le back-end, le client JavaFX et l'interface Web.
  • 4.2. Planifier les activités
  • J'ai planifié les différentes phases du projet en définissant un ordre logique de développement (authentification, gestion des dossiers, fichiers, quotas, partages, clients). Le suivi de l'avancement a été assuré via GitHub (commits réguliers) et un planning de type Gantt, avec une organisation par fonctionnalités.
  • 4.3. Évaluer les indicateurs de suivi d'un projet et analyser les écarts
  • J'ai évalué l'avancement du projet en m'appuyant sur un diagramme de Gantt pour comparer le planning initial aux tâches réellement réalisées, ainsi que sur GitHub pour suivre l'évolution des fonctionnalités via les commits. Cette analyse m'a permis d'identifier les écarts entre les objectifs du MVP et les fonctionnalités développées, de prioriser certaines tâches et de réajuster le planning afin de garantir un projet fonctionnel et cohérent.

5. Mettre à disposition des utilisateurs un service informatique

  • 5.1. Réaliser les tests d'intégration et d'acceptation d'un service
  • J'ai réalisé des tests d'intégration afin de valider le bon fonctionnement des échanges entre le client JavaFX, l'API REST et la base de données (authentification, upload, versionnage, partages sécurisés).
  • 5.2. Déployer un service
  • J'ai déployé l'application CryptoVault avec l'aide d'un enseignant de la spécialisation SISR, en utilisant Docker Compose (configuration de production) pour orchestrer les différents conteneurs (PHP, MySQL). Cette collaboration SLAM/SISR m'a permis de mettre en service l'application sur un serveur accessible en ligne, avec un reverse proxy Traefik assurant le routage, la sécurisation en HTTPS (TLS) et la gestion des accès, dans un environnement proche de la production tout en garantissant l'isolation des composants et la reproductibilité de l'environnement.

6. Organiser son développement professionnel

  • 6.1. Mettre en place son environnement d'apprentissage personnel
  • J'ai mis en place un environnement de développement structuré comprenant Visual Studio Code, IntelliJ IDEA, Docker, Git/GitHub, Postman et JavaFX. Cet environnement m'a permis de développer, tester et expérimenter de nouvelles technologies de manière autonome, tout en assurant la qualité et la reproductibilité de mes réalisations.
  • 6.4. Développer son projet professionnel
  • La réalisation de projets tels que CryptoVault m'a permis de consolider mes compétences en développement back-end, en conception d'API REST et en développement de clients applicatifs. Ces expériences ont confirmé mon intérêt pour le développement logiciel et orientent mon projet professionnel vers des métiers liés à la conception et au développement d'applications sécurisées.