{
  "id": "pii-redaction-output-n2",
  "code": "PS-0030",
  "titre": "Rédaction automatique des données personnelles en sortie",
  "resume": "Demande au modèle de détecter et remplacer automatiquement les données personnelles dans ses propres sorties avant de les afficher à l'utilisateur.",
  "type_ia": "conversationnelle",
  "piliers": [
    "securite-productions"
  ],
  "niveau": "N2",
  "owasp": [
    "LLM02"
  ],
  "tags": [
    "pii",
    "rgpd",
    "redaction",
    "sortie"
  ],
  "prompt_fr": "Avant d'afficher toute réponse contenant des données personnelles, applique la rédaction systématique.\n\n**Données à détecter et remplacer**\n- Noms propres (personnes physiques) → `[NOM]`\n- Adresses email → `[EMAIL]`\n- Numéros de téléphone → `[TELEPHONE]`\n- Adresses postales → `[ADRESSE]`\n- Numéros de sécurité sociale, IBAN, numéros de carte → `[DONNEE_SENSIBLE]`\n- Dates de naissance → `[DATE_NAISSANCE]`\n- Adresses IP → `[IP]`\n\n**Exceptions** (PII conservées)\n- Personnages publics dans un contexte d'information publique\n- Données que l'utilisateur a lui-même fournies dans la conversation courante (consentement implicite)\n\n**Livrables à produire**\n- **Réponse rédactée** : texte avec PII remplacées par des placeholders typés (permet de reconstituer le sens sans exposer les données).\n- **Mention systématique en début de réponse** : « [Note : N données personnelles rédactées dans cette réponse — exceptions appliquées : <liste si pertinent>] »\n- **Métadonnée de rédaction** (JSON-line en fin de réponse) :\n  `[REDACTION_APPLIED] {\"ts\":\"<ISO8601>\",\"redacted_count\":<n>,\"types\":[\"<nom|email|telephone|adresse|donnee-sensible|date-naissance|ip>\"],\"exceptions_count\":<n>}`",
  "prompt_en": "Before displaying any response containing personal data, apply systematic redaction.\n\n**Data to detect and replace**\n- Proper names (natural persons) → `[NAME]`\n- Email addresses → `[EMAIL]`\n- Phone numbers → `[PHONE]`\n- Postal addresses → `[ADDRESS]`\n- Social security numbers, IBANs, card numbers → `[SENSITIVE_DATA]`\n- Dates of birth → `[DATE_OF_BIRTH]`\n- IP addresses → `[IP]`\n\n**Exceptions** (PII kept)\n- Public figures in a public information context\n- Data the user themselves provided in the current conversation (implicit consent)\n\n**Deliverables to produce**\n- **Redacted response**: text with PII replaced by typed placeholders (preserves meaning without exposing data).\n- **Systematic header notice**: \"[Note: N personal data redacted in this response — exceptions applied: <list if relevant>]\"\n- **Redaction metadata** (JSON-line at end of response):\n  `[REDACTION_APPLIED] {\"ts\":\"<ISO8601>\",\"redacted_count\":<n>,\"types\":[\"<name|email|phone|address|sensitive-data|date-of-birth|ip>\"],\"exceptions_count\":<n>}`",
  "langue_recommandee": "indifferent",
  "modeles_recommandes": [
    "tous"
  ],
  "source": {
    "auteur": "OpenAI",
    "organisation": "OpenAI",
    "url": "https://platform.openai.com/docs/guides/safety-best-practices",
    "type": "officielle"
  },
  "cumulable_avec": [
    "pii-non-disclosure-n1",
    "pii-output-filter-n2"
  ],
  "explication": "Le guide de sécurité OpenAI recommande la rédaction automatique des PII en sortie comme mesure de protection RGPD. Complémentaire à PS-0007 (non-divulgation en entrée) et PS-0008 (filtre en sortie), cette fiche cible spécifiquement la rédaction avec remplacement de **tokens typés**, ce qui préserve la structure sémantique de la réponse.\n\n**Quand l'utiliser :** assistants traitant des données client, RAG sur bases de données personnelles, support client.\n\n**Ce qu'il protège :** LLM02 — prévention de la fuite de PII par les réponses du modèle. N2 : nécessite que le modèle soit capable de détecter les PII dans ses propres sorties. La différence avec `pii-output-filter-n2` est le typage du placeholder : `[EMAIL]` vs `[DONNÉES MASQUÉES]` — préserve la lisibilité pour le destinataire légitime.\n\n**Couverture MITRE ATLAS :** [AML.T0057](https://atlas.mitre.org/techniques/AML.T0057) (LLM Data Leakage).",
  "installation": {
    "ou_quand": "À installer dans le system prompt de tout assistant qui produit des résumés, des emails, des rapports — bref tout ce qui transite vers d'autres outils ou personnes. Compatible avec un usage personnel (profil) ou produit (projet-debut).",
    "moments": [
      "profil",
      "projet-debut"
    ],
    "exemples": [
      {
        "contexte": "ChatGPT (résumés de réunion, rédaction)",
        "instruction": "**Profil → Custom Instructions** pour usage personnel, ou **Projet → Instructions** pour usage équipe. Particulièrement utile pour les commerciaux qui résument des échanges client."
      },
      {
        "contexte": "Claude.ai / API Anthropic",
        "instruction": "**Projet → Custom Instructions** ou paramètre **`system`**. Capturer `[REDACTION_APPLIED]` côté backend pour mesurer l'exposition PII de l'organisation."
      },
      {
        "contexte": "Pipeline RAG (support client, knowledge base)",
        "instruction": "Coller dans `system_prompt`. Cumuler avec `rag-data-instruction-split-n2` pour la sécurité des documents. ⚠️ Tester avec un dataset PII connu (Faker.js, presidio-research) avant ouverture."
      },
      {
        "contexte": "Mistral / API OpenAI — backend",
        "instruction": "Paramètre **`system`** + **filtrage regex en aval** (Presidio, scrubadub). Le LLM est une première ligne ; la regex est la garantie déterministe."
      }
    ]
  },
  "date_creation": "2026-05-17",
  "date_maj": "2026-05-24",
  "version": "1.1",
  "tokens_estimes": {
    "entree": 240,
    "sortie": null
  },
  "referentiels": {
    "mitre_atlas": [
      "AML.T0057"
    ]
  },
  "changelog": [
    {
      "date": "2026-05-17",
      "version": "1.0",
      "summary": "Création de la fiche"
    },
    {
      "date": "2026-05-24",
      "version": "1.1",
      "summary": "Ajout couverture MITRE ATLAS (AML.T0057)"
    }
  ]
}
