Le parapheur, de bout en bout
Le scénario fondateur de ProofIt, raconté trois fois : l'histoire (pour comprendre), la contestation (pour être rassuré), l'intégration (pour construire). Un dirigeant scelle 15 contrats en bloc ; six mois plus tard, l'un d'eux est contesté. Voici ce qui se passe.
Mars. Bernard, responsable de production, ouvre son parapheur : 15 contrats à valider. Avant tout, il reçoit un code à 6 chiffres sur son téléphone — envoyé aux couleurs de sa plateforme — et le saisit. À cet instant, ProofIt écrit dans son registre inviolable : « le détenteur de ce téléphone a ouvert une session, voici la liste exacte des 15 documents qu'il s'apprête à traiter, et l'empreinte de chacun ». Ce plan est scellé avant le premier clic.
Bernard passe ses contrats en revue et valide. Pour chaque document, ProofIt journalise la lecture et l'intention — puis le cachet serveur de l'entreprise est apposé (par Yousign). Chaque cachet est relié à la session par l'empreinte du document : pas un identifiant de base de données, une empreinte cryptographique que n'importe qui peut recalculer depuis le PDF.
À la clôture, tout est tamponné par des horloges extérieures (la blockchain Bitcoin et un horodateur officiel), l'entreprise contre-signe l'état du registre avec sa propre clé — que ProofIt ne possède pas — et un dossier de preuve complet est archivé. Bernard n'a rien vu de tout ça : pour lui, c'était un code SMS et quelques clics.
Septembre. Sophie conteste l'avenant n°7 devant les prud'hommes : « personne ne l'a réellement validé ». L'expert télécharge l'outil de vérification public, ouvre le dossier de preuve, et vérifie tout hors ligne, sans croire personne. La suite est dans le tableau ci-dessous.
Six angles d'attaque, six réponses vérifiables
Ce que l'avocat adverse peut plaider — et ce que le dossier de preuve répond, pièce à l'appui.
| « Objection ! » | Ce que prouve le dossier |
|---|---|
| « Bernard n'a jamais validé » | Code à usage unique envoyé sur son téléphone et vérifié côté serveur à l'instant T — entrée co-signée, ancrée, dans un registre que la base refuse physiquement de modifier. |
| « Quelqu'un d'autre a cliqué » | Le facteur (téléphone) est lié au compte ; le niveau d'authentification est étiqueté honnêtement dans la preuve (auth_assurance) — le tribunal sait exactement ce qui est prouvé, rien n'est surjoué. Des niveaux supérieurs (TOTP, passkey, identité vérifiée) s'activent par acte. |
| « Le document a été modifié après coup » | L'empreinte du PDF n°7 est figée dans le plan scellé avant le premier clic, puis ancrée sur Bitcoin et chez l'horodateur en mars. Recalculez l'empreinte du PDF produit : elle correspond, ou la falsification est démontrée. |
| « Le cachet a été apposé sans instruction » | L'intention validée précède le cachet dans la chaîne, et les deux portent la même empreinte de document — l'instruction humaine et l'exécution machine sont cryptographiquement soudées. |
| « La plateforme a fabriqué ces logs » | Les ancres Bitcoin et RFC 3161 de mars sont hors de portée de la plateforme — on ne réécrit ni un bloc Bitcoin ni le jeton d'un horodateur qualifié. Le mail témoin DKIM dort dans une boîte tierce depuis mars. |
| « C'est ProofIt qui a triché » | L'entreprise contre-signe les têtes de chaîne avec sa propre clé, jamais détenue par ProofIt, et archive ses copies chez elle. Réécrire l'historique produirait deux états contradictoires co-signés — une faute prouvable, pas une soupçon. |
L'honnêteté fait partie de la preuve : ce que le dossier ne prouve pas (qui tenait physiquement le téléphone, la lecture effective) est documenté plutôt que maquillé — c'est ce qui rend le reste crédible.
Pourquoi c'est solide : le faisceau, pas la preuve unique
Chaque brin est indépendant. Pour frauder sans détection, il faudrait les corrompre tous, en même temps, rétroactivement.
Deux signatures par événement, contiguïté imposée par la base elle-même.
Jeton RFC 3161 — présomption légale d'exactitude (eIDAS art. 41-2).
Gratuit, public, incensurable — personne ne réécrit un bloc.
Une copie signée dans une boîte que personne ici ne contrôle.
Votre clé, vos archives — la parade au « et si l'opérateur trichait ».
ASiC-E standard, outil public, hors ligne — livré uniquement complet et ancré.
L'intégrer dans votre parapheur, côté produit
- Un seul ajout d'UX : le code à 6 chiffres à l'entrée du parapheur — envoyé sous votre marque (vos SMS, vos emails ; le code peut même circuler chiffré de bout en bout, ProofIt n'en détient que la clé publique).
- Déploiement sans risque : feature flag par organisation (pilote → général), kill-switch instantané, et une panne ProofIt après validation ne bloque jamais votre scellement.
- Le livrable client : un dossier de preuve archivé automatiquement — uniquement quand il est complet et ancré (webhook
anchor_coverage: complete), jamais un brouillon ambigu. - Le rôle de témoin : votre plateforme contre-signe les têtes de chaîne et garde ses copies — c'est votre meilleur argument commercial : « même l'éditeur de la preuve ne peut pas tricher ».
- À cadrer : niveau d'authentification par type d'acte, durée de conservation, destinataires des mails témoins, et le DPA (un brouillon article 28 existe).
La séquence d'intégration exacte
# Entrée du parapheur — l'OTP verrouille tout ce qui suit POST /v1/sessions { channel: "sms", actor_user_id, phone_number, planned_operations: [15 × {op_id, type, payload_hash}] } POST /v1/sessions/{id}/validate { otp } # gate bloquant — sans lui, pas de cachet # Par document, AVANT d'appeler votre prestataire de cachet POST /v1/sessions/{id}/actions { event_type: "DOCUMENT_READ", payload_hash } POST /v1/sessions/{id}/actions { event_type: "INTENT_DECLARED", payload_hash, metadata: {intent} } # … cachet Yousign/DocuSign … puis, au webhook du prestataire : POST /v1/events { event_type: "SEAL_COMPLETED", payload_hash: sha256(PDF scellé) } POST /v1/sessions/{id}/artifacts { type: "yousign_seal_v3", artifact_hash: sha256(PDF scellé) } POST /v1/sessions/{id}/close # → ancrage immédiat de la session # La preuve finale vous parvient — ne stockez jamais un provisoire webhook bundle.generated { anchor_coverage: "complete", bundle_id } GET /v1/proofs/{bundle_id} # l'unique .asice à archiver # Devenir témoin (fortement recommandé) webhook checkpoint.created → vérifier GET /v1/entries/{seq} → co-signer POST /v1/checkpoints/{id}/witness { witness_public_key, signature }
Idempotency-Keysur chaque POST — vos retries sont sûrs, jamais de doublon.- Marque blanche : abonnez-vous à
otp.requested/notification.requested— c'est vous qui envoyez SMS et emails, ProofIt garde la preuve de vérification. - Règle d'or :
artifact_hash=payload_hashde la dernière entrée — c'est la soudure intention ↔ cachet.
Pas à pas complet : Démarrage rapide · Webhooks · SDKs.