ADR 0072 – Notes chiffrées
Accepté (2026-10-16, mode autonome)
ADR 0072 – Notes chiffrées
Statut : Accepté (2026-10-16, mode autonome)
Vague 4 du document d’idées : une note sensible (code, mot de passe, santé) dont le serveur ne voit jamais le texte.
Décision
Interface, avec une seule garde côté serveur (« Ajouter à… » refuse un corps qui commence par sbenc:).
- Enveloppe : le corps d’une note chiffrée est la chaîne
sbenc:1:<sel>:<iv>:<texte chiffré>(base64url). AES-GCM 256 bits ; clé dérivée du mot de passe par PBKDF2-SHA-256, 600 000 itérations, sel de 16 octets et vecteur de 12 octets neufs à chaque enregistrement. Web Crypto du navigateur, aucune bibliothèque. - Fiche : un bandeau au-dessus du corps. « Chiffrer cette note » demande un mot de passe saisi deux fois et avertit qu’il est irrécupérable. Une note verrouillée masque l’éditeur et demande le mot de passe ; une fausse saisie est refusée (GCM authentifie). Déverrouillée, le texte et le mot de passe restent en mémoire de la fiche (jamais stockés), le corps est chiffré à chaque enregistrement ; « Retirer le chiffrement » enregistre le texte en clair. Quitter la fiche oublie le mot de passe.
- Enregistrer une note verrouillée (titre, tags, propriétés) renvoie l’enveloppe telle quelle.
- Aperçu au survol : « Contenu chiffré ».
Limites assumées
- Le titre, les tags posés à la main, les propriétés d’aspect et les liens ne sont pas chiffrés ; les liens wiki et
#tagsdu corps ne sont pas extraits (le serveur ne voit que l’enveloppe), la recherche plein texte ne trouve pas le contenu. - L’enveloppe est indexée comme un texte quelconque (bruit sans effet sur la recherche) et apparaît telle quelle dans les exports et sauvegardes : ils restent chiffrés.
- « Ajouter à… » refuse une note chiffrée (400), pour ne pas abîmer l’enveloppe.
- Les suggestions de liens
[[, les mentions et les blocs de vue envoient au serveur des fragments de ce qu’on saisit pendant que la note est déverrouillée : le texte enregistré n’est jamais en clair, mais ces requêtes ne sont pas protégées. - L’enveloppe n’est réécrite que si le texte change (un titre modifié renvoie la même enveloppe, pas de bruit dans le journal). Le mot de passe est normalisé en NFC.
- Mot de passe perdu = note perdue. Pas de récupération, pas de changement de mot de passe (retirer puis rechiffrer).
- Le journal garde la valeur du corps avant/après : les anciennes versions en clair d’une note qui vient d’être chiffrée restent dans l’historique. À purger à la main si besoin.
- Les fichiers joints ne sont pas chiffrés.
Alternatives écartées
- Chiffrement côté serveur : le serveur verrait le texte.
- Verrouillage de session / WebAuthn : plus de confort, plus de pièces ; l’enveloppe versionnée (
1) laisse la place. - Chiffrer aussi le titre : casserait l’arbre, la palette et les liens.
Conséquences
Tests : body-crypto.spec.ts (aller-retour, mauvais mot de passe, enveloppe altérée), node-editor-page-encryption.spec.ts (le serveur ne reçoit que l’enveloppe), node-encryption-panel.spec.ts.