Analyse d'impact relative à la protection des données
Cette page est l'analyse d'impact relative à la protection des données (AIPD) de BlockLucky, prévue par l'article 35 du RGPD. Elle suit la méthode de la CNIL en quatre temps : description du traitement, nécessité et proportionnalité, appréciation des risques sur la vie privée, puis plan d'action. Elle s'appuie sur le code du dépôt et sur les pages RGPD, Registre des traitements, Registre des risques et la partie Sécurité. C'est une version de travail, rédigée par l'équipe projet : l'avis du DPO reste à recueillir avant toute exploitation réelle. Elle ne constitue pas un avis juridique.
#Pourquoi une AIPD
Le traitement réunit plusieurs critères des lignes directrices du CEPD et de la liste de la CNIL :
| Critère |
Situation dans BlockLucky |
| Usage innovant d'une technologie |
Inscription des participations sur une blockchain, portefeuille intégré conservé par le service |
| Données à caractère hautement personnel |
Photos du recto et du verso de la pièce d'identité, examinées par un agent |
| Données publiques et immuables |
Adresses, montants et événements visibles par tous sur un réseau public de test, impossibles à effacer |
| Personnes potentiellement nombreuses |
Objectif de 10 000 participants pour un service communal |
| Croisement de données |
Mesure d'audience rattachée au compte, lien entre compte et adresse de portefeuille |
Deux critères suffisent en général à rendre l'analyse obligatoire. La question était ouverte sous le numéro DPO-7 dans Points à valider.
#1. Description du traitement
#Responsable et périmètre
| Élément |
Contenu |
| Responsable de traitement |
Ville d'EtherBay (collectivité fictive du scénario pédagogique), Direction des Systèmes d'Information, 1 place de la Mairie, 00000 EtherBay |
| Délégué à la protection des données |
dpo@etherbay.fr |
| Appui technique |
Équipe BlockLucky (Epitech Digital School) |
| Interfaces |
Frontend web (frontend-web), application mobile (mobile-app), API (backend), contrat (smart-contract) |
| Hébergement de la démonstration |
Microsoft Azure (Microsoft Ireland Operations Limited), machine virtuelle en région Danemark Est, domaine etherbay.tech |
| Hors périmètre |
Site de l'Office de Tourisme, qui ne transmet aucune donnée à un serveur |
#Finalités
Tirage au sort citoyen gratuit en ETH de test, programme de fidélité EtherPoints avec des commerçants partenaires, cadeau et parrainage, vérification de l'âge, assistance, sécurité des comptes et mesure d'audience. Le détail par traitement figure dans le registre des traitements.
#Données et cycle de vie
| Étape |
Données |
Support |
Durée |
| Inscription et connexion |
Email, empreinte bcrypt du mot de passe (mobile), connexion Google éventuelle, code temporaire, tranche d'âge et majorité déclarées (web) |
PostgreSQL, Redis |
Codes 10 minutes ; compte pour la durée du pilote |
| Paramètres |
Prénom et nom facultatifs, préférences d'affichage, catégories de notifications |
PostgreSQL, Redis |
Durée du compte |
| Vérification de l'âge |
Photos recto et verso de la pièce, statut, dates, motif d'un refus, agent |
Table IdentityDocument (images chiffrées AES-256-GCM), User, journal d'administration |
Photos effacées à la décision ; statut pour la durée du compte |
| Portefeuille |
Adresse, clé privée chiffrée, hash de la dotation |
PostgreSQL ; adresse sur la chaîne |
Clé détruite à l'effacement ; adresse publique sans limite |
| Participation |
Un ticket par tour, hash de transaction, adresse payeuse, gain ou remboursement |
PostgreSQL et chaîne |
Durée du pilote ; sur la chaîne sans limite |
| Fidélité |
Points, récompenses, codes promo |
PostgreSQL |
Durée du compte puis rattachement à l'identifiant anonymisé |
| Cadeau |
Email du bénéficiaire, message, lien de parrainage |
PostgreSQL |
Comme le compte |
| Assistance |
Objet, message, email, prénom et nom |
Email vers SUPPORT_EMAIL, aucune copie en base |
Selon la messagerie de la Mairie |
| Mesure d'audience web |
Type d'événement, source UTM, page, identifiant du compte connecté |
localStorage après consentement, table Analytics |
Choix 6 mois sur l'appareil ; 13 mois au plus côté serveur (purge à implémenter) |
| Journaux |
Journal d'administration, journaux techniques |
Table Analytics, sortie du serveur |
1 an pour le journal d'administration ; journaux techniques à fixer |
#Supports
API Express, PostgreSQL, Redis, files BullMQ, serveur SMTP, nœud RPC Ethereum (Hardhat en local, Sepolia s'il est déployé), stockage local du navigateur et stockage sécurisé du téléphone. L'architecture est décrite dans Vue d'ensemble.
#2. Nécessité et proportionnalité
#Principes
| Principe |
Appréciation |
Écart restant |
| Finalités déterminées |
Chaque traitement a une finalité inscrite au registre |
Aucun |
| Base légale |
Exécution des conditions et du règlement ; intérêt légitime pour la sécurité ; consentement pour la mesure d'audience web depuis le bandeau |
Base de la vérification d'âge et du compte créé pour le bénéficiaire d'un cadeau à valider (DPO-1, DPO-2, DPO-12) |
| Minimisation |
Aucune donnée bancaire ; date de naissance et numéro de pièce non saisis ; email jamais publié sur la chaîne |
La photo de la pièce montre toutes ses mentions ; une solution de vérification d'âge sans transmission d'identité serait moins intrusive (JUR-14) |
| Exactitude |
Rectification du prénom, du nom et de l'email dans l'application mobile |
Pas d'écran de rectification sur le web |
| Durées limitées |
Codes, jetons et photos effacés automatiquement |
Purges des comptes, de l'audience et des journaux non implémentées (DPO-4) |
#Droits des personnes
| Droit |
Mise en œuvre |
| Information |
Politique de confidentialité, politique relative aux traceurs, conditions et règlement, publiés sur le web et dans l'application (/confidentialite, /traceurs, écran Informations légales) |
| Consentement |
Bandeau ConsentBanner.tsx avec « Tout refuser » et « Tout accepter » au même niveau ; retrait par « Gérer mes traceurs » ; aucune origine de visite ni aucun événement de mesure avant accord (frontend-web/src/lib/consent.ts) |
| Accès et portabilité |
Export JSON en libre-service (GET /api/user/gdpr/export) ; export incomplet pour les données Redis (DPO-9) |
| Effacement |
Demande puis confirmation par email valable 24 heures ; anonymisation de la fiche du compte ; traces pseudonymes conservées (DPO-5) |
| Opposition et limitation |
Demande au DPO ; retrait du consentement en un clic pour la mesure web |
| Intervention humaine |
Le tirage est automatisé ; examen humain sur demande à support@etherbay.fr ; la vérification d'âge est une décision humaine |
#Sous-traitants et transferts
Hébergeur (Microsoft Azure, Union européenne), fournisseur SMTP et fournisseur RPC à désigner par contrat (DPO-11). Google intervient seulement si la personne choisit cette connexion. Les adresses pseudonymes inscrites sur un réseau public sont répliquées dans le monde entier (DPO-6).
#3. Risques
L'échelle suit la méthode de la CNIL : gravité et vraisemblance de 1 (négligeable) à 4 (maximale). La cotation tient compte des mesures déjà présentes dans le dépôt. Elle est une proposition à valider par le DPO.
#Accès illégitime à des données
| Élément |
Analyse |
| Sources de risque |
Attaquant externe, agent de la Mairie qui outrepasse ses droits, compte administrateur compromis, prestataire |
| Menaces |
Fuite de la base ou d'une sauvegarde, vol de ENCRYPTION_KEY, consultation abusive des pièces d'identité, recoupement d'une adresse publique avec une personne, lecture d'un jeton dans un journal ou une URL |
| Données les plus sensibles |
Photos de pièce d'identité en attente, clés privées chiffrées, email |
| Impacts |
Usurpation d'identité à partir de la pièce, hameçonnage ciblé, perte des fonds de test, révélation de la participation d'une personne |
| Mesures existantes |
Chiffrement AES-256-GCM des pièces et des clés, rôle ADMIN avec double authentification, journalisation de chaque consultation de pièce, effacement des photos à la décision, mots de passe hachés, limites de débit, révocation des sessions (voir Cryptographie et secrets, Autorisations, Protection des API) |
| Gravité |
3 (importante), en raison des pièces d'identité |
| Vraisemblance |
2 (limitée) |
#Modification non désirée de données
| Élément |
Analyse |
| Sources de risque |
Attaquant externe, opérateur disposant des rôles du contrat, propriétaire VRF du contrat |
| Menaces |
Tirage manipulé par remplacement du coordinateur VRF, annulation ciblée d'un tour, altération d'une décision sur l'âge, double achat |
| Impacts |
Perte de confiance dans le tirage, exclusion injustifiée d'un participant, gain attribué à tort |
| Mesures existantes |
Chainlink VRF sur Sepolia, coordinateur simulé et signalé comme tel en local, événements publics du contrat, unicité d'un ticket par participant, idempotence côté serveur, décision d'âge journalisée, charte de transparence qui distingue les environnements |
| Gravité |
2 (limitée) : gains sans valeur monétaire |
| Vraisemblance |
2 (limitée) ; le transfert de propriété VRF est implémenté dans les scripts de déploiement mais pas encore exécuté sur Sepolia, où rien n'est déployé (SC8, DSI-1) |
#Disparition de données
| Élément |
Analyse |
| Sources de risque |
Panne, erreur d'exploitation, perte d'un secret |
| Menaces |
Perte de la base ou de Redis, rotation ou perte de ENCRYPTION_KEY rendant les portefeuilles inutilisables, effacement irréversible demandé par erreur |
| Impacts |
Perte de l'historique et des points, portefeuilles inaccessibles, gains en attente perdus |
| Mesures existantes |
Sauvegardes prévues (Sauvegardes et reprise), la chaîne fait foi et permet de reconstruire les participations, confirmation par email de toute suppression, fonds fictifs |
| Gravité |
2 (limitée) |
| Vraisemblance |
2 (limitée) ; aucun outil de re-chiffrement (DSI-3) |
#Synthèse
| Risque |
Gravité |
Vraisemblance |
Niveau |
| Accès illégitime |
3 |
2 |
À réduire en priorité |
| Modification non désirée |
2 |
2 |
Acceptable pour une démonstration, à réduire avant une exploitation |
| Disparition |
2 |
2 |
Acceptable pour une démonstration |
#4. Mesures prévues et plan d'action
| N° |
Mesure |
Risque réduit |
Responsable |
État |
| A1 |
Bandeau de consentement web, blocage de l'origine de visite et des événements de mesure avant accord, retrait en un clic |
Accès illégitime (audience) |
Équipe front |
Fait |
| A2 |
Textes publics complets : CGU, règlement, mentions légales, confidentialité, traceurs, charte, sur le web et le mobile |
Information des personnes |
Équipe |
Fait |
| A3 |
Délai maximal de conservation d'une pièce d'identité jamais traitée, avec purge automatique |
Accès illégitime |
Équipe backend |
À faire |
| A4 |
Rôle dédié aux agents habilités à consulter les pièces, distinct d'ADMIN |
Accès illégitime |
DSI |
À décider (DSI-8) |
| A5 |
Purges planifiées des comptes inactifs, des événements d'audience de plus de 13 mois, du journal d'administration de plus d'un an et des jetons expirés |
Accès illégitime |
Équipe backend |
À faire |
| A6 |
Effacement des données Redis et de Ticket.payerWallet à l'anonymisation, après avis du DPO |
Accès illégitime |
Équipe backend |
À décider (DPO-5) |
| A7 |
Transfert de la propriété VRF à un multisig de la Mairie |
Modification non désirée |
DSI |
Implémenté dans deploy-sepolia.ts (transferOwnership puis acceptOwnership par le multisig) ; à exécuter au déploiement Sepolia (DSI-1) |
| A8 |
Outil de re-chiffrement et sauvegarde séparée de ENCRYPTION_KEY |
Disparition |
DSI |
À faire (DSI-3) |
| A9 |
Contrats de sous-traitance (hébergeur, SMTP, RPC) |
Accès illégitime |
Mairie |
À faire (DPO-11) |
| A10 |
Invitation suivie d'une acceptation pour le bénéficiaire d'un cadeau, au lieu de la création d'un compte à son insu |
Information des personnes |
Équipe backend |
À décider (DPO-2) |
| A11 |
Étude d'une vérification d'âge sans transmission de l'identité |
Accès illégitime |
Mairie |
À étudier (JUR-14) |
Les mesures A3, A5 et A7 conditionnent un déploiement public sur Sepolia avec de vrais participants.
#5. Avis du DPO
| Rubrique |
Contenu |
| Avis du DPO |
À recueillir |
| Date |
|
| Décision du responsable de traitement |
À rendre après l'avis |
| Consultation préalable de la CNIL |
Nécessaire seulement si des risques élevés subsistent après les mesures prévues |
| Révision |
À chaque nouvelle donnée collectée, avant un déploiement sur Sepolia et après tout incident |