Invocie

Tech

Chaînes de hash pour des pistes d'audit infalsifiables

ZATCA les impose, les auditeurs européens les adorent, et leur mise en œuvre est peu coûteuse. Voici comment SHA-256 chaîné transforme un registre de factures en un objet dont vous pouvez prouver l'intégrité.

Invocie Team · 8 janvier 2026 · 5 min de lecture


Une piste d'audit infalsifiable est une piste où toute modification de données historiques est détectable. La technique classique — empruntée à la blockchain mais bien plus simple — est la chaîne de hash : chaque enregistrement contient le hash cryptographique du précédent. Touchez à n'importe quel enregistrement historique, et tous les hashs suivants changent.

La recette

Pour chaque facture, calculez :

hash_n = SHA256(prev_hash || canonicalize(payload_n))

// où canonicalize() produit une séquence d'octets déterministe
// (clés triées, pas d'espaces, formatage de nombres stable).

Stockez le hash sur la facture elle-même. Pour prouver l'intégrité d'une facture donnée, il suffit de vérifier que son hash égale celui recalculé à partir du hash de la facture précédente et du payload canonicalisé. ZATCA Phase 2 impose exactement ce schéma.

Pourquoi la canonicalisation est tout

Deux sérialisations JSON différentes octet par octet du même objet logique produisent des hashs différents. RFC 8785 (JCS — JSON Canonicalization Scheme) est l'approche standard : clés triées lexicographiquement, pas d'espaces non significatifs, nombres dans leur forme unique la plus courte, chaînes échappées selon RFC 8259.

Une chaîne par tenant, pas une globale

Faites tourner une chaîne séparée par tenant plutôt qu'une chaîne globale. Deux raisons : (1) vous pouvez sharder le stockage et le calcul par tenant sans coordonner les écritures, et (2) une corruption dans la chaîne d'un tenant ne contamine pas la piste d'audit de tout le monde.

Vérifier après coup

Un auditeur (ou vous-même, défensivement) peut rejouer la chaîne depuis l'origine : hashez le payload de la première facture sans prev_hash, vérifiez la correspondance avec le hash stocké, puis itérez. Toute déviation localise l'enregistrement falsifié. Le subtle.digest de Web Crypto vous donne SHA-256 dans tout runtime moderne — Node, Deno ou le navigateur.

Invocie écrit un hash chaîné sur chaque facture et sur chaque entrée de ComplianceLog. Les deux chaînes sont indépendantes : factures pour la preuve à la ZATCA, logs pour l'audit opérationnel.


Lectures liées

Émettez des factures conformes sur tous les marchés

ZATCA, FTA, Peppol et post-audit mondial — une seule API.

Parler à notre équipe