Vie privée et localisation
Votre smartphone sait où vous êtes en permanence. Qui d'autre a accès à ces informations ? Découvrez les enjeux de la vie privée et de la localisation.
Objectifs du cours
- Comprendre les enjeux de vie privée liés à la localisation
- Connaître les données collectées par les applications
- Découvrir le cadre légal : RGPD et consentement
- Savoir comment protéger sa vie privée
- Identifier les risques du tracking de localisation
Erreurs courantes à éviter
- Penser que désactiver le GPS suffit (Wi-Fi et 4G localisent aussi)
- Croire que le mode avion empêche toute localisation
- Ne pas lire les autorisations demandées par les applications
- Partager sa position sans réfléchir aux conséquences
**Votre smartphone : un mouchard dans votre poche**
Votre téléphone collecte et partage continuellement des données sur votre position.
📍 **Types de données collectées**
**1. Position GPS précise** : • Latitude, longitude, altitude • Précision : 3-5 mètres • Horodatage (date et heure) • Disponible même hors connexion
**2. Historique de localisation** : • **Tous** vos déplacements enregistrés • Google Timeline, Apple Localisation significative • Lieux fréquentés (domicile, travail, commerces) • Heures d'arrivée et de départ
**3. Métadonnées de localisation** :
📸 **Photos** : • Coordonnées GPS intégrées (EXIF) • Date et heure de la prise de vue • Partagées involontairement sur les réseaux sociaux
📱 **Connexions réseau** : • Antennes 4G/5G connectées (triangulation) • Réseaux Wi-Fi à proximité • Adresses Bluetooth détectées
🏢 **Check-ins et lieux** : • Restaurants visités • Magasins fréquentés • Événements auxquels vous avez participé
🚗 **Trajets** : • Itinéraires empruntés • Vitesse de déplacement • Mode de transport (voiture, bus, marche)
**Qui collecte ces données ?**
📱 **Systèmes d'exploitation** : • **Google (Android)** : Google Maps Timeline • **Apple (iOS)** : Localisation significative • Collectent même si vous n'utilisez pas de GPS
📲 **Applications** : • Réseaux sociaux (Facebook, Instagram, Snapchat) • GPS et navigation (Waze, Google Maps) • Livraison (Uber Eats, Deliveroo) • Fitness (Strava, Nike Run Club) • Jeux (Pokémon GO) • Météo • **Toute app demandant l'accès à la localisation**
🏪 **Commerces et lieux** : • Wi-Fi gratuit (enregistre votre MAC address) • Balises Bluetooth (beacons) • Caméras de reconnaissance faciale
🌐 **Fournisseurs de services** : • Opérateurs téléphoniques (antennes 4G/5G) • Fournisseurs d'accès Internet
📊 **Exemple d'une journée typique**
**7h00 - Réveil** : • Smartphone détecte que vous êtes chez vous • Applications météo obtiennent votre position
**8h00 - Trajet travail** : • GPS ou Waze calcule l'itinéraire • Google Timeline enregistre le trajet • Opérateur télécom voit vos déplacements (antennes)
**12h30 - Déjeuner** : • Photo du plat → géolocalisation dans EXIF • Publication Instagram → position partagée • Wi-Fi du restaurant → vous identifie
**18h00 - Retour** : • Google Maps suggère "Temps jusqu'à domicile" • Timeline enregistre l'heure d'arrivée
**20h00 - Soirée** : • Commande Uber Eats → adresse précise • Check-in Facebook au cinéma
**23h00 - Coucher** : • Smartphone détecte que vous êtes immobile • Applications de santé enregistrent votre sommeil
**Résultat** : Votre smartphone connaît : ✅ Où vous habitez ✅ Où vous travaillez ✅ Vos lieux favoris (restaurants, amis, famille) ✅ Vos horaires de vie ✅ Vos habitudes de déplacement
⚠️ **Collecte passive vs active**
**Collecte passive** (invisible) : • Antennes téléphoniques • Wi-Fi à proximité • Bluetooth • **Vous ne le voyez pas**
**Collecte active** (visible) : • Ouverture de Google Maps • Utilisation du GPS • Check-in sur réseaux sociaux • **Vous en êtes conscient**
**Problème** : La collecte passive représente 90% des données !
🔢 **Volume de données**
**Google Timeline** (si activé) : • Enregistre chaque minute de chaque jour • Stocke des années d'historique • Précision au mètre près
**Exemple sur 1 an** : • 365 jours × 24h × 60 min = 525 600 points • Chaque point = coordonnées + horodatage • **~500 000 positions enregistrées par an !**
💾 **Où sont stockées ces données ?**
**Sur votre appareil** : • Cache local • Bases de données d'applications • Photos avec géolocalisation
**Dans le cloud** : • Serveurs Google (Google Drive, Photos) • Serveurs Apple (iCloud) • Serveurs des applications
**Chez les tiers** : • Annonceurs publicitaires • Courtiers en données (data brokers) • Partenaires commerciaux
⏱️ **Durée de conservation**
**Google** : • Par défaut : 18 mois • Modifiable : 3 mois, 18 mois, ou indéfiniment
**Apple** : • Conserve localement sur l'appareil • Pas de synchronisation cloud automatique
**Applications tierces** : • Variable selon l'app • Souvent : "aussi longtemps que nécessaire" (flou !)
# Simulation de collecte de données de localisation
import random
from datetime import datetime, timedelta
class PointLocalisation:
def __init__(self, latitude, longitude, timestamp, source):
self.lat = latitude
self.lon = longitude
self.timestamp = timestamp
self.source = source # GPS, WiFi, 4G, etc.
def __str__(self):
return f"[{self.timestamp}] ({self.lat:.6f}, {self.lon:.6f}) via {self.source}"
class CollecteurDonnees:
def __init__(self):
self.historique = []
def enregistrer_position(self, point):
"""Enregistre un point de localisation."""
self.historique.append(point)
def afficher_statistiques(self):
"""Affiche les statistiques de collecte."""
print(f"\nSTATISTIQUES DE COLLECTE:")
print(f" Nombre total de points: {len(self.historique)}")
# Compter par source
sources = {}
for point in self.historique:
sources[point.source] = sources.get(point.source, 0) + 1
print(f"\n Répartition par source:")
for source, count in sorted(sources.items(), key=lambda x: -x[1]):
pourcentage = (count / len(self.historique)) * 100
print(f" • {source:<15} {count:>4} points ({pourcentage:>5.1f}%)")
def detecter_lieux_frequents(self):
"""Détecte les lieux fréquemment visités."""
# Simplification: grouper par proximité (100m)
lieux = {}
for point in self.historique:
# Arrondir à 3 décimales (~100m de précision)
lat_round = round(point.lat, 3)
lon_round = round(point.lon, 3)
cle = (lat_round, lon_round)
if cle not in lieux:
lieux[cle] = {'count': 0, 'nom': None}
lieux[cle]['count'] += 1
# Trier par fréquence
lieux_tries = sorted(lieux.items(), key=lambda x: -x[1]['count'])
print(f"\n LIEUX FRÉQUENTS DÉTECTÉS:")
for i, ((lat, lon), info) in enumerate(lieux_tries[:5], 1):
print(f" {i}. ({lat}, {lon}) - {info['count']} visites")
return lieux_tries
# Simulation d'une journée de collecte
print("=== SIMULATION COLLECTE DE DONNÉES - 1 JOURNÉE ===\n")
collecteur = CollecteurDonnees()
# Position de base (domicile)
lat_domicile = 48.8584
lon_domicile = 2.2945
# Simuler une journée (7h - 23h)
heure_debut = datetime.now().replace(hour=7, minute=0, second=0)
heure_actuelle = heure_debut
print("Collecte en cours...\n")
# 7h-8h : Domicile
for i in range(12): # Toutes les 5 minutes
point = PointLocalisation(
lat_domicile + random.uniform(-0.0001, 0.0001),
lon_domicile + random.uniform(-0.0001, 0.0001),
heure_actuelle,
"WiFi domicile"
)
collecteur.enregistrer_position(point)
heure_actuelle += timedelta(minutes=5)
if i < 3:
print(f" {point}")
print(" ...")
# 8h-9h : Trajet travail
lat_travail = 48.8734
lon_travail = 2.2950
for i in range(12):
progression = i / 12
lat = lat_domicile + (lat_travail - lat_domicile) * progression
lon = lon_domicile + (lon_travail - lon_domicile) * progression
point = PointLocalisation(lat, lon, heure_actuelle, "GPS actif")
collecteur.enregistrer_position(point)
heure_actuelle += timedelta(minutes=5)
# 9h-12h : Travail
for i in range(36):
point = PointLocalisation(
lat_travail + random.uniform(-0.0001, 0.0001),
lon_travail + random.uniform(-0.0001, 0.0001),
heure_actuelle,
"WiFi bureau"
)
collecteur.enregistrer_position(point)
heure_actuelle += timedelta(minutes=5)
# 12h-14h : Pause déjeuner (restaurant)
lat_restaurant = 48.8700
lon_restaurant = 2.2980
for i in range(24):
point = PointLocalisation(
lat_restaurant + random.uniform(-0.0001, 0.0001),
lon_restaurant + random.uniform(-0.0001, 0.0001),
heure_actuelle,
"WiFi restaurant"
)
collecteur.enregistrer_position(point)
heure_actuelle += timedelta(minutes=5)
# 14h-18h : Retour travail
for i in range(48):
point = PointLocalisation(
lat_travail + random.uniform(-0.0001, 0.0001),
lon_travail + random.uniform(-0.0001, 0.0001),
heure_actuelle,
"WiFi bureau"
)
collecteur.enregistrer_position(point)
heure_actuelle += timedelta(minutes=5)
# 18h-19h : Retour domicile
for i in range(12):
progression = i / 12
lat = lat_travail + (lat_domicile - lat_travail) * progression
lon = lon_travail + (lon_domicile - lon_travail) * progression
point = PointLocalisation(lat, lon, heure_actuelle, "GPS actif")
collecteur.enregistrer_position(point)
heure_actuelle += timedelta(minutes=5)
# 19h-23h : Domicile
for i in range(48):
point = PointLocalisation(
lat_domicile + random.uniform(-0.0001, 0.0001),
lon_domicile + random.uniform(-0.0001, 0.0001),
heure_actuelle,
"WiFi domicile"
)
collecteur.enregistrer_position(point)
heure_actuelle += timedelta(minutes=5)
# Afficher les statistiques
collecteur.afficher_statistiques()
# Détecter les lieux fréquents
lieux_frequents = collecteur.detecter_lieux_frequents()
# Inférences possibles
print("\n INFÉRENCES POSSIBLES (algorithmes d'analyse):")
print(f" • Domicile: {lieux_frequents[0][0]}")
print(f" • Travail: {lieux_frequents[1][0]}")
print(f" • Horaires: 9h-18h (détectés via patterns)")
print(f" • Trajet: GPS actif matin et soir")
print(f" • Pause déjeuner: 12h-14h au restaurant")
# Projection sur 1 an
print("\n\n=== PROJECTION SUR 1 AN ===\n")
points_par_jour = len(collecteur.historique)
jours_par_an = 365
print(f" Points collectés par jour: {points_par_jour}")
print(f" Points sur 1 an: {points_par_jour * jours_par_an:,}")
print(f" Taille estimée: ~{(points_par_jour * jours_par_an * 50) / 1024 / 1024:.1f} MB")
# Qui a accès à ces données ?
print("\n\n=== QUI A ACCÈS À CES DONNÉES ? ===\n")
acces = [
("Système d'exploitation", "Google/Apple", "Toutes", "Oui"),
("Applications GPS", "Waze, Maps", "Position en temps réel", "Oui"),
("Réseaux sociaux", "Facebook, Instagram", "Position + check-ins", "Oui"),
("Opérateur télécom", "Orange, SFR, etc.", "Antennes 4G/5G", "Oui"),
("Applications météo", "Diverses", "Position actuelle", "Souvent"),
("Jeux mobiles", "Pokémon GO, etc.", "Position précise", "Souvent"),
("Annonceurs", "Tiers inconnus", "Profil de localisation", "Via courtiers")
]
print(f"{'Type d\'entité':<25} {'Exemples':<20} {'Données accédées':<30} {'Consent?':<10}")
print("-" * 90)
for type_entite, exemples, donnees, consent in acces:
print(f"{type_entite:<25} {exemples:<20} {donnees:<30} {consent:<10}")
print("\n⚠️ Vos données de localisation sont partagées avec des dizaines d'entités !")
# Durée de conservation
print("\n\n=== DURÉE DE CONSERVATION ===\n")
durees = [
("Google Timeline", "18 mois (par défaut)", "Modifiable: 3/18 mois ou ∞"),
("Apple Localisation", "Locale sur appareil", "Pas de cloud automatique"),
("Facebook", "Indéfiniment", "Jusqu'à suppression compte"),
("Applications GPS", "Variable", "Souvent plusieurs années"),
("Opérateur télécom", "1-2 ans", "Obligation légale en France")
]
print(f"{'Service':<25} {'Durée défaut':<25} {'Notes':<35}")
print("-" * 90)
for service, duree, notes in durees:
print(f"{service:<25} {duree:<25} {notes:<35}")
print("\n💡 Conseil: Vérifier et supprimer régulièrement votre historique de localisation")Quiz de validation
1. Quelle donnée NE fait PAS partie de la géolocalisation ?
2. Quel est le principal risque du partage de position en temps réel ?
3. Que signifie RGPD ?
4. Quelle autorisation est recommandée pour Google Maps ?
5. Désactiver le GPS suffit-il pour ne plus être localisé ?
