Skip to content

feat(signatures): preuve horodatée par l'autorité de staging d'OTSPI - #18

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

PhilippeVienne merged 1 commit into
mainfrom
feat/horodatage

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Chaque signature confirmée est horodatée (RFC 3161) par l'autorité de staging d'OTSPI (api.staging.open-eidas.eu), et son auteur reçoit un lien vers sa preuve, vérifiable par lui-même.

  • Attestation : JSON figé à la confirmation (manifeste, nom, fonction, organisation, choix de publication, date, sel aléatoire ; jamais l'e-mail). Son empreinte SHA-256 est horodatée.
  • Page de preuve (preuve.php, lien personnel, FR/EN, sans mesure d'audience) : statut « Horodatage vérifié », date certifiée, empreinte, série, unité et CA, contrôles effectués, téléchargement .json / .tsr, bouton vers le vérificateur de demo.open-eidas.eu, commande openssl ts -verify, mention « staging, non qualifié, sans valeur juridique ».
  • Vérification serveur sans dépendance (src/horodatage.php) : DER, signature CMS, empreintes, usage Time Stamping, chaîne épinglée src/tsa-staging-ca.pem.
  • Robustesse : autorité injoignable (5 s max) → confirmation non bloquée, rattrapage par le cron quotidien ou php bin/horodatage.php.
  • Signatures existantes : horodatées par le rattrapage, et leur auteur reçoit la preuve par e-mail (100 au plus par passage, jamais en double).
  • Retrait : la preuve est supprimée avec la signature. L'admin affiche la date d'horodatage.

⚠️ Après le déploiement, le prochain passage du cron (ou php bin/horodatage.php) envoie un e-mail de preuve à chaque signataire existant.

Vérifié :

  • bash tests/flow.sh avec une autorité simulée (tests/tsa-mock.php, openssl ts) : panne à la confirmation, rattrapage, envoi rétroactif sans doublon, page vérifiée, openssl ts -verify OK, attestation modifiée refusée, jeton d'une autre autorité refusé par la chaîne épinglée, preuve supprimée au retrait.
  • Avec le vrai staging : jeton obtenu et vérifié par le serveur ; openssl ts -verify OK avec la chaîne publiée ; le vérificateur de demo.open-eidas.eu affiche « Document authentifié et intègre » (empreinte exacte, signature RSA valide, chaîne TSU → CA → racine validée).

À la confirmation, une attestation JSON de la signature (sans adresse
e-mail, avec un sel aléatoire) est figée et son empreinte horodatée
(RFC 3161) par api.staging.open-eidas.eu. L'e-mail de confirmation
contient le lien vers une page de preuve (public/preuve.php) : date
certifiée, détails du jeton vérifiés par le serveur, téléchargement de
l'attestation et du jeton, renvoi vers le vérificateur de la démo et
commande openssl ts -verify.

Vérification sans dépendance (src/horodatage.php) : lecture DER,
signature CMS de l'unité d'horodatage, empreinte du TSTInfo et de
l'attestation, usage « Time Stamping », émission par la chaîne de
staging épinglée (src/tsa-staging-ca.pem).

Autorité injoignable : la confirmation n'est pas bloquée, le cron
quotidien (ou php bin/horodatage.php) réessaie. Il horodate aussi les
signatures antérieures et leur envoie leur preuve.

Co-authored-by: Claude <noreply@anthropic.com>
@PhilippeVienne
PhilippeVienne merged commit e5c47e4 into main Sep 27, 2026
3 checks passed
@PhilippeVienne
PhilippeVienne deleted the feat/horodatage branch September 27, 2026 09:12
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