Securite et Conformite
Modele de securite, chiffrement, controles d'acces, conformite Loi 25, SOC2, audit trail et protection des donnees de ConformVault
Securite et Conformite
Ce document decrit le modele de securite de ConformVault, les controles en place, les mecanismes de conformite reglementaire et les donnees personnelles traitees. Il est destine aux audits externes et aux evaluations de securite.
Modele de chiffrement
ConformVault utilise une architecture de chiffrement hybride a 4 couches. Le principe fondamental est le Zero-Knowledge : lorsque le chiffrement de bout en bout est active, le serveur n'a jamais acces aux donnees en clair ni aux cles de chiffrement.
Couche 1 : Chiffrement en transit (TLS 1.3)
Toutes les communications entre les clients et les serveurs utilisent TLS 1.3. Les certificats sont geres automatiquement par le Nginx Ingress Controller du cluster Kubernetes OVH.
Couche 2 : Chiffrement au repos (S3 OVH)
Les fichiers stockes dans les buckets S3 OVH sont chiffres au repos par le fournisseur. ConformVault ajoute une couche supplementaire de chiffrement applicatif.
Couche 3 : Chiffrement applicatif (AES-256-GCM)
Chaque fichier est chiffre avec une cle DEK (Data Encryption Key) unique et aleatoire :
- Algorithme : AES-256-GCM (chiffrement authentifie)
- Nonce : 12 octets, genere aleatoirement par fichier
- Tag d'authentification : 16 octets, assure l'integrite du fichier
- Mode chunked : Les fichiers sont decoupes en blocs (1 MB < 10 MB, 5 MB pour 10-100 MB, 10 MB > 100 MB). Chaque bloc a un nonce derive du nonce de base par XOR avec l'index du bloc (big-endian, 4 derniers octets)
Ce chiffrement est effectue cote client (dans le navigateur via Web Crypto API ou dans l'application desktop via le module Rust aes-gcm) dans le mode E2E. Le serveur ne voit jamais les donnees en clair.
Couche 4 : Protection des cles (RSA-4096 + KMS OVH)
Les cles DEK sont protegees par un systeme asymetrique :
- RSA-4096 : Chaque organisation possede une paire de cles RSA-4096
- RSA-OAEP : Enveloppement de la cle DEK avec SHA-256 pour le hachage OAEP et MGF1. Le label OAEP est vide (critique pour l'interoperabilite entre les clients)
- KMS OVH : La cle privee RSA est chiffree par le service KMS d'OVH avant stockage dans PostgreSQL
- Le client web, le client desktop et les SDKs produisent des sorties chiffrees byte-compatibles
Schema de chiffrement
Fichier original
|
v
[AES-256-GCM chunked] <-- DEK (cle aleatoire 256 bits)
| |
v v
Fichier chiffre [RSA-4096 OAEP] <-- Cle publique de l'organisation
(stocke dans S3) |
v
DEK chiffree
(stockee dans PostgreSQL)
Cle privee RSA
|
v
[KMS OVH WrapKey]
|
v
Cle privee chiffree + Base64
(stockee dans PostgreSQL)Derivation de cle (mode E2E cote client)
Lorsque l'utilisateur active le mode Zero-Knowledge :
- Le mot de passe est derive via PBKDF2 (600 000 iterations) pour obtenir une cle maitre
- La cle maitre est derivee via HKDF pour obtenir la cle de chiffrement de fichier
- Le chiffrement est effectue dans des Web Workers (pool de 4) pour ne pas bloquer l'interface
Authentification
JWT (JSON Web Tokens)
- Access token : Duree de vie de 15 minutes
- Refresh token : Utilise pour obtenir un nouveau access token
- Claims :
sub(ID utilisateur),email,role,client_id,exp,iss - Signature : HMAC-SHA256 avec cle secrete configuree par variable d'environnement
Authentification multi-facteurs (MFA)
- TOTP : Algorithme RFC 6238, codes a 6 chiffres
- Activation : Volontaire par l'utilisateur via son profil
- Verification : Requise a chaque connexion si activee
SSO (Single Sign-On)
- Fournisseur : Zitadel (OIDC/OpenID Connect)
- Flux : Authorization Code avec PKCE
- Integration : Le backend Python gere le flux complet et echange les tokens avec l'API Go
Verrouillage de compte
- Seuil : 5 tentatives de connexion echouees consecutives
- Duree : Verrouillage de 15 minutes
- Tracabilite : Chaque tentative est enregistree dans l'audit trail
Controles d'acces
Modele RBAC
| Role | Perimetre | Acces |
|---|---|---|
superadmin | Plateforme entiere | Administration globale, toutes les organisations, configuration |
msp | Organisations assignees | Gestion des clients, dashboard MSP, support |
client_admin | Son organisation | Fichiers, utilisateurs, partage, facturation, parametres |
client_user | Ses propres fichiers | Acces limite a ses fichiers et profil |
Isolation multi-tenant
- Chaque organisation possede son propre bucket S3 dedie
- Les donnees sont isolees au niveau de la base de donnees par
client_id/org_id - Les cles de chiffrement RSA-4096 sont uniques par organisation
- Les requetes API verifient systematiquement l'appartenance de la ressource a l'organisation de l'utilisateur
Permissions sur les dossiers
Des permissions granulaires par dossier peuvent etre definies (lecture, ecriture) avec support des permissions temporaires (expiration automatique).
Protection contre les menaces
Rate limiting
- Endpoints d'authentification : 20 requetes/minute
- Mutations de facturation : 10 requetes/minute par organisation
- Implementation : Redis distribue avec script Lua atomique, fallback in-memory
Protection CSRF
- ContentTypeMiddleware : Rejet des Content-Type "simples" (text/plain, x-www-form-urlencoded)
- CORS strict : Origines autorisees explicitement listees, pas de wildcard en production
- En-tetes de securite : HSTS, X-Frame-Options DENY, Content-Security-Policy, Permissions-Policy, X-Permitted-Cross-Domain-Policies
Protection contre l'injection SQL
- Toutes les requetes SQL utilisent des parametres ($1, $2...) via asyncpg et le driver Go
- Les champs dynamiques dans les requetes UPDATE sont valides contre des listes blanches (whitelist)
- Validation des entrees via Gin binding (Go) et Pydantic (Python)
Taille des requetes
- Limite globale : 500 MB (MaxBodySizeMiddleware)
- Limite par defaut : 1 MB
- Uploads : 25 MB (configurable)
Antivirus
- ClamAV : Scan optionnel des fichiers uploades avant stockage
- Activation : Via la variable d'environnement
CLAMAV_ENABLED - Deploiement : Pod dedie dans le cluster Kubernetes
Sanitisation des erreurs
Les reponses d'erreur en production sont sanitisees : les erreurs 5xx retournent un message generique sans details d'implementation interne.
Audit trail
Chaque action significative est enregistree dans la table audit_logs :
| Champ | Description |
|---|---|
user_id | Utilisateur effectuant l'action |
action | Type d'action |
resource_type | Type de ressource (file, folder, share_link, etc.) |
resource_id | Identifiant de la ressource |
details | Details JSON de l'action |
ip_address | Adresse IP (forwarding via PROXY protocol) |
user_agent | Agent utilisateur |
created_at | Horodatage |
Actions tracees
| Action | Description |
|---|---|
login | Connexion reussie |
login_failed | Tentative de connexion echouee |
account_locked | Compte verrouille apres 5 echecs |
file_upload | Upload d'un fichier |
file_download | Telechargement d'un fichier |
file_delete | Suppression d'un fichier |
folder_create / folder_delete | Operations sur les dossiers |
share_link_create / share_link_access / share_link_download / share_link_upload | Cycle de vie des liens de partage |
consent_accepted | Acceptation du consentement Loi 25 |
transfer_create | Creation d'un transfert |
user_create / user_password_reset | Gestion des utilisateurs |
L'API d'audit supporte la recherche, l'export et la detection d'anomalies.
Conformite reglementaire
Loi 25 (Quebec)
La Loi 25 sur la protection des renseignements personnels dans le secteur prive impose des obligations auxquelles ConformVault repond :
| Exigence Loi 25 | Implementation ConformVault |
|---|---|
| Consentement eclaire | Texte de consentement configurable par organisation, affiche avant tout acces via lien de partage. Acceptation tracee dans l'audit trail |
| Minimisation des donnees | Chiffrement E2E : le serveur n'a jamais acces aux donnees en clair |
| Droit d'acces et de rectification | Les utilisateurs consultent et suppriment leurs fichiers |
| Notification de breche | Audit trail complet pour investigation |
| Residence des donnees | Stockage au Quebec (OVH BHS, Beauharnois) |
| Responsable des renseignements | Chaque organisation a un client_admin responsable |
| Attestation de conformite | Endpoint API pour generer un PDF d'attestation Loi 25 (/attestation/loi25) |
| Export des donnees | Endpoint RGPD/Loi 25 pour exporter toutes les donnees d'un utilisateur (/users/{id}/export) |
PIPEDA (Canada)
- Responsabilite : Chaque organisation a un administrateur responsable
- Consentement : Mecanisme de consentement pour les liens de partage
- Limitation de l'utilisation : Isolation des donnees par organisation
- Mesures de securite : Chiffrement E2E, MFA, rate limiting
RGPD (Union Europeenne)
- Base legale : Consentement explicite pour les liens de partage
- Droit a l'effacement : Suppression des fichiers et comptes, corbeille avec soft-delete
- Portabilite : Export des fichiers
- Residence : Option de stockage en France (OVH GRA, Gravelines)
SOC 2
ConformVault est concu pour respecter les principes SOC 2 Trust Services Criteria :
- Securite : Chiffrement multicouche, RBAC, audit trail, rate limiting
- Disponibilite : Deploiement Kubernetes avec replicas, health checks, monitoring Prometheus
- Integrite du traitement : Tag GCM d'authentification, SHA-256 checksum, ClamAV
- Confidentialite : Zero-Knowledge E2E, isolation multi-tenant, KMS
- Vie privee : Consentement Loi 25, export/suppression des donnees
Donnees personnelles traitees
| Categorie | Donnees | Base legale | Retention |
|---|---|---|---|
| Identification | Courriel, nom, prenom | Execution du contrat | Duree du compte |
| Organisation | Nom, adresse de l'entreprise | Execution du contrat | Duree du compte |
| Authentification | Hash du mot de passe (bcrypt), secret MFA | Execution du contrat | Duree du compte |
| Facturation | Stripe customer ID, methodes de paiement (tokenisees) | Obligation legale | 7 ans |
| Fichiers | Metadonnees (nom, taille, type MIME). Contenu chiffre E2E | Execution du contrat | Jusqu'a suppression par l'utilisateur |
| Audit | Adresse IP, user agent, horodatage des actions | Interet legitime (securite) | Politique de retention configurable |
| Support | Messages de tickets | Execution du contrat | Duree du compte |
Audit de securite
Un audit de securite complet a ete realise en fevrier 2026 (v0.4.30 / v0.4.31). Resultats :
- 29 constatations corrigees : 2 critiques + 8 elevees + 8 moyennes + 11 basses
- Corrections critiques : Suppression des credentials hardcodes, migration vers variables d'environnement
- Corrections elevees : Verification SSL centralisee, suppression des logs de donnees sensibles, injection SQL corrigee (parametrisation + listes blanches)
- Corrections moyennes : En-tetes de securite (HSTS, CSP, X-Frame-Options), CORS durci, limite de taille des requetes
- Risques acceptes documentes : JWT en localStorage (refactoring majeur differe), timeouts HTTP client (amelioration incrementale)
La baseline de securite est documentee dans SECURITY_REMEDIATION.md avec la classification (REMEDIATED, FALSE POSITIVE, ACCEPTED RISK) de chaque constatation.