Skip to content

Spec 3.0 : engagements par champ, divulgation sélective, ancrage par lot - #3

Merged
desiorac merged 1 commit into
mainfrom
feat/spec-3.0-engagements-par-champ
Sep 13, 2026
Merged

desiorac merged 1 commit into
mainfrom
feat/spec-3.0-engagements-par-champ

Conversation

@desiorac

Copy link
Copy Markdown
Member

Chaque preuve porte verification_algorithm qui pointe vers ce dépôt. Trust Layer passe en spec 3.0 (ark-forge/trust-layer#25, mergée) : sans cette mise à jour, un tiers qui suit le lien depuis une preuve lit la formule sur les valeurs, n'arrive pas à la recalculer sur une preuve publique, et obtient TAMPERED contre un émetteur honnête. C'est précisément le trou que spec 3.0 referme.

Ce que la spec dit maintenant

  • Section 2 réécrite : chain_hash = racine Merkle RFC 6962 des engagements SHA256(champ || 0x00 || nonce || canonical_json(valeur)). Les trois éléments du préimage sont motivés : nom du champ pour qu'un engagement ne se déplace pas d'un champ à l'autre, nonce de 32 octets par champ et par preuve (par champ contre le brute force d'un voisin à faible entropie, par preuve contre le chaînage de deux preuves), canonical_json pour que 100 et "100" n'ouvrent pas le même engagement.
  • Divulgation sélective : le triplet (champ, nonce, valeur) se suffit, puisque l'engagement est déjà couvert par le hash ancré. Pas de format signé, pas d'endpoint.
  • Section 2.2, ancrage par lot : racine sur les chain hashes, batch_anchor par preuve, et les trois vérifications obligatoires — dont la longueur du chemin d'inclusion, sans laquelle un tree_size surévalué est accepté (le parcours atteint la vraie racine et s'arrête tôt, tous les autres contrôles satisfaits).
  • État pending : une preuve dont le lot n'est pas fermé n'a pas d'ancre externe, et un vérificateur DOIT le rendre comme une attente, jamais comme une falsification.
  • Compatibilité : 1.1 / 1.2 / 2.0 / 2.1 conservées et tabulées. Rien de rétroactif, aucun re-ancrage.

Vecteurs

Trois nouveaux (12 au total) : deux vecteurs d'engagements à nonces figés, un vecteur de lot avec la racine et un chemin d'inclusion par feuille. check_consistency.py réimplémente les primitives de son côté, donc le gate croise deux implémentations plutôt que de se relire.

Le bloc Python de la section 5, copié-collé, rend VERIFIED sur une preuve de production réelle spec 3.0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CzXFq94XGK7vcDgoSRsPFp

Les preuves portent `verification_algorithm` qui pointe ici. Trust Layer passe en
spec 3.0 : sans cette mise à jour, un tiers qui suit le lien depuis une preuve lit
la formule sur les valeurs et n'arrive pas à la recalculer, ce qui est exactement
le trou que spec 3.0 referme.

- section 2 réécrite : chain_hash = racine Merkle RFC 6962 des engagements
  sha256(champ || 0x00 || nonce || canonical_json(valeur)), nonce de 32 octets par
  champ ET par preuve, avec le pourquoi de chacun des trois éléments du préimage.
- divulgation sélective : le triplet (champ, nonce, valeur) se suffit à lui-même,
  puisque l'engagement est déjà ancré. Aucun format signé, aucun endpoint.
- section 2.2 ancrage par lot : racine sur les chain hashes, chemin d'inclusion par
  preuve, et les trois vérifications obligatoires — dont la longueur du chemin, sans
  laquelle un tree_size surévalué passe.
- état pending : une preuve qui attend son lot n'est pas une preuve falsifiée.
- compat 1.1 / 1.2 / 2.0 / 2.1 conservée et tabulée ; rien de rétroactif.
- vecteurs 10-12 et check_consistency.py étendu, primitives réimplémentées à part
  pour que le gate croise deux implémentations et pas une seule.

Le bloc Python de la section 5, copié-collé, rend VERIFIED sur une preuve de
production réelle spec 3.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CzXFq94XGK7vcDgoSRsPFp
@desiorac
desiorac merged commit 2022e47 into main Sep 13, 2026
1 check passed
@desiorac
desiorac deleted the feat/spec-3.0-engagements-par-champ branch September 13, 2026 14:02
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