Skip to content

feat(exploitation): sauvegarde chiffrée, registre horodaté et alertes - #20

Merged
PhilippeVienne merged 1 commit into
mainfrom
feat/exploitation
Sep 27, 2026
Merged

PhilippeVienne merged 1 commit into
mainfrom
feat/exploitation

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Trois ajouts à la tâche quotidienne (cron/purge.php, déjà planifiée à 3 h 23).

Sauvegarde chiffrée (src/sauvegarde.php, php bin/sauvegarde.php)

  • Copie cohérente de la base (VACUUM INTO, connexion dédiée), gzip, chiffrement CMS AES-256 pour le seul certificat src/sauvegarde-certificat.pem, envoi en pièce jointe à backup_to (défaut : contact).
  • Le serveur n'a que le certificat public : il ne peut pas relire ses sauvegardes. La clé privée est sur le poste de l'administrateur (~/.config/otspi/sauvegarde/cle-privee.pem).
  • send_mail() gère désormais les pièces jointes (multipart/mixed).

Registre horodaté (public/registre.php, lien en pied de page)

  • Chaque nuit : total, noms publiés et SHA-256 de la liste publique exacte (signataires.php partage la même sérialisation), chaînés à l'entrée précédente, horodatés (RFC 3161, staging). Vérification de la chaîne et des jetons à l'affichage ; téléchargement .json / .tsr ; mode d'emploi (sha256sum, openssl, démo).
  • Aucun nom conservé : le droit au retrait reste entier.

Alertes

  • Horodatage en échec, registre en attente ou rompu, sauvegarde non envoyée, erreur inattendue → un e-mail à contact (au plus un par passage).

Vérifié : bash tests/flow.sh : sauvegarde déchiffrée avec la clé et restaurée (même nombre de lignes), illisible sans clé, e-mail sans donnée personnelle ; empreinte du registre identique à la liste servie ; openssl ts -verify OK ; chaînage sur deux jours ; autorité en panne → alerte ; registre falsifié → « chaînage rompu » affiché et alerte.

- Sauvegarde quotidienne : copie cohérente (VACUUM INTO), compressée,
  chiffrée (CMS, AES-256) pour le seul certificat versionné, envoyée en
  pièce jointe ; le serveur ne peut pas la relire. send_mail() gère les
  pièces jointes (multipart/mixed).
- Registre public horodaté (registre.php) : entrée quotidienne avec le
  total, les noms publiés et l'empreinte de la liste publique, chaînée à
  la précédente et horodatée (RFC 3161). Aucun nom conservé.
  signataires.php et le registre partagent la même sérialisation.
- Alertes : au moindre problème de la tâche quotidienne (horodatage,
  registre, sauvegarde), un e-mail à l'adresse de contact.

Co-authored-by: Claude <noreply@anthropic.com>
@PhilippeVienne
PhilippeVienne merged commit 53b3856 into main Sep 27, 2026
3 checks passed
@PhilippeVienne
PhilippeVienne deleted the feat/exploitation branch September 27, 2026 10:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant