PD-46 — Expression de Besoin¶
Contexte¶
ProbatioVault permet aux utilisateurs de stocker des documents sensibles avec garantie d'intégrité probatoire. Le téléchargement de ces documents doit être sécurisé, audité et compatible avec le modèle de preuve composite de la plateforme.
Problème¶
Actuellement, il n'existe pas de mécanisme standardisé pour permettre le téléchargement sécurisé des documents stockés sur S3. Les besoins sont :
- Sécurité : Empêcher tout accès non autorisé aux documents
- Performance : Permettre des téléchargements directs depuis S3 (sans passer par le backend)
- Traçabilité : Journaliser chaque téléchargement effectif dans le registre probatoire
- Multi-canal : Supporter iOS, PWA et API B2B
Solution proposée¶
Implémenter un système de pre-signed URLs S3 avec : - TTL court (5 minutes) - Vérification des droits au moment du téléchargement effectif - Journalisation append-only des événements
Canaux supportés¶
| Canal | Authentification | Cas d'usage |
|---|---|---|
| Application iOS | JWT ProbatioVault | Utilisateur final mobile |
| PWA (web) | JWT ProbatioVault | Utilisateur final navigateur |
| API B2B | OAuth 2.0 / OIDC | ERP, DMS partenaires |
Modèle d'autorisation¶
Coffre personnel¶
Un utilisateur peut télécharger un document si : - Il est owner du document - OU il bénéficie d'un partage actif : - Lecture autorisée - Non expiré - Non révoqué
Coffre entreprise¶
Un utilisateur peut télécharger un document si : - Authentification OIDC valide - Appartenance au tenant propriétaire du document - Rôle autorisé pour l'action de téléchargement - Action rattachée à la personne morale responsable
Caractéristiques de la pre-signed URL¶
| Propriété | Valeur | Justification |
|---|---|---|
| TTL | 5 minutes | Fenêtre minimale acceptable pour un téléchargement |
| Confidentialité | Non-secret | Peut circuler pendant son TTL |
| Single-use | Non | La sécurité repose sur la vérification des droits |
| Scope | GET uniquement | Lecture seule, pas d'upload |
Principe de sécurité : La pre-signed URL n'est pas un secret. La sécurité repose sur : 1. Le TTL court 2. La vérification des droits au moment effectif du téléchargement
Comportement de révocation¶
| Scénario | Comportement |
|---|---|
| Droit révoqué + nouvelle requête | Refusée (HTTP 403) |
| Droit révoqué + téléchargement en cours | Non interrompu |
| URL expirée (TTL) | Refusée (HTTP 403) |
Fenêtre résiduelle acceptée : Un téléchargement déjà initié avant révocation peut se terminer. Cette fenêtre technique est acceptable et documentée.
Journalisation probatoire¶
Événements journalisés¶
| Événement | Journalisé | Justification |
|---|---|---|
| Téléchargement effectif (succès) | Oui | Preuve d'accès |
| Tentative refusée après révocation | Oui | Trace de tentative non autorisée |
| Génération du lien pre-signed | Non | Pas d'accès effectif, bruit inutile |
Structure de l'événement audit¶
Chaque événement est rattaché à : - Acteur : Personne physique identifiée (user_id) - Personne morale : Le cas échéant, organisation responsable (tenant_id) - Document : Référence au document téléchargé (document_id) - Timestamp : Horodatage certifié - Résultat : SUCCESS | DENIED
Stockage dans le registre append-only existant (cohérent avec l'architecture de preuve composite).
Invariants fonctionnels¶
INV-46-01 : La validité d'un téléchargement dépend du TTL ET du maintien du droit d'accès au moment de la requête.
INV-46-02 : La révocation d'un droit empêche toute nouvelle requête de téléchargement.
INV-46-03 : Un téléchargement déjà initié n'est pas interrompu par une révocation ultérieure.
INV-46-04 : Chaque succès ou refus de téléchargement est journalisé dans le registre probatoire append-only.
INV-46-05 : L'événement audit est rattaché à un acteur (personne physique) et, le cas échéant, à une personne morale responsable.
INV-46-06 : Aucun téléchargement ne doit permettre de contourner le modèle Zero-Knowledge. Le contenu déchiffré n'est jamais exposé côté serveur.
Contraintes non fonctionnelles¶
| Contrainte | Justification |
|---|---|
| Compatibilité WORM immuable | Cohérence avec l'architecture de stockage existante |
| Cohérence preuve composite / Merkle | Événements audit intégrés dans l'agrégation périodique |
| Respect RGPD | Minimisation des données journalisées (faits effectifs uniquement) |
| Zero-Knowledge serveur | Le serveur ne voit jamais le contenu en clair |
| Performance mobile | Latence acceptable sur connexion 4G |
Tensions assumées¶
| Tension | Décision | Justification |
|---|---|---|
| Lien circulant vs sécurité | TTL court (5min) + contrôle dynamique | Compromis UX/sécurité acceptable |
| Révocation immédiate vs simplicité | Blocage nouvelles requêtes uniquement | Fenêtre résiduelle technique acceptée |
| Sécurité stricte vs UX | Pas d'interruption download en cours | Évite frustration utilisateur |
| Traçabilité vs RGPD | Journalisation faits effectifs uniquement | Pas de génération de lien loggée |
| Single-use vs performance | Liens réutilisables pendant TTL | Évite re-génération pour retry/resume |
Critères de succès¶
- Un utilisateur autorisé peut télécharger un document via iOS, PWA ou API B2B
- Un utilisateur non autorisé reçoit HTTP 403
- Les droits sont vérifiés au moment du téléchargement effectif (pas seulement à la génération)
- Chaque téléchargement effectif est journalisé avec acteur + document + timestamp
- Chaque refus post-révocation est journalisé
- Le TTL de 5 minutes est respecté
- Les téléchargements en cours ne sont pas interrompus par une révocation
Hors périmètre¶
- Resume partiel (Range requests) — à traiter dans une story dédiée
- Download progress tracking côté client
- Quota de téléchargement par utilisateur
- Notification de téléchargement au owner
- Téléchargement en batch (ZIP)
- Génération de lien à usage unique (single-use)
- Restriction par IP
- Modification des flux de partage existants
Références¶
- Fiche Brevet 2 - Preuve Composite
- Architecture TechLead v4
- PD-43 : Upload sécurisé multipart (pattern similaire)
- PD-60 : Audit document upload (pattern audit)
Auteur : Claude Opus 4.5 (orchestrateur) Date : 2026-02-11 Statut : En attente de validation PO