Côté émission — le billet se porte lui-même.
La charge utile du billet — événement, place, catégorie, dates d'émission et d'expiration — est signée en HMAC-SHA256, et c'est ce jeton signé que porte le QR. Le contrôle n'a donc rien à interroger : il vérifie la signature avec la clé embarquée. Sous un chapiteau sans couverture, avec une file d'attente, c'est la seule approche qui tienne.
Côté contrôle — la liste locale tranche.
La vérification de signature est faite en temps constant : une comparaison naïve laisserait fuiter, par le temps de réponse, à quel caractère elle a divergé. Le second scan d'un même billet est refusé alors que sa signature reste parfaitement valide — c'est la liste locale des billets consommés qui tranche, et elle se synchronise dès que le réseau revient.