Manifeste

Pourquoi Cyora existe, et pourquoi son architecture cryptographique rend la trahison de ses utilisatrices techniquement impossible.

1. Le problème

Quand tu utilises Flo, Clue, Stardust ou n'importe quelle autre app de cycle commerciale, tes données — règles, douleurs, humeur, médicaments, partenaires sexuels parfois — sont stockées en clair sur les serveurs de l'éditeur. Tu fais confiance à leur politique de confidentialité.

Cette confiance a déjà été trahie publiquement :

Le problème de fond est structurel : tant qu'un éditeur a accès à tes données en clair, il peut les partager. Volontairement (modèle publicitaire, partenariats), ou contre sa volonté (failles de sécurité, ordres judiciaires, rachats par un acteur moins scrupuleux).

2. Notre invariant

Cyora est conçue pour qu'on ne puisse pas te trahir, même si on le voulait. Pas grâce à une promesse marketing, mais grâce à une architecture cryptographique :

Quand tu actives la sync entre tes appareils : ton journal est chiffré sur ton téléphone avec une clé dérivée de ta passphrase, avant tout envoi vers nos serveurs. Le serveur reçoit un blob opaque qu'il ne peut pas lire.

Si tu perds ta passphrase, personne ne récupère tes données — pas même nous. C'est le prix à payer pour la garantie cryptographique : on ne stocke pas de mécanisme de récupération côté serveur, sinon on aurait l'accès en clair.

3. Comment ça marche concrètement

Pipeline de chiffrement

  1. L'app sérialise ton journal en JSON.
  2. Elle dérive une clé à partir de ta passphrase via Argon2id (memory 64 MiB, 3 itérations) — algo officiel de hashing de mots de passe, résistant aux attaques par GPU.
  3. Elle chiffre avec AES-256-GCM (chiffrement authentifié, détecte toute corruption ou altération du blob).
  4. Sel et nonce sont générés aléatoirement (Random.secure()) et stockés en clair en préfixe du blob.
  5. Le blob final est uploadé vers Supabase Storage sous le préfixe journal-blobs/<ton_user_id>/snapshot.bin.
  6. Une Row Level Security policy sur le bucket garantit que seul ton compte peut lire ce blob, même si quelqu'un connaissait ton user_id.

Format du blob

[version:1B][salt:16B][nonce:12B][ciphertext+mac:variable]

Quand tu télécharges depuis un autre appareil

Argon2id reproduit la même clé à partir de ta passphrase et du sel. AES-GCM déchiffre. Le MAC vérifie l'intégrité. Si la passphrase est mauvaise ou le blob corrompu, le déchiffrement échoue avec erreur — aucune donnée déchiffrée n'est exposée.

4. Pourquoi ça marche aussi sur le mobile (sans sync)

Si tu n'actives pas la sync, tes données ne quittent jamais ton appareil. Aucun serveur n'est impliqué. La base de données est SQLite locale, protégée par les mécanismes natifs du système (chiffrement disque par défaut sur Android 6+ avec mot de passe d'écran de verrouillage).

Désinstaller l'app efface tout. C'est volontaire.

5. Comment vérifier que ces affirmations sont vraies

Le code source de Cyora est public sous licence AGPL-3.0 sur github.com/jpbenoit/cyora. N'importe qui — toi, un journaliste, un développeur, ton ou ta partenaire — peut :

La licence AGPL-3.0 garantit que toute version dérivée déployée comme service en ligne devra publier ses modifications. Tu ne peux pas hériter du code de Cyora pour faire un Cyora-with-ads sans rendre ce fork public.

6. Pourquoi on est payant

Cyora se vend ouvertement : 4,99 €/mois, 39 €/an (35 % d'économie), ou 99 € lifetime. Trial 14 jours sans CB requise.

C'est ce qui nous permet de refuser la pub et la revente. Cohérent avec le modèle de Proton, Bitwarden, Standard Notes — tous privacy-first et payants.

Le paiement se fait via Stripe en externe, pas via les achats intégrés Apple/Google. Pour deux raisons : préserver ton anonymat (pas de lien entre ton achat et ton compte Apple/Google), et éviter la commission de 30 % qu'Apple et Google prélèvent sur les abos in-app.

La version gratuite est complète sur le suivi local. Premium ajoute la sync entre appareils, le rapport PDF gynéco, l'historique illimité, les palettes alternatives. Il n'y a pas de freemium-trompeur où on dégrade la version gratuite pour te forcer à payer.

7. Ce qu'on ne fait pas

8. Limites assumées

Pour qu'il n'y ait pas de surprise :