Paris, le 31 mars 2020
Dalibo vient de publier une nouvelle version de PostgreSQL Anonymizer qui introduit des nouvelles fonctions de pseudonymisation. L’occasion de revenir sur ce concept et en quoi il diffère de l’anonymisation.
Masquer les données de manière déterministe
En matière de protection et d’anonymisation des données sensibles, il n’existe pas règles absolues. Les règles de masquage dépendent du contexte et de la nature des données.
Dans certaines conditions, il est intéressant de masquer certaines colonnes systématiquement de la même façon.
Imaginons l’exemple ci-dessous :
# SELECT * FROM player;
player_id | firstname | lastname | score
-----------+-----------+-------------+-------
A6832 | Wilt | Chamberlain | 100
F8203 | Michael | Jordan | 69
M4804 | Jerry | West | 63
(3 rows)
Pour cacher l’identité des joueurs, on peut déclarer les deux règles de masquages suivantes :
SECURITY LABEL FOR anon ON COLUMN player.firstname
IS 'MASKED WITH FUNCTION anon.fake_first_name()';
SECURITY LABEL FOR anon ON COLUMN player.lastname
IS 'MASKED WITH FUNCTION anon.pseudo_last_name(player_id)';
Pour plus de détails sur la déclaration des règles de masquage et le masquage dynamique, rendez-vous sur la documentation de l’extension : https://postgresql-anonymizer.readthedocs.io
Les utilisateurs masqués verront les données :
# SELECT * FROM player;
player_id | firstname | lastname | score
-----------+-----------+----------+-------
A6832 | lisha | Orwin | 100
F8203 | elpidio | Cranfill | 69
M4804 | shevaun | Bekker | 63
(3 rows)
Si les utilisateurs lancent la même requête, le résultat sera différent:
player=# SELECT * FROM player;
player_id | firstname | lastname | score
-----------+-----------+----------+-------
A6832 | dubhghlas | Orwin | 100
F8203 | kristina | Cranfill | 69
M4804 | sanna | Bekker | 63
(3 rows)
On voit ici que la fonction pseudo_last_name
renvoie systématiquement la
même valeur, alors que fake_first_name
produit une valeur aléatoire à
chaque appel.
De cette manière, les données de la colonne lastname sont stables ce qui
présente certains avantages. Le problème est que la pseudonymisation
n’est pas une transformation irréversible. Si un attaquant obtient
les données masquées et la règle de pseudonymisation, alors il peut
“reconstruire” les données réelles avec des attaques par
force brute
ou par dictionnaire
.
A l’inverse, la fonction fake_first_name
est totalement aléatoire et
il est impossible de revenir à la valeur initiale à partir de la valeur
masquée.
Les données pseudonymisées restent des données personnelles !
Dès lors la pseudonymisation doit être considérée comme une méthode de protection des données sensibles, au même titre que le chiffrement des sauvegardes par exemple. C’est une technique qui peut être très pratique mais qui ne retire pas le caractère personnel des données. Le RGPD précise très clairement que : « les données à caractère personnel qui ont fait l’objet d’une pseudonymisation […] devraient être considérées comme des informations concernant une personne physique identifiable. » (source: Raison 26)
Si votre but est d’anonymiser vos données pour vos libérer des contraintes du RGPD, alors passez votre chemin, la pseudonymisation n’est pas faite pour cela. Heureusement avec l’extension PostgreSQL Anonymizer, il vous reste un large panel de fonctions de masquage : Randomisation, Généralisation, Brouillage, Redistribution, Destruction Partielle, etc.
La protection de la vie privée est désormais un enjeu majeur. Avec PostgreSQL Anonymizer, Dalibo propose une solution libre et open source pour réduire l’exposition des données sensibles. Si vous êtes également dans une démarche de mise en conformité avec le RGPD ou si vous souhaitez améliorer votre politique d’anonymisation, n’hésitez pas à nous contacter, nous pouvons vous aider !
Damien Clochard est le développeur de PostgreSQL Anonymizer, un projet Dalibo Labs.
- PostgreSQL (406) ,
- RGPD (7) ,
- anonymisation (8) ,
- masquage (3) ,
- PostgreSQL Anonymizer (13) ,
- Dalibo Labs (73)