Aller au contenu

Clés publiques de vérification

Chaque enregistrement de caisse produit par Tattooed — ticket, clôture, archive, événement — porte une signature électronique. Les clés ci-dessous permettent de la vérifier, sans nous, et au besoin contre nous.

Pourquoi ces clés sont publiques

La signature est asymétrique : la clé qui signe n’est pas celle qui vérifie. Nous seuls détenons la clé privée ; n’importe qui peut détenir la clé publique. C’est ce qui donne sa valeur à la signature — avec un mécanisme symétrique, nous pourrions refabriquer n’importe quelle chaîne, et elle ne prouverait rien à un tiers.

Les clés

Chaque enregistrement porte un identifiant de clé (keyId). Prenez celui du ticket que vous vérifiez, pas nécessairement la clé courante : un enregistrement de 2026 se vérifie avec la clé de 2026, même si elle a été remplacée depuis.

caisse-v1-2026-09 clé courante — signe les nouveaux enregistrements
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETjFpAl8BKKBPFlyAGGRuXs0+2fLa
PSfe2v5U/30RN94vVUvspUJhcpeIuWGPD6uacib3ralpzarJSJQXYurSYg==
-----END PUBLIC KEY-----

Comment vérifier un enregistrement

L’algorithme est ECDSA P-256, signature SHA-256 sur la représentation hexadécimale de l'empreinte. Il tient en trois étapes, et chacune se refait avec les outils standard d’un poste de travail.

  1. Récupérez l’export des données de caisse du professionnel (produit depuis son espace, il contient tickets.csv, clotures.csv, evenements.csv et une notice explicative). Chaque ligne porte son hash, sa signature, son parentHash et son keyId.
  2. Rejouez la chaîne. L’empreinte d’un enregistrement est SHA-256(canonicalJson • parentHash) — la concaténation des octets du JSON canonique stocké tel quel, puis des 64 caractères hexadécimaux de l’empreinte précédente. Le premier enregistrement d’une chaîne a pour parentHash soixante-quatre zéros.
  3. Vérifiez la signature. Elle porte sur la représentation hexadécimale de l’empreinte, pas sur ses octets bruts — c’est ce que vous lisez dans l’export, sans avoir à le reconvertir. Elle est encodée en base64.

En ligne de commande, une fois la clé enregistrée dans cle.pem et la signature décodée dans signature.bin :

printf '%s' "$HASH" > empreinte.txt
openssl dgst -sha256 -verify cle.pem -signature signature.bin empreinte.txt

La réponse attendue est Verified OK. Toute autre réponse signifie que l’enregistrement, sa signature ou la clé ne se correspondent pas.

Ce que ces clés ne disent pas

Une signature valide établit qu’un enregistrement n’a pas été modifié depuis son émission, et qu’il a bien été produit par le logiciel. Elle n’établit pas que son contenu est exact : le libellé d’une prestation, le montant saisi et le taux de taxe appliqué relèvent du professionnel, pas de l’éditeur.

Aller plus loin