Aller au contenu

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/finally et 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.