Gate 8 — Review PD-242 (v1)¶
Reviewer : ChatGPT (gpt-5.3-codex) Date : 2026-02-19 Type : CLOSURE
Scoring¶
| Critère | Score | Justification |
|---|---|---|
| conformity | 8.5/10 | Les tâches planifiées (TASK-1..8) sont livrées, le flux crypto spécifié (BIP-39 → PBKDF2 → HKDF-SHA3-256 → AES-256-GCM) est couvert, mais 3 invariants restent hors périmètre implémenté (backend/device/screenshot natif partiel). |
| test_coverage | 8.0/10 | 49/49 tests PD-242 passés, vecteurs BIP-39 et tests crypto pertinents présents, mais couverture surtout unitaire; manque de tests d'intégration/E2E pour invariants dépendant plateforme/backend. |
| security | 8.0/10 | Invariants crypto critiques du scope app correctement adressés; correction P0 zeroization en try/finally améliore nettement la robustesse. Réserve résiduelle sur limites "best-effort" JS + invariants backend/non-fonctionnels non validés en bout-en-bout. |
| maintainability | 8.5/10 | Structure claire (services + composants + écrans), lint/TS OK, écarts documentés; dette mineure connue (SafeAreaView, TODO natif/API). |
Moyenne : 8.25/10
Analyse des invariants¶
| Invariant | Status | Commentaire |
|---|---|---|
| INV-242-01 | ✅ | Pas d'indication de transit en clair de K_recovery; design envelope conforme au modèle zero-knowledge. |
| INV-242-02 | ✅ | Phrase non persistée explicitement; conforme au scope mobile décrit. |
| INV-242-03 | ✅ | Correctif P0 appliqué (try/finally) sur les chemins critiques; suffisant pour du best-effort applicatif. |
| INV-242-04 | ✅ | Domain separation (salt + info=userId) testée (TC-CRYPTO-02). |
| INV-242-05 | ✅ | Entropie 256 bits vérifiée (TC-BIP-02), 24 mots confirmés. |
| INV-242-06 | ✅ | AES-256-GCM utilisé et testé (création + round-trip). |
| INV-242-07 | ✅ | H_verify présent et déterministe (TC-VERIFY-01/02). |
| INV-242-08 | ✅ | Confirmation complète 24 mots couverte par le flux fonctionnel/tests. |
| INV-242-09 | ✅ | Timeout 120s indiqué comme implémenté côté UX; pas d'alerte bloquante relevée. |
| INV-242-10 | ⚠️ | Protection screenshot partielle (dépend natif); TODO documenté, non validé end-to-end. |
| INV-242-11 | ⚠️ | Rate limiting backend hors scope implémentation actuelle. |
| INV-242-12 | ✅ | Usage Keychain iOS pour K_master déclaré conforme au scope mobile. |
| INV-242-13 | ⚠️ | Détection nouveau device dépend backend/serveur, non couverte dans ce lot. |
Écarts identifiés¶
| ID | Sévérité | Description | Action |
|---|---|---|---|
| ECT-001 | MINEUR | Protection screenshot nécessite intégration native complète | Ouvrir ticket technique dédié mobile natif + test E2E device. |
| ECT-002 | MINEUR | Mocks API (backend hors scope) | Garder TODO tracé + lier à story backend (rate limiting/device detection). |
| ECT-003 | MINEUR | SafeAreaView deprecated | Planifier migration vers composant recommandé dans prochain lot UI. |
| ECT-004 | MAJEUR (corrigé) | Zeroization incomplète en cas d'exception | Corrigé via try/finally; conserver test de non-régression ciblé. |
Verdict¶
Verdict : RESERVE
Justification : Le cœur cryptographique et les corrections P0 sont conformes pour le périmètre applicatif, avec une base de tests solide. Toutefois, la clôture sécurité complète n'est pas totalement atteinte car 3 invariants restent partiels/hors scope opérationnel (screenshot natif, rate limiting backend, nouveau device). Ce n'est pas un blocage de livraison du lot mobile, mais nécessite traçabilité et engagement explicite des stories dépendantes.
Recommandations¶
- Verrouiller la réserve par des tickets liés couvrant explicitement
INV-242-10/11/13(avec critères d'acceptation testables). - Ajouter au minimum 1 test d'intégration par invariant non purement unitaire (screenshot policy, timeout UX, handshake backend de recovery).
- Conserver l'approche
try/finallyet ajouter des tests de chemins d'exception (throw au milieu du flux) pour prouver la zeroization systématique. - Planifier une revue sécurité finale "end-to-end" après livraison backend pour lever la réserve en GO.