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).