Privacy by Design pour l'IA
Les applications IA manipulent des données souvent sensibles (conversations, documents, données personnelles). La privacy doit être intégrée dès la conception, pas ajoutée après coup.
Les 7 principes du Privacy by Design
1. Proactif : Prévenir, pas réagir 2. Par défaut : Protection maximale sans action de l'utilisateur 3. Intégré : Dans l'architecture, pas en surcouche 4. Somme positive : Privacy ET fonctionnalité 5. Bout en bout : Cycle de vie complet des données 6. Transparent : Visible et vérifiable 7. Centré utilisateur : L'utilisateur garde le contrôle
Architectures privacy-first
Option 1 : Pas de données sensibles dans le prompt
def anonymize_before_llm(text: str) -> tuple[str, dict]:
"""Remplace les données sensibles par des placeholders."""
entities = detect_pii(text) # NER pour PII
mapping = {}
anonymized = text
for entity in entities:
placeholder = f"[{entity.type}_{entity.id}]"
mapping[placeholder] = entity.value
anonymized = anonymized.replace(entity.value, placeholder)
return anonymized, mapping
def deanonymize_response(response: str, mapping: dict) -> str:
"""Restaure les données dans la réponse."""
for placeholder, value in mapping.items():
response = response.replace(placeholder, value)
return responseOption 2 : LLM self-hosted
Aucune donnée ne quitte votre infrastructure :
Client → Votre API → vLLM (on-premise) → Réponse
↓
GPU dédiés dans votre datacenterOption 3 : Architecture hybride
- Données sensibles : Modèle local (Llama, Mistral)
- Données non-sensibles : API cloud (meilleures performances)
- Classification automatique de la sensibilité
Techniques de protection des données
PII Detection et masquage
import presidio_analyzer
import presidio_anonymizer
analyzer = presidio_analyzer.AnalyzerEngine()
anonymizer = presidio_anonymizer.AnonymizerEngine()
# Détecter les PII
results = analyzer.analyze(
text="Jean Dupont, né le 15/03/1985, email: jean@example.com",
language="fr",
entities=["PERSON", "DATE_TIME", "EMAIL_ADDRESS", "PHONE_NUMBER"]
)
# Anonymiser
anonymized = anonymizer.anonymize(text=text, analyzer_results=results)Data minimization
- Ne collecter que les données strictement nécessaires
- Purger les conversations après la session (ou durée définie)
- Pas de stockage des prompts si non nécessaire au produit
- Chunking : Ne pas envoyer un document entier si 2 paragraphes suffisent
Chiffrement
- En transit : TLS 1.3 obligatoire
- Au repos : Chiffrement AES-256 des vector stores
- Clés gérées par le client (BYOK) pour l'enterprise
Consentement et transparence
- Informer que les données passent par un LLM
- Préciser si le provider peut accéder aux données
- Opt-out pour l'utilisation en entraînement (Data Processing Agreement)
- Droit à l'effacement : Pouvoir supprimer les données du vector store
Checklist Privacy pour un projet IA
- Cartographie des flux de données (DFD)
- Classification de la sensibilité par champ
- PII masqué avant tout appel LLM externe
- Logs sans données personnelles (ou pseudonymisés)
- Durée de rétention définie et appliquée
- DPA signé avec chaque provider IA
- Documentation RGPD à jour (registre des traitements)