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.

Difficulté:
20 min
+20 XP

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 !)

Python
# 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é ?

EdTech AI Assistant