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¶
- Protection active : Quand un écran sensible est affiché, les captures d'écran produisent une image noire/vide
- Pas de notification : L'utilisateur n'est pas alerté de la tentative (comportement silencieux)
- 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.isCapturedouUITextField.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)¶
- CS-01 : Un screenshot de
MnemonicDisplayproduit une image noire - CS-02 : Un screenshot de
MFASetupScreen(QR code) produit une image noire - CS-03 : Les écrans non sensibles restent capturables normalement
- CS-04 : Aucune régression de performance perceptible
- 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