Aller au contenu

PD-248 — Expression de besoin

Contexte

Issue identifiée lors de la Gate 8 de PD-242 (Enveloppe cryptographique de récupération).

L'invariant INV-242-11 stipule que l'affichage de la phrase de récupération doit être protégé contre les screenshots. Cette fonctionnalité a été marquée "TODO — hors scope mobile" lors de la Gate 8 car elle nécessite une implémentation native iOS via un package dédié.

Référence : ECT-001 dans PD-242-dossier-conformite-step8-v1.md


Besoin utilisateur

En tant qu' utilisateur de ProbatioVault sur iOS, Je veux que les écrans affichant des informations sensibles soient protégés contre les captures d'écran, Afin de prévenir toute fuite accidentelle ou malveillante de mes secrets cryptographiques (phrase de récupération, codes TOTP, QR codes MFA).


Périmètre

Écrans protégés

Écran Composant Données sensibles
Affichage phrase de récupération MnemonicDisplay 24 mots BIP-39
Configuration MFA MFASetupScreen QR code TOTP, secret MFA
Codes TOTP TOTPCodeDisplay Code 6 chiffres rotatif
Clés API (si applicable) APIKeyDisplay Tokens d'accès

Comportement attendu

  1. Protection active : Quand un écran sensible est affiché, les captures d'écran produisent une image noire/vide
  2. Pas de notification : L'utilisateur n'est pas alerté de la tentative (comportement silencieux)
  3. Protection automatique : Activation/désactivation gérée par le composant (pas d'action utilisateur requise)

Approche technique retenue

expo-screen-capture — Package Expo officiel

  • API simple : preventScreenCapture() / allowScreenCapture()
  • Intégration native iOS via UIScreen.isCaptured ou UITextField.isSecureTextEntry
  • Compatible EAS Build
  • Maintenu par l'équipe Expo

Contraintes

Contrainte Description
C-248-01 Compatibilité iOS 15+ (minimum supporté par ProbatioVault)
C-248-02 Pas d'impact sur les performances UI (activation < 10ms)
C-248-03 Pas de dépendance native additionnelle (utiliser expo-screen-capture uniquement)
C-248-04 Fonctionnel en mode production (EAS Build), pas seulement Expo Go
C-248-05 Testable sur simulateur iOS

Hors périmètre

Exclusion Justification
Protection enregistrement écran (screen recording) Nécessite API différente, future story si besoin
Détection de screenshot avec alerte Non demandé par le PO
Protection Android Hors scope iOS (PD-248 = iOS uniquement)
Mode "app entière protégée" Non retenu, protection par écran uniquement
Obfuscation du contenu au lieu d'écran noir Non retenu

Dépendances

Story Status Nature
PD-242 DONE MnemonicDisplay (composant cible)
PD-106 DONE Écrans MFA Settings (composants cibles)
PD-97 DONE Architecture crypto iOS

Critères de succès (haut niveau)

  1. CS-01 : Un screenshot de MnemonicDisplay produit une image noire
  2. CS-02 : Un screenshot de MFASetupScreen (QR code) produit une image noire
  3. CS-03 : Les écrans non sensibles restent capturables normalement
  4. CS-04 : Aucune régression de performance perceptible
  5. CS-05 : Testable via tests E2E sur simulateur iOS

Questions résolues

Question Réponse PO
Quels écrans protéger ? Tous les écrans sensibles (phrase, TOTP, QR MFA, clés API)
Quelle approche technique ? expo-screen-capture
Comportement lors d'une capture ? Écran noir/vide, pas de notification

Validation

  • Rédacteur : Claude (orchestrateur)
  • Date : 2026-02-19
  • Status : En attente validation PO

Document généré dans le cadre du workflow de gouvernance ProbatioVault — Étape 0