Comment nous protégeons les fichiers de vos patients
Résumé en langage clair des contrôles en production.
Chiffrement au repos
Chaque fichier téléversé est chiffré au repos avec AES-256-GCM au moyen du chiffrement côté serveur fourni par AWS Key Management Service (SSE-KMS). La clé de chiffrement est une CMK gérée par le client dans notre compte AWS, pas une clé partagée gérée par AWS. Chaque objet S3 reçoit une clé de chiffrement de données unique dérivée de la CMK par les S3 Bucket Keys, de sorte que la compromission d'une DEK ne touche qu'un seul transfert.
La politique du bucket refuse tout téléversement qui ne présente pas l'en-tête SSE-KMS correct pour notre CMK, et refuse tout appel à l'API S3 effectué en HTTP clair. Le chiffrement n'est pas facultatif et n'est pas appliqué uniquement côté client — trois couches indépendantes empêchent le texte clair d'atterrir.
Chiffrement en transit
Toutes les communications vers et depuis Humenis utilisent TLS 1.3. La politique Strict Transport Security est appliquée avec un max-age de 2 ans, includeSubDomains et preload. Les navigateurs refusent toute rétrogradation vers HTTP clair pour le domaine.
Authentification du destinataire à deux facteurs
La possession du lien de téléchargement du destinataire ne suffit pas pour accéder à un fichier. Lorsqu'un destinataire ouvre le lien, il doit demander un code numérique à usage unique, livré à l'adresse courriel du destinataire et valide pendant dix minutes. La plateforme permet au plus cinq tentatives de vérification par code; ensuite, un nouveau code doit être demandé.
Suppression automatique
L'application supprime l'objet S3 immédiatement dès que le flux de téléchargement du destinataire est terminé. Si l'application n'arrive jamais à supprimer (plantage de processus, problème réseau, bogue), une politique de cycle de vie S3 supprime chaque objet après 24 heures, quoi qu'il advienne. C'est une garantie ferme au niveau du stockage, indépendante de l'application.
Piste de vérification
Chaque événement significatif est ajouté à un journal de vérification : création du transfert, fin du téléversement, demande de code, vérification du code, échec de code, téléchargement du fichier, suppression du fichier. Chaque ligne consigne l'acteur, l'adresse IP, la chaîne d'agent utilisateur et un horodatage. Le journal est conservé pendant 7 ans conformément au principe de responsabilité de la LPRPDE, et ne fait l'objet que d'ajouts par convention.
Résidence des données
Toutes les charges utiles de fichiers, les métadonnées de transfert, les renseignements des comptes et les journaux de vérification sont stockés dans AWS ca-central-1 (Montréal). Nous ne répliquons aucune de ces données hors du Canada.
Deux sous-traitants exercent leurs activités hors du Canada et ne reçoivent que des métadonnées (pas de contenu de fichier) :
- Resend (courriel transactionnel) — reçoit les adresses courriel du destinataire et de l'expéditeur, les noms de patients dans le corps du courriel et les codes à usage unique
- Stripe (facturation) — reçoit les détails de paiement et le courriel du compte
Identité et accès
Les mots de passe sont hachés avec argon2id (mémoire 19 Mio, deux itérations, un seul fil — référence OWASP 2024). La vérification du courriel est requise avant que le tableau de bord ne soit débloqué. La réinitialisation du mot de passe utilise des jetons à usage unique avec une expiration d'une heure.
L'accès AWS du backend se fait au moyen d'un principal IAM à privilèges minimaux limité à un seul bucket et à une seule clé KMS. La politique IAM n'accorde aucun joker, aucune ressource « * », aucune action d'administration. La feuille de route prévoit la migration vers une assumption de rôle basée sur OIDC depuis Vercel afin qu'aucune clé d'accès à long terme n'existe.
Durcissement de l'application
- Une politique de sécurité du contenu (CSP) restreint les origines de scripts, les soumissions de formulaires en ligne et les cibles de connexion (notamment : les XHR sortants sont restreints à *.s3.ca-central-1.amazonaws.com uniquement)
- frame-ancestors « none » + X-Frame-Options DENY — Humenis n'est jamais intégrable
- Anti-énumération sur les points d'entrée d'authentification (mot de passe oublié retourne la même réponse pour les courriels connus et inconnus; la connexion exécute une vérification de hachage factice pour les comptes inexistants afin d'égaliser le temps)
- Limites de débit par transfert sur les demandes de codes de téléchargement (5 par transfert par heure)
- Toutes les entrées validées côté serveur, y compris la liste blanche de types MIME (DICOM, PDF, JPEG, PNG) et le plafond de 5 Go par fichier
Posture de conformité
Humenis est conçu spécifiquement pour l'environnement réglementaire canadien.
- LPRPDE — référence fédérale pour la gestion des renseignements personnels
- Loi 25 du Québec — exigences supplémentaires en matière de consentement, d'avis d'atteinte à la confidentialité et de responsable de la protection des renseignements personnels pour les transferts impliquant des résidents du Québec
- Lois provinciales sur les renseignements en matière de santé (PHIPA en Ontario, HIA en Alberta, etc.) — applicables à la clinique dentaire en tant que dépositaire; Humenis fournit les mesures de protection techniques nécessaires pour soutenir la conformité de la clinique
Nous ne sommes pas réglementés par HIPAA (nous exerçons au Canada, pas aux États-Unis) et n'offrons pas d'entente d'associé commercial (BAA).
Divulgation responsable
Si vous croyez avoir trouvé une vulnérabilité de sécurité, écrivez à security@dentalvault.ca avec les détails et les étapes de reproduction. Nous nous engageons à accuser réception des rapports dans les 48 heures et à travailler de bonne foi avec les chercheurs agissant de bonne foi — nous n'engagerons pas de poursuites contre des recherches qui :
- N'accèdent pas, ne modifient pas et ne détruisent pas les données d'autres utilisateurs
- Ne dégradent pas le service pour les autres utilisateurs
- Ne divulguent pas publiquement le problème avant que nous ayons eu une occasion raisonnable d'y remédier
Réponse aux incidents
En cas d'incident de confidentialité touchant des renseignements personnels, nous allons :
- Contenir l'incident et préserver les preuves
- Aviser les personnes concernées et l'autorité de surveillance applicable (CPVP en vertu de la LPRPDE; CAI en vertu de la Loi 25) aussitôt que possible après avoir déterminé un risque réel de préjudice sérieux
- Effectuer un examen post-incident et publier un résumé caviardé