Aller au contenu

PD-97 — Acceptabilité


📚 Navigation User Story | Document | | | ---------- | -- | | 📋 [Spécification](PD-97-specification.md) | | | 🛠️ [Plan d'implémentation](PD-97-plan.md) | | | ✅ **Critères d'acceptation** | *(ce document)* | | 📝 [Retour d'expérience](PD-97-rex.md) | | [← Retour à mobile-ios](../PD-195-epic.md) · [↑ Index User Story](index.md)

Objectif

Vérifier que l’implémentation est conforme à la spécification, respecte l’ensemble des invariants ProbatioVault et ne présente aucune incohérence ou oubli critique.


Périmètre de vérification

La revue d’acceptabilité vérifie explicitement :

  • la conformité stricte à la spécification fonctionnelle
  • le respect de tous les invariants applicables
  • la couverture des scénarios de test définis
  • l’absence d’incohérences, oublis ou régressions

Écarts identifiés

Chaque écart constaté doit être documenté et classé selon sa gravité.

Classification des écarts

Niveau Définition
BLOQUANT Violation d’un invariant, faille de sécurité, non-conformité majeure à la spec
MAJEUR Fonction incomplète, comportement non conforme mais sans rupture de sécurité
MINEUR Détail, dette acceptable, amélioration non critique

Détail des écarts

ID Description Référence Gravité
E-01 Dépendance runtime à WebAssembly pour Argon2id : le code interdit tout fallback en production et échoue si WASM indisponible. Sur Hermes iOS, le support WASM/asm.js n’est pas garanti ; si non présent, la dérivation K_encryption/K_master tombera en erreur. Le polyfill WebAssembly force argon2-browser à passer en asm.js, mais le garde-fou deriveKeyInternal rejette encore en production faute de validation EAS. Spec §Contraintes (Argon2id obligatoire) ; Plan Phase ½ ; src/services/keyDerivation.ts, src/utils/webAssemblyPolyfill.ts MAJEUR
E-02 Opérations coûteuses sur le thread UI : Argon2id (64 MiB) et AES-GCM sont exécutés synchrones dans le thread JS sans offloading (pas de worker ni InteractionManager), contrairement à la contrainte d’exécution hors thread UI pour préserver l’UX. Spec §Contraintes Performance ; src/services/keyDerivation.ts (deriveKeyInternal), src/services/crypto.ts (encryptFile/decryptFile) MAJEUR
E-03 Effacement mémoire incomplet : seules les clés issues de chaînes sont zeroizées ; les plaintexts, K_master chargée par ensureMasterKey, les buffers de fichiers et les K_doc dérivées ne sont jamais effacés après usage, en contradiction avec l’exigence d’effacer les buffers sensibles. Spec §Contraintes Sécurité (effacement buffers) ; Plan Phase 4 ; src/services/crypto.ts (ensureMasterKey, encryptFile/decryptFile), src/hooks/useCrypto.ts, src/crypto/aes-gcm.ts MAJEUR
E-04 AAD facultatif dans l’API AES-GCM : encrypt/decrypt acceptent une AAD optionnelle (par défaut vide), ouvrant la porte à un chiffrement sans contexte authentifié, alors que la spec exige une vérification stricte du contexte des données chiffrées. Spec §Description fonctionnelle (intégrité + contexte) ; Plan Phase ⅓ (AAD) ; src/crypto/aes-gcm.ts MINEUR

Conclusion d’acceptabilité

⚠️ ACCEPTÉ AVEC RÉSERVES — écarts MAJEURS/MINEURS documentés (Argon2id/WASM, thread UI, zeroization, AAD facultatif).