Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Pseudonymisation et anonymisation

Après cette leçon: Je peux pseudonymiser des données et juger si le résultat est anonyme.

Leçon de 60 min8 commandesLab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Un code remplace le nom : est-ce anonyme ?

La pseudonymisation remplace les identifiants directs d'une personne par un code. L'anonymisation va plus loin : plus personne ne peut retrouver la personne. La différence compte, car des données pseudonymisées restent des données personnelles.

Cette leçon vous apprend à remplacer des identifiants, puis à juger honnêtement si le résultat est anonyme.

À la fin de cette leçon

Remarque

Je peux pseudonymiser des données et juger si le résultat est anonyme.

Mots clés

MotCe que ça veut direExemple
Pseudonymisationremplacer un identifiant direct par un code
Anonymisationrendre impossible de retrouver la personne
Empreinteun texte fixe calculé à partir d'une donnée, sans retour possibleSHA2
Selun texte secret ajouté avant de calculer l'empreinte
Généralisationremplacer une valeur précise par une plus largedate → année
Petit groupeun groupe de une ou deux personnes

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Pseudonymiser, c'est remplacer l'identifiant par un code

On retire le nom, le courriel et le téléphone, et on met à la place un code : C001, C002 ou une empreinte.

Les lignes restent reliées entre elles. On peut compter, trier et suivre une personne dans le temps sans savoir qui elle est.

Mais la personne reste retrouvable pour qui détient la table de correspondance. Les données restent donc personnelles.

Fabriquer des codes dans le laboratoire

Lancez les deux premiers Runs pour préparer le terminal. Le troisième remplace l'identifiant de trois clients par un code numéroté.

Les deux derniers calculent des empreintes SHA2. La première mesure leur longueur. La seconde vérifie que la même entrée donne toujours la même empreinte.

Accepter le certificat du serveur

Commande
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nom court pour la boutique

Commande
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Remplacer l'identifiant par un code

Commande
sql "SELECT CONCAT('C', LPAD(id, 3, '0')) AS pseudo, city FROM customers ORDER BY id LIMIT 3"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

La longueur d'une empreinte

Commande
sql "SELECT LENGTH(SHA2('abc', 256)) AS longueur"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Même entrée, même empreinte

Commande
sql "SELECT SHA2('abc', 256) = SHA2('abc', 256) AS meme_entree, SHA2('abc', 256) = SHA2('abd', 256) AS entree_modifiee"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : trois façons de remplacer un identifiant

MéthodeExempleLe risque
Code numérotéC001La table de correspondance retrouve tout
Empreinte seule64 caractèresOn calcule celle de chaque courriel connu et on compare
Empreinte avec sel64 caractèresSi le sel est volé, le risque revient

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un petit groupe désigne une personne

Même sans identifiant direct, une personne seule dans son groupe est reconnaissable. Il suffit qu'on connaisse sa ville et son année d'inscription.

La généralisation réduit ce risque. On remplace une date par une année, ou une ville par un pays. Les groupes grossissent.

Les trois Runs comptent les clients seuls de leur groupe, de moins en moins précis.

Les villes qui n'ont qu'un client

Commande
sql "SELECT city, COUNT(*) AS n FROM customers GROUP BY city HAVING n < 2 ORDER BY city"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Seuls par ville et année

Commande
sql "SELECT COUNT(*) AS seuls FROM (SELECT 1 FROM customers GROUP BY city, YEAR(joined_on) HAVING COUNT(*) = 1) AS t"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Seuls par pays et année

Commande
sql "SELECT COUNT(*) AS seuls FROM (SELECT 1 FROM customers GROUP BY country, YEAR(joined_on) HAVING COUNT(*) = 1) AS t"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : plus on généralise, moins on isole

Colonnes gardéesClients seuls de leur groupeSur 40 clients
Ville et mois d'inscription30Trois sur quatre
Ville et année d'inscription10Un sur quatre
Pays et année d'inscription1Un seul
Pays seul0Aucun

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent qu'un code à la place du nom rend les données anonymes. Ce n'est pas le cas : la table de correspondance, ou le croisement des autres colonnes, retrouve la personne. Les données ne sont anonymes que si personne ne peut plus la retrouver.

À vous : une empreinte avec un sel

Code: python
import hashlib

def pseudonyme(courriel, sel):
    # Le sel est ajouté avant le calcul de l'empreinte.
    texte = sel + courriel
    return hashlib.sha256(texte.encode("utf-8")).hexdigest()[:12]

print(pseudonyme("[email protected]", "grain-secret"))
print(pseudonyme("[email protected]", "grain-secret"))
print(pseudonyme("[email protected]", "autre-grain"))
# Les deux premières lignes sont identiques : même courriel, même sel.
# À vous : changez le sel de la première ligne et comparez.

À propos de ce labo et de sa source: Lab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.