# Registre de traitement

# Administratif

## Demandes d'adhésion

**Finalité** : traiter les demandes d'adhésion

**Base légale** : intérêt légitime

**Durée de rétention** : jusqu'à traitement par le CA (intégration au
registre des membres)

**Données concernées** : email reçu sur la liste `bureau@`

**Localisation des données** : Boîte mail du CA

**Mesures de sécurité** : Chiffrement GPG `schleuder`

## Registre des membres

**Finalité** : lister les membres de l'association, convoquer les AG

**Base légale** : intérêt légitime

**Durée de rétention** : tant que membre de l'association

**Données concernées** : identité (étatique ou pseudo), email, clef GPG,
date d'inscription, n° adhérent (uuid4)

**Localisation des données** : Wallet `pass` du CA

**Mesures de sécurité** : Chiffrement GPG

**Point d'attention** : la suppression d'un membre dans le registre
conserve par défaut l'historique du fichier dans git. Il sera nécessaire
de réécrire l'historique pour effacer définitivement les données. Le cas
se posera au 1er départ d'un membre, un script ad-hoc devra être
implémenté à cette date (éventuellement manuellement via `bfg`).

## Données bancaires

**Finalité** : récolter des financements pour l'association

**Base légale** : obligation légale (LCB-FT)

**Durée de rétention** : [6
ans](https://wise.com/fr/help/articles/2932638/combien-de-temps-conservez-vous-mes-donnees)

**Données concernées** : données bancaires (IBAN et PAN, nom et prénom, montant
et description des versements)

**Localisation des données** : services bancaires de Wise, Mollie et Infomaniak (via Checkout)

**Mesures de sécurité** : PCI-DSS & assimilé côté Wise

**Point d'attention** :

Il n'y a pas de DPA au sens strict avec Wise, parce qu'aucune banque
n'en propose en vrai... C'est moins dérangeant pour des services
bancaires étant donné la régulation déjà obligatoire du secteur

La politique de confidentialité de Wise est disponible
[ici](https://wise.com/fr/help/articles/2932697/quelle-est-votre-politique-de-confidentialite)

Le site web est relativement propre et sans tracker ni CDN (hormis un
seul appel à Cloudflare pour l'anti-bot...)

Ce choix final de Wise, manquant tout de même d'encadrement légal
vis-à-vis du RGPD, reste regrettable pour l'association mais est une des
rares solutions honorables pour tout de même permettre l'accès à une
offre bancaire. L'association aura dans tous les cas été vigilante sur
le choix de ce prestataire et le restera dans le futur. Les usagers ne
seront de toute façon pas exposés directement à Wise puisque passent par
leur banque personnel pour effectuer un virement. Les seules données
échangées relèvent donc uniquement des obligations bancaires de Wise,
limitant très fortement les problèmes de conformité.

De même pour Infomaniak/Checkout & Mollie

Des échanges sont en cours avec ces co-responsables de traitement pour tenter d’améliorer la situation.

# Conformité & risques

## Journaux HTTP

**Finalité** : répondre aux obligations légales de l'Association

**Base légale** : obligation légale

**Durée de rétention** : 15 jours (logrotate)

    # cat /etc/logrotate.d/nginx 
    /var/log/nginx/*.log {
            daily
            missingok
            rotate 14
            compress
            delaycompress
            notifempty
            create 0640 www-data adm
            dateext
            sharedscripts
            prerotate
                    if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                            run-parts /etc/logrotate.d/httpd-prerotate; \
                    fi \
            endscript
            postrotate
                    invoke-rc.d nginx rotate >/dev/null 2>&1
            endscript
    }

    # cat /etc/caddy/Caddyfile
    (logging) {
        log {
                output file /var/log/caddy/{args[0]}.access.log {
                        roll_at 00:00
                        #backup_time_format 20060102
                        backup_time_format 2006-01-02
                }
                format console
        }
    }


**Données concernées** :

-   IP
-   date
-   user agent
-   URL consultée

**Localisation des données** :

-   naboo@/var/log/nginx
-   prime@/var/log/nginx

**Mesures de sécurité** : Restriction des accès SSH

**Références** :

-   \[CNIL\] Délibération n° 2021-122 du 14 octobre 2021 portant
    adoption d'une recommandation relative à la journalisation
    <https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000044272396>

NB : ~~l'Association utilisait initialement
[Caddy](https://caddyserver.com/) mais qui ne propose pas d'option
gérant correctement la purge des journaux. Les services ont été migrés
sous Nginx en espérant [une correction côté
Caddy](https://github.com/caddyserver/caddy/issues/1096#issuecomment-1758204568).
Ce changement a fait l'objet d'une inscription au registre des
violations ci-dessous.~~

Une PR a été proposée au projet et est dorénavant intégrée à Caddy  
https://github.com/caddyserver/caddy/pull/7244

## Journalisation Flarum

**Finalité** : répondre aux obligations légales de l'Association

**Base légale** : obligation légale

**Données concernées** : adresse IP, date

**Durée de rétention** : 15 jours

Extension Flarum pour anonymiser les IP passé la durée de rétention
<https://git.imirhil.fr/aeris/flarum-anonymize-ip>

## Sauvegarde

**Finalité** : assurer la reprise d'activité en cas d'incident
d'exploitation sur la production

**Base légale** : intérêt légitime

**Durée de rétention** : 1 an

**Localisation des données** :

-   endor@/mnt/backup/snapshots/asso-purr.eu.org/
-   endor@/mnt/backup/plakar/
-   2 disques externes en rotation
-   Stockage S3 Scaleway

**Mesures de sécurité** :

-   Double chiffrement borgbackup
    -   chiffrement AES256 AEAD
    -   clef privée protégée par un mot de passe haché par blake2
    -   clef privée et mot de passe exclusivement détenus par les
        administrateurs de l'Association

-   Chiffrement natif Plakar

NB : les données envoyées chez Scaleway étant chiffrés et sans accès à
cette clef par ce sous-traitant, celui-ci ne rentre pas dans le cadre du
RGPD et ne nécessite donc pas de signature de DPA

# Fourniture de service

## Forgejo

**Finalité** : héberger le code-source des outils développés

**Base légale** : intérêt légitime

**Durée de rétention** : sans limite, anonymisation possible sur demande
dans la mesure de ce que git permet

**Données concernées** :

-   nom / prénom / alias
-   alias

**Localisation des données** :

-   <https://git.asso-purr.eu.org/>
-   prime@/srv/forgejo
-   naboo@postgresql:purr_forgejo

## Firefish

**Finalité** : communiquer avec les utilisateurs

**Base légale** : intérêt légitime

**Durée de rétention** : illimité, le logiciel ne permettant pas
facilement la purge des données

**Données concernées** :

-   nick handle (compte@instance.fqdn)
-   contenu des toots
-   message privé

**Localisation des données** : prime@postgres:firefish

**Mesures de sécurité** : restriction des accès administrateur, 2FA
activée

NB : l'Association utilisait initialement Mastodon via l'instance
<https://piaille.fr>. Mastodon ne permet actuellement pas d'identifier
tous les usages fait par un administrateur, n'ayant pas de
journalisation y compris en lecture seule des actions de modération, ce
qui ne permet pas d'être réellement conforme RGPD, d'autant plus dans le
cas d'une sous-traitance (aucun contrôle sur les actions de modération
de modérateurs tiers). Il aurait été de plus difficile de signer un DPA
conforme avec Piaille et de procéder aux audits annuels nécessaires à
être conforme RGPD. Il a donc été décidé d'auto-héberger une instance
directement par l'Association

## Flarum

**Finalité** : communiquer entre utilisateurs

**Base légale** : consentement

**Données concernées** :

-   nom / prénom / alias
-   adresse email
-   contenu des messages

**Durée de rétention** :

-   tant qu'un compte est actif (les utilisateurs peuvent supprimer
    eux-même leur compte)
-   anonymisation des données du compte (login, mdp...) après 12 mois
    d'inactivité (vérification bi-annuelle)
-   la suppression des posts sera faite en « best effort » au
    cas-par-cas en cas de demande (pour ne pas trop casser les fils)

**Localisation des données** :

-   naboo@mariadb:purr_flarum
-   prime:/srv/flarum/public/assets/avatars
-   prime:/srv/flarum/storage

**Mesures de sécurité** :

-   Activation obligatoire de la 2FA pour les admins et modérateurs
-   Suppression des appels tiers Google Fonts [présents à l'origine dans
    les
    sources](https://github.com/flarum/framework/blob/2b56129d70d18686a73d044ff65b418eef83f388/framework/core/views/install/app.php#L10)
-   Désactivation de la présence en ligne par défaut et de l'indexation
    du profil (non documenté ?)

<https://github.com/flarum/framework/blob/2.x/framework/core/src/User/UserServiceProvider.php#L124-L125>

    User::registerPreference('discloseOnline', 'boolval', false);
    User::registerPreference('indexProfile', 'boolval', false);

-   Isolation des pages d’administration derrière le VPN

```
server {
  server_name forum.asso-purr.eu.org;
  location /admin { deny all; }
}

server {
  server_name forum.priv.asso-purr.eu.org;
  ssl_client_certificate /etc/ssl/private/org.eu.asso-purr.ca.crt;
  ssl_verify_client on;
  allow 100.64.0.0/16;
  allow fd7a:115c:a1e0::/48;
  deny all;
}
```

## IRC libera.chat

**Finalité** : Communiquer avec les utilisateurs

**Base légale** : consentement

**Politique de confidentialité** : <https://libera.chat/privacy/>

**Données concernées** : adresse IP, nick

Cas intéressant, la plupart des personnes concernées risquent d'être
déjà sur Libera pour d'autres raisons, l'usage par PURR ne traite «
théoriquement » pas plus de DCP. Les utilisateurs d'IRC étant souvent
déjà informés que tout y est plus ou moins public, l'association le
rappelant en plus à côté de tout lien amenant au canal de l'association.
Libera est en no-log côté IRC, constitue un réseau réputé, avec une
privacy policy très correcte. En attendant peut-être à terme
l'auto-hébergement d'un service IRC par l'association (ce qui pourrait
être aussi un frein à l'adoption de ce moyen de communication, joindre
un réseau spécifique étant plus rebutant que de joindre un canal
supplémentaire sur un réseau important), il est considéré que ce service
est suffisament conforme et de plus non critique pour ne pas nécessiter
de formalisation de DPA avec Libera, sinon veiller à l'actualité du
réseau pour être informé en cas de problème. Nos utilisateurs ont
suffisamment d'autres moyens simples et accessibles à disposition
(Fediverse, adresse de courriel avec GPG implicite et explicite...) pour
pouvoir considérer que l'usage de Libera se fait sous le régime du
consentement, le refus d'utiliser IRC ne conduisant pas à d'effet
négatif (autre que de ne pas pouvoir joindre IRC, bien entendu).

## Dokuwiki

**Finalité** : documenter la vie de l'Association

**Base légale** : intérêt légitime

**Durée de rétention** : illimité, anonymisation si possible sur demande

**Données concernées** :

-   nom d'utilisateur, mot de passe
-   contenu et date des pages éditées

**Localisation des données** : prime@/srv/dokuwiki

**Mesures de sécurité** : restriction des accès administrateur

## Mattermost

**Finalité** : s’inscrire sur le Mattermost

**Base légale** : consentement

**Durée de rétention** : purge du compte à la suppression

**Données concernées** : email, pseudo, mot de passe

**Localisation des données** : naboo@postgres:purr_mattermost

---

**Finalité** : communiquer en interne

**Base légale** : intérêt légitime

**Durée de rétention** : best effort (contacter Mattermost pour voir pour la data retention sur les chans critiques)

**Données concernées** : contenu des posts

**Localisation des données** : naboo@postgres:purr_mattermost

**Mesures de sécurité** :
- restriction des accès administrateur
- 2FA
- (mTLS envisagé, actuellement non supporté par le client desktop)

## Bookstack

**Finalité** : documenter la vie de l'Association

**Base légale** : intérêt légitime

**Durée de rétention** : illimité, anonymisation si possible sur demande

**Données concernées** :

-   nom d'utilisateur, mot de passe
-   contenu et date des pages éditées

**Localisation des données** :

- prime@/srv/bookstack
- naboo@mysql:purr_bookstack

**Mesures de sécurité** :

- restriction des accès administrateur
- désactivation de Gravatar (`AVATAR_URL=false`)
- désactivation des services tiers (`DISABLE_EXTERNAL_SERVICES=true`)
- retrait des exceptions CSP des services tiers (`ALLOWED_IFRAME_SOURCES=`)
- réduction de la précision des logs IP (`IP_ADDRESS_PRECISION=2`)
- isolation des pages d’admin derrière le VPN

```
server {
  server_name wiki.asso-purr.eu.org;
  location /settings { deny all; }
}

server {
  server_name wiki.priv.asso-purr.eu.org;
  ssl_client_certificate /etc/ssl/private/org.eu.asso-purr.ca.crt;
  ssl_verify_client on;
  allow 100.64.0.0/16;
  allow fd7a:115c:a1e0::/48;
  deny all;
}
```

## Hedgedoc

**Finalité** : organiser la rédaction collaborative de contenu

**Base légale** : intérêt légitime

**Durée de rétention** : destruction à la fin de la préparation

**Données concernées** :

-   contenu et date des pages éditées

---

**Finalité** : créer un compte

**Base légale** : consentement

**Durée de rétention** : suppression des données par l’utilisateur

**Données concernées** :

-   email, mot de passe

**Localisation des données** :

- prime@/srv/hedgedoc/public/uploads
- naboo@postgres:purr_hedgedoc

**Mesures de sécurité** : 

- activation du TLS sur la connection à la base

```
# git diff lib/config/default.js 
diff --git a/lib/config/default.js b/lib/config/default.js
index f7df8f99e..8922fcf2a 100644
--- a/lib/config/default.js
+++ b/lib/config/default.js
@@ -38,7 +38,11 @@ module.exports = {
   forbiddenNoteIDs: ['robots.txt', 'favicon.ico', 'api', 'build', 'css', 'docs', 'fonts', 'js', 'uploads', 'vendor', 'views'],
   defaultPermission: 'editable',
   dbURL: '',
-  db: {},
+  db: {
+    dialectOptions: {
+      ssl: { require: true, rejectUnauthorized: true, ca: fs.readFileSync('/etc/ssl/certs/postgresql.crt').toString(), }
+    }
+  },
   // ssl path
   sslKeyPath: '',
   sslCertPath: '',
```

- désactivation des services tiers

```
"csp": {
  "enable": true,
  "directives": {
    "defaultSrc": ["'none'"],
    "styleSrc": ["'self'", "'unsafe-inline'"],
    "scriptSrc": ["'self'"],
    "imgSrc": ["'self'"],
    "fontSrc": ["'self'"],
    "connectSrc": ["'self'"]
  },
  "upgradeInsecureRequests": "auto",
  "addDefaults": false,
  "addDisqus": false,
  "addGoogleAnalytics": false
},
"allowGravatar": false,

```

## DNS

**Finalité** : héberger la zone DNS de l'association

**Base légale** : intérêt légitime

**Durée de rétention** : aucune

**Données concernées** :

-   adresse IP des entités demandant une résolution du nom de domaine
-   requête DNS effectué

**Localisation des données** :

-   dnsdist : naboo (sous-traitant aeris)
-   ns1 : prime

**Mesures de sécurité** : restriction des accès administrateur

NB : À noter que les IP traitées ne sont pas stockées et ne sont pour la
plupart que des IP de FAI servant de résolveurs cache pour leurs propres
clients. Cependant ce n'est pas supposé être le cas dans le
fonctionnement nominal d'Internet et l'association devrait voir ici des
IP de personnes physiques, donc des DCP. L'association ne pouvant
qu'encourager toute personne concernée à utiliser un résolveur
DNS local, par exemple pour supporter proprement DNSSec, l'hébergement
d'une zone DNS est donc considéré comme un traitement de DCP, aucune
information n'est persistée sur disque (pas de log).

NB : l'hyperviseur hébergeant la machine virtuel de l'association
recourt à dnsdist pour propager les requêtes en IPv4 au serveur de
l'association


# Signature des lettres ouvertes

## Signature

**Finalité** : Faire signer des lettres ouvertes

**Base légale** : consentement

**Durée de rétention** : 6 mois passé la remise de la lettre ouverte

**Données concernées** :

- identité, qualité, adresse email

**Localisation des données** :

- naboo@postgresql:purr_demarches

## Déduplication et vérication

**Finalité** : Détecter d’éventuel doublon ou abus

**Base légale** : intérêt légitime

**Durée de rétention** : 6 mois passé la remise de la lettre ouverte

**Données concernées** :

- adresse IP, user agent

**Localisation des données** :

- naboo@postgresql:purr_demarches

# Collecte des plaintes CNIL

## Authentification auprès de la CNIL

**Finalité** : Pouvoir se connecter au site de la CNIL pour en extraire les plaintes du plaignant

**Base légale** : consentement

**Durée de rétention** : suppression dès la fin de la collecte des plaintes

**Données concernées** : adresse email et mot de passe CNIL

**Localisation des données** : prime@redis/2

**Mesure de sécurité** :

- Chiffrement CHACHA20_POLY1305 des données via un HSM Vault avec une rotation de clef à 1 journée

[![](https://wiki.asso-purr.eu.org/uploads/images/gallery/2024-10/scaled-1680-/image-1729721413493.png)](https://wiki.asso-purr.eu.org/uploads/images/gallery/2024-10/image-1729721413493.png)

- Token Vault dédié pour le déchiffrement, effectué dans un processus séparé non exposé sur Internet

[![](https://wiki.asso-purr.eu.org/uploads/images/gallery/2024-10/scaled-1680-/image-1729721456082.png)](https://wiki.asso-purr.eu.org/uploads/images/gallery/2024-10/image-1729721456082.png)


## Conservation des données collectées

**Finalité** : conserver les données collectées pour analyses manuelles

**Base légale** : consentement

**Durée de rétention** :

- maximum 1 an, jusqu’à retrait du consentement ou fin d’utilité des données
- une fiche synthétique (responsable de traitement, résumé du cas, décision obtenue…) anonymisée est conservée à des fins d’archivage et de statistiques pour des usages ultérieurs (recroisement des responsables de traitement concernées, identification d’antécédents sur une nouvelle plainte, statistiques des problèmes rencontrés, etc)

**Données concernées** : archive Extracnilator contenant les plaintes effectuées auprès de la CNIL

**Localisation des données** : 

- initialement sur prime@/srv/demarches/tmp/archives
- dès disponibilité d’un administrateur ayant les accès requis, mise hors ligne des données sur disque chiffré externe

**🚨🚨🚨 Données possiblement sensibles au sens article 9🚨🚨🚨** :

- les données collectées peuvent révéler les habitudes de vie des personnes concernées ayant du saisir la CNIL, les applications mobiles utilisées, leurs banques, la presse ou sites Internet consultés, etc
- dans tous les cas, données sensibles (hors article 9) puisque liés à des contentieux juridiques et administratifs, contenant l’identité d’agent de la CNIL

**Mesures de sécurité** :

Les données sont chiffrées avec les clefs GPG des administrateurs de l’association et mis hors réseau dès que possible (extraction au minimum hebdomadaire)

Le répertoire de stockage temporaire des archives n’est lui-même accessible que du processus d’extraction (non exposé sur Internet) et des administrateurs (`chown demarches-sidekiq: && chmod u=rwX,og=`)

Les données brutes ne peuvent être accéder que par eux seuls, et une analyse préliminaire des données sera réalisée pour jauger de la sensibilité de celles-ci avant communication aux équipes d’analyse, avec anonymisation éventuelle si nécessaire

Les équipes d’analyse ne peuvent être constituées que de personnes ayant approuvé la [Charte d’assistance aux personnes concernées](https://wiki.asso-purr.eu.org/books/conformite/page/charte-dassistance-aux-personnes-concernees) et soumis à un encadrement strict

# Signature qualifiée

Outil utilisé : [Documenso](https://github.com/documenso/documenso)

**Localisation des données** :

-   prime@postgresql:documenso

**Mesures de sécurité** :

-   désactivation de la télémétrie au build (`NEXT_TELEMETRY_DISABLED`
    et `TURBO_TELEMETRY_DISABLED`)
-   restriction de l'API et des interfaces administrateurs sur
    l'instance public

-   seconde instance administration Documenso branchée sur la même base
    de donnée
    -   accès restreint par VPN
    -   authentification par certificat
    -   authentification TOTP

```
server {
  server_name sign.asso-purr.eu.org;
  location / { deny all; }
  location /api/ {
    allow ::1;
    allow 127.0.0.1;
    deny all;
    try_files $uri @app;
  }

  location ~ /(_next/static/|sign/|pdf.worker.min.js) {
    try_files $uri @app;
  }
}

server {
  server_name sign.priv.asso-purr.eu.org;
  ssl_client_certificate /etc/ssl/private/org.eu.asso-purr.ca.crt;
  ssl_verify_client on;
  allow 100.64.0.0/16;
  allow fd7a:115c:a1e0::/48;
  deny all;
}
```

## Signature d'un documents

**Finalité** : Permettre la signature électronique de documents

**Base légale** : consentement

**Durée de rétention** : sauf mention contraire, 6 mois passé la fin de
validité du document signé

**Données concernées** :

-   nom de l'utilisateur
-   email
-   date de signature
-   document signé

## Preuve de signature

**Finalités** :

- S'assurer de l'identité du signataire
- S'assurer de l’unicité du signataire

**Base légale** : intérêt légitime

**Durée de rétention** : sauf mention contraire, 6 mois passé la fin de
validité du document signé

-   user agent
-   adresse IP
-   document signé

# Signature & collecte des mandats

**Finalité** : Faire signer des mandats de représentation

**Base légale** : nécessaire à la fourniture du service

**Durée de rétention** : durée de traitement du dossier

**Données concernées** :

-   nom, prénom
-   adresse email
-   mandat
-   justificatif d’identité (imposé par la CNIL)

**Localisation des données** :

-   liste de diffusion @procedures pour transmission à l’association
-   fichier de suivi des plaintes

**Mesure de sécurité** :

- chiffrement GPG de @procedures
- chiffrement E2E [AGE](https://github.com/FiloSottile/age) des justificatifs d’identité
- stockage sur machine sécurisée du fichier de suivi, mandat et justificatif (disque chiffré, machine non accessible de l’extérieur, préconisation de sécurité standard/ANSSI, conteneur [VeraCrypt](https://veracrypt.io) dédié)

# Reçus fiscaux

**Finalité** : Délivrer des reçus fiscaux

**Base légale** : Obligation légale

**Durée de rétention** : 3 ans

**Localisation des données** :

- Nextcloud

**Mesure de sécurité** : 

- 2FA
- Authentification par certificat
- Chiffrement Nextcloud
- FDE