PD-35 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-35 |
| Titre | Key Wrapping AES-256-KW |
| Domaine | crypto-proof |
| Projet | backend |
| Date complétion | 2026-01-XX |
| Verdict | ACCEPTÉ AVEC RÉSERVES |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Écarts majeurs | 4 |
| Points fluides | 13 |
| Points difficiles | 5 |
| Dette technique | 6 items |
3. Learnings clés¶
-
Le scaffolding "DEV ONLY" génère des écarts MAJEURS : Les guards commentés et userId hardcodés constituent des failles de sécurité. Ce pattern doit être explicitement accepté comme dette technique ou bloqué.
-
Blacklist doit respecter le modèle de données : La contrainte UNIQUE sur
(user_id, device_id)implique que la query doit filtrer sur les deux colonnes. Une query surdeviceIdseul crée un comportement cross-tenant. -
Récupération nécessite route de récupération : Créer une Recovery Envelope sans exposer de route GET rend le mécanisme inutilisable via API. La spec doit préciser le flux complet.
-
Journalisation probatoire = dépendance explicite : Les TODO "audit log (PD-XX)" sans US créée garantissent que cette contrainte ne sera pas satisfaite. Créer la dépendance au backlog.
-
AES-KW Node.js crypto robuste : L'algorithme
id-aes256-wrapest stable depuis Node.js v15, l'implémentation native garantit la conformité RFC 3394.
4. Patterns applicables¶
Pattern existant : Zeroization systématique¶
try {
const unwrapped = this.aesKwService.unwrap(kek, wrappedKey);
// Utiliser unwrapped...
return result;
} finally {
this.aesKwService.zeroize(kek);
this.aesKwService.zeroize(unwrapped);
}
Nouveau pattern : Transaction atomique rotation clé¶
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const currentK = await this.unwrap(queryRunner, oldKek);
const newWrapped = await this.wrap(newKek, currentK);
await queryRunner.manager.save(KeyEnvelope, newEnvelope);
await queryRunner.commitTransaction();
} catch (error) {
await queryRunner.rollbackTransaction();
throw error;
} finally {
await queryRunner.release();
}
5. Signal CLAUDE.md¶
Priorité haute : Interdire les scaffoldings DEV ONLY sans ticket de dette.
### Scaffolding DEV ONLY — Règle stricte (2026-02-XX)
Tout code marqué "DEV ONLY" (guards commentés, userId hardcodé, etc.) DOIT :
1. Être identifié comme écart MAJEUR dans la revue d'acceptabilité
2. Avoir un ticket de dette technique créé avec priorité HAUTE
3. Être corrigé AVANT mise en production
**Pattern interdit** : `// JwtAuthGuard: TODO DEV ONLY`
6. Conclusion¶
PD-35 a livré le module Key Wrapping AES-256-KW avec zeroization et transactions atomiques. Les 4 écarts majeurs (JWT désactivé, route GET recovery absente, blacklist globale, journalisation TODO) illustrent l'importance de définir les dépendances inter-US et de refuser les scaffoldings non sécurisés.
Rétrospective générée 2026-02-19 (Étape 10 batch crypto-proof)