Spec 3.0 : engagements par champ, divulgation sélective, ancrage par lot - #3
Merged
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Chaque preuve porte
verification_algorithmqui 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 obtientTAMPEREDcontre un émetteur honnête. C'est précisément le trou que spec 3.0 referme.Ce que la spec dit maintenant
chain_hash= racine Merkle RFC 6962 des engagementsSHA256(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_jsonpour que100et"100"n'ouvrent pas le même engagement.(champ, nonce, valeur)se suffit, puisque l'engagement est déjà couvert par le hash ancré. Pas de format signé, pas d'endpoint.batch_anchorpar preuve, et les trois vérifications obligatoires — dont la longueur du chemin d'inclusion, sans laquelle untree_sizesurévalué est accepté (le parcours atteint la vraie racine et s'arrête tôt, tous les autres contrôles satisfaits).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.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.pyré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
VERIFIEDsur une preuve de production réelle spec 3.0.🤖 Generated with Claude Code
https://claude.ai/code/session_01CzXFq94XGK7vcDgoSRsPFp