Vue d'ensemble
Cette page décrit les mesures techniques et organisationnelles (TOM) mises en œuvre par Ordine AI pour protéger les données de ses utilisateurs. Elle complète la Politique de confidentialité (ce qui est traité, pourquoi) en documentant comment ces données sont protégées techniquement.
Ordine AI est conçu pour les PME suisses qui traitent des communications professionnelles sensibles (cabinets juridiques, fiduciaires, agences). Les choix d'architecture ci-dessous reflètent cette exigence : minimisation des données, chiffrement au repos colonne par colonne, hébergement en zone européenne / suisse, et un seul jeu de clés sous le contrôle d'Ordine.
Chiffrement au repos
Les colonnes sensibles de notre base Supabase (PostgreSQL) sont chiffrées au repos avec AES-GCM-256 (NIST SP 800-38D), la même primitive utilisée par les institutions financières. Le chiffrement est appliqué côté application : la base ne voit jamais le clair, et un accès direct à la base (compromission de Supabase, fuite de sauvegarde, exposition d'une clé de service) n'expose que des chiffrés inintelligibles.
Colonnes chiffrées :
- Réponses envoyées et destinataires (table
email_logs) - Résumés IA et signaux d'action (table
email_summaries) - Synthèses de fil et briefings (table
conversation_summaries) - Mémoire d'objections par contact (table
contact_objection_memory) - Résumés matinaux (table
daily_digests) - Journaux d'audit (table
audit_logs) - Jetons OAuth Gmail / Outlook (table
linked_accounts)
La clé de chiffrement (TOKEN_ENCRYPTION_KEY, 32 octets) est stockée dans Google Cloud Secret Manager, restreinte au seul compte de service du backend Cloud Run. Aucun humain n'y a accès en routine ; les accès exceptionnels (rotation, investigation) sont tracés par les journaux GCP.
La rotation de clé est supportée par un préfixe de version (v1:, v2:, …) intégré au chiffré lui-même — voir backend/app/core/crypto.py et docs/SECURITY-KEYS.md dans le dépôt source.
Chiffrement en transit
Toutes les communications sont chiffrées via TLS 1.3 (ou 1.2 minimum quand le client ne supporte pas 1.3). L'en-tête HTTP Strict Transport Security (HSTS) est servi avec max-age=63072000; includeSubDomains; preload, et le domaine ordine-ai.ch est inscrit au registre HSTS preload de Chromium / Firefox / Safari.
Les certificats sont émis par Let's Encrypt via Vercel (frontend) et Google-managed certificates via Cloud Run (backend), avec renouvellement automatique.
Authentification
L'authentification utilisateur passe par Supabase Auth avec OAuth Google et Microsoft. Aucun mot de passe n'est stocké côté Ordine. Les JWT émis par Supabase sont signés en HS256 ; le backend les vérifie à chaque requête en validant la signature, l'émetteur (iss), l'audience (aud=authenticated) et le rôle (role=authenticated).
Les jetons OAuth des fournisseurs de messagerie (Gmail, Outlook), qui nous permettent de lire et d'envoyer des e-mails au nom de l'utilisateur, sont chiffrés au repos (voir section Chiffrement au repos) et ne sont jamais transmis au navigateur.
Contrôle d'accès (RLS)
Chaque table contenant des données utilisateur est protégée par Row-Level Security (RLS) au niveau PostgreSQL. Une politique stricte (auth.uid() = user_id) garantit qu'un utilisateur ne peut jamais lire ou modifier les données d'un autre, même en cas de bug applicatif. RLS est appliqué côté base, donc indépendant du code backend.
Le compte de service Supabase (service-role key) utilisé par le backend bypasse RLS pour les opérations légitimes (insertions cron, jobs d'arrière-plan). Cette clé est stockée dans Google Cloud Secret Manager, jamais exposée au frontend.
Résidence des données
Base de données : Supabase, région UE-Central (Francfort, Allemagne). Sauvegardes chiffrées dans la même région.
Backend : Google Cloud Run, région europe-west6 (Zurich, Suisse).
Frontend : Vercel, distribution edge en zone européenne (réseau anycast — l'origine d'exécution dépend du point de présence le plus proche de l'utilisateur, tous en UE).
Aucune donnée client n'est stockée durablement hors de l'Union européenne ou de la Suisse, hormis les transits vers les sous-traitants énumérés ci-dessous.
Sous-traitants
La liste complète des sous-traitants (Anthropic, Supabase, Vercel, Google Cloud, Stripe, ImprovMX, PostHog) avec leur région d'hébergement et le périmètre de données traitées est publiée sur la page Sous-traitants.
Tout changement de cette liste fait l'objet d'un préavis de 30 jours conformément au DPA.
Journalisation et audit
Les opérations sensibles (envoi d'e-mail, suppression de compte, modification d'abonnement, déliaison de boîte mail) sont consignées dans une table audit_logs dédiée. Chaque entrée contient l'action, l'ID de la ressource, l'adresse IP du client et l'horodatage. Les métadonnées libres sont chiffrées au repos.
Les utilisateurs peuvent demander une copie complète de leurs données (incluant les journaux d'audit pertinents) via le flux d'export disponible dans Paramètres → Compte conformément à l'art. 25 LPD.
Signalement de vulnérabilité
Si vous découvrez une vulnérabilité de sécurité, merci de la signaler par e-mail à security@ordine-ai.ch.
Nous nous engageons à accuser réception sous 48 heures ouvrées, à investiguer et tenir informé le signaleur des progrès, et à ne pas engager de poursuites contre les chercheurs respectant un cadre de divulgation responsable (pas d'exfiltration de données utilisateur, pas d'atteinte à la disponibilité du service, divulgation publique uniquement après coordination).