Sécurité

Comment PrivaLog protège ton journal

Dernière mise à jour : 14 octobre 2026

En bref

Tes entrées sont chiffrées sur ton appareil. Sans compte, ton journal reste sur cet appareil et rien n’en est envoyé chez nous. Avec un compte, tes entrées ne nous parviennent que chiffrées. La clé qui les ouvre est verrouillée par une phrase secrète que toi seul connais, et cette phrase secrète ne quitte jamais ton appareil. Nous stockons ce journal, mais nous ne pouvons pas le lire. Si tu perds ta phrase secrète, personne ne peut récupérer ces entrées, nous non plus.

PrivaLog n’est pas open source. Cette page est notre façon de documenter ce que fait le code. Elle décrit les apps iPhone, iPad et Mac et l’app web telles qu’elles fonctionnent aujourd’hui.

Ce qui se passe sur ton appareil

La clé du journal

Quand tu commences un journal, l’app crée une clé du journal : un nombre aléatoire de 256 bits qui chiffre et déchiffre tes entrées. Les entrées sont chiffrées avec AES-256-GCM, une méthode de chiffrement très répandue. Elle détecte aussi les modifications : si une entrée chiffrée a été modifiée, l’app refuse de l’ouvrir au lieu d’afficher un texte altéré.

Un journal sans compte

Si tu commences à écrire sans compte, il n’y a pas de phrase secrète. La clé du journal est conservée dans le trousseau de ton appareil, et le journal s’ouvre comme tu déverrouilles ton appareil : avec Face ID, Touch ID ou le code de ton appareil. C’est un verrou dans l’app, pas une seconde clé : quiconque peut déverrouiller ton appareil peut ouvrir le journal. Sur un appareil sans code, le journal ne se verrouille pas. Rien de ton journal ne nous est envoyé. La clé n’est pas liée à ce seul appareil : une sauvegarde chiffrée de ton iPhone ou de ton iPad, dans iCloud ou sur un ordinateur, contient donc ton journal et sa clé. Le niveau de protection de cette sauvegarde dépend d’Apple : une sauvegarde iCloud n’est chiffrée de bout en bout qu’avec la protection avancée des données. Nous n’en recevons jamais de copie.

La phrase secrète

Quand tu crées un compte, tu choisis une phrase secrète du journal d’au moins 8 caractères. L’app en tire une seconde clé avec Argon2id, une méthode conçue pour rendre chaque essai lent et gourmand en mémoire. Cette seconde clé verrouille ta clé du journal. Seule la clé du journal verrouillée nous est envoyée. Quand tu déverrouilles, ton appareil télécharge la clé verrouillée et fait tout le travail lui-même. Ta phrase secrète ne nous est jamais envoyée. Si tu écrivais déjà sans compte, ton journal garde la même clé : la phrase secrète la verrouille, et tes entrées rejoignent ton compte. Dès lors, la clé sur ton appareil n’est plus incluse dans les sauvegardes de l’appareil ; sur un nouvel appareil, tu utilises ta phrase secrète.

Ce qui est chiffré

Tout ce que tu écris dans une entrée est chiffré ensemble : le titre, le texte, ton humeur, les tags, la marque de favori et les lieux, y compris leurs coordonnées. La date d’une entrée n’est pas chiffrée. Voir Ce que nos serveurs stockent.

Face ID, Touch ID et code

Avec un compte, tu ouvres ton journal avec ta phrase secrète, ou avec Face ID ou Touch ID. Sur un appareil équipé de Face ID ou de Touch ID, cette option s’active dès que tu crées ta phrase secrète ou que tu fusionnes un journal avec ton compte, sauf si tu avais fait un autre choix auparavant. Tu peux la désactiver dans les Réglages. L’app enregistre alors la clé du journal, pas ta phrase secrète, dans le trousseau. Cette copie reste sur cet appareil, n’est pas incluse dans les sauvegardes et ne peut être lue qu’après la réussite de Face ID ou de Touch ID. Le code de l’appareil ne suffit pas : quelqu’un qui t’a vu le taper ne peut toujours pas ouvrir ton journal. Sur un appareil sans Face ID ni Touch ID, tu peux choisir à la place de déverrouiller avec le code de l’appareil. Le système vérifie ton visage ou ton empreinte ; PrivaLog ne les reçoit jamais. Si tu ajoutes ou retires un visage ou une empreinte, la clé enregistrée cesse de fonctionner et tu déverrouilles une fois avec ta phrase secrète.

Combien de temps le journal reste ouvert

Après le déverrouillage, la clé du journal reste dans la mémoire de l’app jusqu’à ce que le journal se verrouille. C’est le cas quand tu le verrouilles toi-même, te déconnectes ou fermes l’app, et quand PrivaLog est resté en arrière-plan pendant la durée choisie dans les Réglages : immédiatement, après 1, 5 ou 15 minutes, après une heure, ou jamais. Par défaut, c’est 1 minute sur iPhone et iPad, et 5 minutes sur Mac. Sur Mac, le journal se verrouille aussi dès que l’écran se verrouille ou se met en veille, sauf si tu as choisi « Jamais ». Quand l’app est en arrière-plan, son écran est masqué, donc le sélecteur d’apps n’affiche pas tes entrées. La déconnexion supprime la clé enregistrée du trousseau. Les copies chiffrées de tes entrées restent sur l’appareil, pour que tu ne perdes pas celles qui ne sont pas encore synchronisées.

Recherche

La recherche tourne sur ton appareil, dans des entrées déjà déchiffrées en mémoire. Aucun index de recherche n’est écrit sur le disque ni envoyé chez nous.

Ce que nos serveurs stockent

Cette partie concerne les comptes. Un journal sans compte n’atteint jamais nos serveurs. Nous utilisons Supabase pour les comptes et le stockage. Notre projet Supabase est hébergé dans l’UE, en Irlande. Chaque compte ne peut accéder qu’à ses propres lignes ; la base de données l’impose.

Adresse e-mail et identifiant de compte
Pourquoi: Pour te connecter et relier tes données à toi
Pouvons-nous le lire ? Oui
Données de connexion : un mot de passe, ou ton identité « Se connecter avec Apple »
Pourquoi: Pour te connecter
Pouvons-nous le lire ? Nous voyons quelle méthode tu utilises. Supabase conserve un mot de passe sous forme hachée, pas en texte lisible.
Entrées chiffrées
Pourquoi: Pour synchroniser ton journal entre appareils
Pouvons-nous le lire ? Non
Dates des entrées
Pourquoi: Pour trouver et synchroniser chaque entrée. Il y a au plus une entrée par jour.
Pouvons-nous le lire ? Oui
Heures de création et de modification, numéros de version et champs techniques nécessaires au déchiffrement
Pourquoi: Pour synchroniser et résoudre les conflits
Pouvons-nous le lire ? Oui. Ils ne disent rien de ce que tu as écrit.
Clé du journal verrouillée
Pourquoi: Pour que tu puisses déverrouiller sur un autre appareil
Pouvons-nous le lire ? Non. Elle est chiffrée avec une clé que seule ta phrase secrète peut produire.
Contrôle de déverrouillage
Pourquoi: Pour que l’app sache si une phrase secrète est correcte
Pouvons-nous le lire ? Non. C’est un court texte connu, chiffré avec ta clé du journal. Il indique si une clé est correcte, pas la clé elle-même.
Sel et paramètres Argon2id
Pourquoi: Pour que chaque appareil transforme ta phrase secrète en la même clé
Pouvons-nous le lire ? Oui. Ils ne sont pas secrets.
Réglages : langue, thème, affichage de la chronologie
Pourquoi: Pour qu’ils te suivent sur tes autres appareils
Pouvons-nous le lire ? Oui
Quand tu as accepté les conditions et confirmé les avertissements sur la phrase secrète et la sauvegarde
Pourquoi: Comme trace de ton accord
Pouvons-nous le lire ? Oui
Statut de l’essai et de l’abonnement, et identifiant de transaction Apple d’un achat
Pourquoi: Pour savoir si la sync cloud est active
Pouvons-nous le lire ? Oui

En résumé : nous voyons que tu as un compte, ton adresse e-mail, les jours où tu as écrit et à quel moment. Nous ne voyons pas ce que tu as écrit.

La sync cloud nécessite un essai actif ou Pro. Sans cela, les nouvelles entrées restent sur ton appareil et ne nous sont pas envoyées. Les entrées déjà synchronisées restent stockées, chiffrées, jusqu’à ce que tu les supprimes ou supprimes ton compte. La clé du journal verrouillée et le contrôle de déverrouillage sont stockés pour chaque compte.

Quand tu supprimes ton compte, ton compte, tes entrées, ta clé verrouillée et ton statut d’abonnement sont supprimés immédiatement de notre base de données. Des copies peuvent subsister pendant une durée limitée dans les sauvegardes de nos prestataires. Les données d’achat conservées par Apple et RevenueCat ne sont pas supprimées par cette action.

Mot de passe du compte et phrase secrète du journal

Avec un compte, PrivaLog utilise deux secrets distincts. Ils ont des rôles différents.

  • Ton mot de passe du compte (ou « Se connecter avec Apple », ou un lien par e-mail) prouve à notre serveur qui tu es. Tu peux le réinitialiser par e-mail. Le réinitialiser n’ouvre pas ton journal.
  • Ta phrase secrète du journal verrouille ta clé du journal. Elle ne quitte jamais ton appareil, nous ne la voyons jamais, et personne ne peut la réinitialiser.

Ton mot de passe du compte est envoyé par une connexion chiffrée pour te connecter, comme sur n’importe quel site. Ta phrase secrète du journal n’est jamais envoyée. Utilise une valeur différente pour chacun.

Services que nous utilisons

Supabase
À quoi il sert: Comptes et stockage chiffré
Ce qu’il voit: Tout ce qui figure dans le tableau ci-dessus, plus les adresses IP
Vercel
À quoi il sert: Héberge ce site et l’app web
Ce qu’il voit: Les adresses IP et les pages demandées. Quand tu te connectes sur le web, ton mot de passe du compte passe par Vercel vers Supabase. Des statistiques de pages vues, uniquement sur la page d’accueil et sans cookies (Vercel Web Analytics).
RevenueCat
À quoi il sert: Statut de l’abonnement Pro dans les apps
Ce qu’il voit: Au lancement de l’app, un identifiant aléatoire créé par RevenueCat et des données techniques comme ton adresse IP et les versions de l’app et du système. Avec un compte, aussi ton identifiant de compte, qui est un identifiant aléatoire, et tes achats. Jamais ton adresse e-mail ni tes entrées.
Apple
À quoi il sert: App Store, paiements et « Se connecter avec Apple »
Ce qu’il voit: Tes achats, et ton identifiant Apple si tu utilises « Se connecter avec Apple ». Rien de ton journal.
Plans d’Apple
À quoi il sert: Recherche de lieux et position actuelle dans les apps, uniquement quand tu ajoutes un lieu
Ce qu’il voit: Ton texte de recherche, ou ta position si tu utilises la position actuelle
OpenStreetMap Nominatim
À quoi il sert: Recherche de lieux dans l’app web, uniquement quand tu ajoutes un lieu
Ce qu’il voit: Ton texte de recherche et ton adresse IP
jsDelivr
À quoi il sert: Images d’emoji dans les exports PDF de l’app web
Ce qu’il voit: Quels emoji figurent dans les entrées exportées, et ton adresse IP

Le lieu que tu choisis n’est stocké que dans l’entrée chiffrée. Les apps et l’app web connectée ne contiennent aucun code d’analyse ni de publicité.

Hors ligne

  • iPhone, iPad et Mac : tu peux lire et écrire sans connexion. Les entrées nouvelles et modifiées sont d’abord chiffrées, gardées sur l’appareil et envoyées quand tu es de nouveau en ligne, si la sync cloud est active.
  • Web : l’app web a besoin d’une connexion pour s’ouvrir. Si elle est déjà ouverte et que la connexion tombe, les entrées que tu enregistres sont chiffrées et gardées dans le navigateur jusqu’à ton retour en ligne. Écrire sur le web nécessite un essai actif ou Pro.

Les copies hors ligne sont chiffrées de la même façon que les copies sur nos serveurs.

La version web

L’app web chiffre dans ton navigateur, avec la même méthode et les mêmes paramètres que les apps : AES-256-GCM via le Web Crypto intégré au navigateur, et Argon2id via une bibliothèque WebAssembly.

Il y a une différence importante. Une app de l’App Store est signée et vérifiée avant de t’arriver, et reste la même jusqu’à ce que tu la mettes à jour. L’app web est envoyée par notre serveur à chaque ouverture. Si ce serveur envoyait du code modifié, ce code pourrait lire ta phrase secrète pendant que tu la tapes. Quand tu utilises la version web, tu nous fais confiance, à nous et à notre hébergeur, à chaque visite.

Certaines mesures limitent ce risque, sans le supprimer. Le site n’est servi qu’en HTTPS. Une Content Security Policy ne permet aux pages de se connecter qu’à notre propre site et aux services cités plus haut, et de charger des images que depuis notre propre site. Elle autorise les scripts inline, dont le framework du site a besoin. Nous n’utilisons pas Subresource Integrity.

Après le déverrouillage, l’app web garde ta clé du journal dans le stockage du navigateur, sous une forme que la page peut utiliser mais ni lire ni copier. L’onglet peut l’utiliser jusqu’à ce que tu verrouilles le journal, te déconnectes ou fermes l’onglet. Il n’y a pas de délai de verrouillage automatique. La déconnexion supprime toutes les clés stockées, mais laisse les copies chiffrées de tes entrées dans le navigateur.

Si tu veux le modèle le plus solide, utilise l’app iPhone, iPad ou Mac.

Si tu perds ta phrase secrète

Il n’y a ni réinitialisation ni récupération. Nous n’avons ni ta phrase secrète ni ta clé du journal, donc nous ne pouvons pas ouvrir ton journal pour toi, et personne d’autre non plus. C’est voulu : une porte d’entrée pour nous en serait aussi une pour d’autres. Sans la phrase secrète, tes entrées ne peuvent plus être lues. Tu peux supprimer ton compte et en créer un nouveau.

  • Garde ta phrase secrète dans un endroit que toi seul contrôles, comme un gestionnaire de mots de passe ou une note écrite rangée en lieu sûr.
  • Face ID et Touch ID ne la remplacent pas. Tu as besoin de la phrase secrète sur un nouvel appareil, après une déconnexion, et après l’ajout ou le retrait d’un visage ou d’une empreinte.
  • Si un appareil est encore déverrouillé, tu peux encore y exporter une copie lisible. Traite ce fichier comme le journal lui-même.
  • Un journal sans compte n’a pas de phrase secrète. Il n’existe que sur cet appareil et dans ses sauvegardes. Si tu perds l’appareil sans sauvegarde, le journal est perdu ; nous n’en avons aucune copie.

Ce contre quoi PrivaLog ne protège pas

  • Quelqu’un qui utilise ton appareil pendant que le journal est ouvert, ou un onglet de navigateur ouvert. Dans les apps, le journal reste ouvert jusqu’à ce qu’il se verrouille, comme décrit plus haut.
  • Quelqu’un qui connaît le code de ton appareil, si tu écris sans compte. Ce journal s’ouvre comme ton appareil se déverrouille.
  • Un logiciel malveillant, une extension de navigateur ou un clavier malveillant sur ton appareil. Il voit ce que tu vois et tapes.
  • Quelqu’un qui connaît ta phrase secrète. Changer de phrase secrète ne change pas la clé du journal elle-même : quelqu’un qui connaissait l’ancienne phrase secrète et a gardé une copie de l’ancienne clé verrouillée pourrait donc encore lire tes entrées.
  • Une phrase secrète faible. Toute personne disposant d’une copie de notre base de données pourrait essayer de la deviner hors ligne. Argon2id rend chaque essai lent, mais une phrase secrète courte ou courante peut quand même être trouvée.
  • Les métadonnées : ton adresse e-mail, les jours où tu as écrit, quand les entrées ont été créées et modifiées, leur nombre, ton statut d’abonnement, et les adresses IP dans les journaux de nos prestataires.
  • Les exports lisibles. Les fichiers PDF, Markdown, KML et JSON lisible sont en clair. Quiconque obtient le fichier peut le lire. Les sauvegardes chiffrées ne sont pas lisibles sans ta clé du journal.
  • Les captures d’écran, le texte copié et tout ce qui sort de l’app.
  • Du code modifié envoyé à l’app web, comme décrit plus haut.
  • Un serveur qui retient des données. Il ne peut pas modifier une entrée sans que l’app s’en aperçoive, ni la déplacer vers un autre jour ou un autre compte. Il pourrait en revanche supprimer des entrées, ou renvoyer une version plus ancienne d’une entrée.
  • Les recherches et positions que tu envoies à Plans d’Apple ou à OpenStreetMap quand tu ajoutes un lieu.

Détails techniques

Entrées

  • AES-256-GCM avec un nonce de 96 bits et un tag d’authentification de 128 bits. Un nouveau nonce aléatoire est généré à chaque chiffrement ; les nonces ne sont jamais réutilisés volontairement.
  • Le texte en clair est un objet JSON contenant les champs de l’entrée. Des additional authenticated data lient chaque ciphertext à son compte, à son entrée et à sa date : {"v":1,"user_id":…,"entry_id":…,"entry_date":…,"crypto_schema_version":…}

Clés

  • Clé du journal (DEK) : 256 bits issus du générateur aléatoire sécurisé du système.
  • Clé de chiffrement de clé (KEK) : Argon2id(phrase secrète, sel). Le sel fait 128 bits aléatoires.
  • Argon2id version 1.3 (0x13), mémoire 65 536 Kio (64 Mio), 3 itérations, parallélisme 1, sortie de 32 octets. Identique sur toutes les plateformes. Les paramètres sont stockés par compte.
  • Enveloppe de la clé : chiffrement AES-256-GCM de la DEK avec la KEK, avec son propre nonce aléatoire de 96 bits et sans additional data.
  • Contrôle de déverrouillage : chiffrement AES-256-GCM d’un texte fixe avec la DEK, avec son propre nonce aléatoire.
  • Changer de phrase secrète crée un nouveau sel et une nouvelle KEK et réenveloppe la même DEK. Les entrées ne sont pas rechiffrées.
  • Les journaux créés avant l’introduction de l’enveloppe de clé utilisent directement la sortie d’Argon2id comme DEK. Elle est stockée enveloppée dans le même format.

Bibliothèques

  • iPhone, iPad et Mac : Apple CryptoKit pour AES-GCM ; Argon2Swift sur l’implémentation de référence d’Argon2 (phc-winner-argon2) ; le framework Security pour les octets aléatoires et le trousseau ; LocalAuthentication pour Face ID et Touch ID.
  • Web : l’API Web Crypto pour AES-GCM et les octets aléatoires ; hash-wasm (WebAssembly) pour Argon2id.

Stockage sur l’appareil

  • Journal avec compte, déverrouillage par Face ID ou Touch ID : élément du trousseau lisible uniquement quand l’appareil est déverrouillé (kSecAttrAccessibleWhenUnlockedThisDeviceOnly), jamais synchronisé ni restauré sur un autre appareil, et seulement après la réussite de Face ID ou de Touch ID (biometryCurrentSet). Sur les appareils sans biométrie, le code de l’appareil peut être choisi à la place (userPresence).
  • Journal sans compte : la DEK est un élément du trousseau lisible quand l’appareil est déverrouillé (kSecAttrAccessibleWhenUnlocked), sans contrôle d’accès, et donc incluse dans les sauvegardes chiffrées de l’appareil. Avant d’ouvrir le journal, l’app demande Face ID, Touch ID ou le code de l’appareil (deviceOwnerAuthentication). Les entrées utilisent le même format, avec l’identifiant aléatoire du journal dans le champ user_id.
  • Passage à un compte : chaque entrée est déchiffrée, chiffrée à nouveau avec l’identifiant du compte dans les additional authenticated data, puis vérifiée par déchiffrement avant l’envoi. Avec un nouveau compte, la DEK reste la même ; en cas de fusion avec un compte existant, les entrées sont chiffrées avec la DEK de ce compte. Les données locales ne sont supprimées qu’une fois chaque entrée confirmée et chaque jour présent des deux côtés tranché.
  • Copies hors ligne : uniquement du ciphertext, dans le stockage propre de l’app sur les appareils Apple et dans IndexedDB dans le navigateur.
  • Session web : la DEK est une clé Web Crypto non exportable dans IndexedDB ; sessionStorage ne contient qu’un identifiant aléatoire pour l’onglet. Les clés des onglets fermés sans verrouillage restent jusqu’au prochain déverrouillage ou à la prochaine déconnexion dans ce navigateur.

Serveur

  • La row-level security de Postgres limite chaque table aux lignes du compte connecté.
  • Toutes les connexions utilisent HTTPS. Ce site envoie un en-tête Strict-Transport-Security.

Signaler un problème de sécurité

Si tu trouves un problème de sécurité, écris à privacy@nextdevstudio.com. Indique les étapes pour le reproduire, et laisse-nous un délai raisonnable pour le corriger avant de publier des détails.

Dernière mise à jour

14 octobre 2026. Quand nous changeons le fonctionnement du chiffrement, du stockage ou des services externes, nous mettons cette page à jour. Voir aussi la politique de confidentialité.

Retour à l’accueil