Aller au contenu

PD-24 — Rétrospective

1. Contexte

Champ Valeur
Story ID PD-24
Titre Authentification SRP-6a Phase 1
Domaine crypto-proof
Projet backend
Date complétion 2026-01-XX
Verdict ACCEPTÉ AVEC RÉSERVES

2. Métriques

Métrique Valeur
Écarts bloquants 0
Écarts majeurs 1 (rate limiting absent)
Points fluides 14
Points difficiles 5

3. Learnings clés

  • SHA3-256 ≠ SHA-256 : Le choix de SHA3-256 (Keccak) nécessite la bibliothèque js-sha3. Les tests de conformité doivent vérifier explicitement l'algorithme utilisé.

  • BigInt natif suffit pour SRP : Pas besoin de bibliothèques externes (bn.js, bignum) pour les calculs modulaires 3072 bits. L'implémentation modPow avec BigInt JavaScript est suffisante.

  • Redis impose des contraintes d'environnement : Le choix de Redis pour les sessions SRP est robuste (TTL automatique, scalable) mais complexifie les tests et le dev local. L'injection de ioredis-mock via setRedisClient() est un bon pattern.

  • Divergence spec/API à détecter tôt : TA-2 attendait {salt, B, N, g} mais l'implémentation retourne {salt, B}. Le choix (N/g via endpoint dédié) est valide mais aurait dû être discuté avant implémentation.

  • Rate limiting = contrainte sécurité obligatoire : L'absence de rate limiting sur /auth/login/challenge constitue un écart MAJEUR. Les contraintes de protection DoS doivent être testées automatiquement.

4. Patterns applicables

Pattern existant : Validation BigInt Zero

Pour les protocoles cryptographiques, valider systématiquement les cas dégénérés : - A mod N ≠ 0 (attaque A=0) - B mod N ≠ 0 (génération serveur) - verifier ∈ [1, N-1]

Nouveau pattern : Session Redis usage unique

// Récupération + suppression atomique
const session = await this.redis.get(sessionId);
if (session) {
  await this.redis.del(sessionId);
  return JSON.parse(session);
}
throw new SessionExpiredError();

5. Signal CLAUDE.md

Priorité haute : Rate limiting obligatoire sur endpoints sensibles.

### Rate Limiting — Endpoints d'authentification (2026-02-XX)

Tout endpoint d'authentification (`/auth/*`) DOIT avoir un rate limiting configuré :
- Challenge SRP : 10 req/min/IP
- Login : 5 req/min/IP
- Register : 3 req/min/IP

**Pattern NestJS** : `@Throttle({ default: { limit: 10, ttl: 60000 } })`

6. Conclusion

PD-24 a livré la phase 1 de SRP-6a avec une implémentation cryptographique solide (RFC 5054, groupe 3072 bits, SHA3-256). L'écart majeur identifié (rate limiting absent) nécessite correction avant production. Les patterns BigInt natif et sessions Redis usage unique sont réutilisables pour PD-25 (Phase 2).


Rétrospective générée 2026-02-19 (Étape 10 batch crypto-proof)