Un jeton a la forme version.purpose.payload avec un .footer facultatif, par exemple v4.public.…. Chaque version fige sa cryptographie : v3 utilise des algorithmes du NIST (ECDSA P-384 pour les jetons publics ; AES-256-CTR avec HMAC-SHA384 pour les jetons locaux), v4 utilise Ed25519 et XChaCha20 avec BLAKE2b-MAC. L’encodage de pré-authentification (PAE) lie l’en-tête, la charge utile, le pied de page et d’éventuelles assertions implicites (un contexte authentifié mais non transmis, comme un identifiant de locataire) dans ce qui est signé ou protégé par MAC.
Il n’y a ni en-tête alg à détourner ni none ; les préfixes de version et d’usage empêchent aussi d’utiliser une clé locale pour des jetons publics. Les clés sont sérialisées avec PASERK (k4.public…, k4.local…). Les charges utiles utilisent des claims enregistrés de style JWT (exp, iss, aud, sous forme de chaînes ISO 8601 ou de chaînes simples).
PASETO n’est pas une norme de l’IETF (la spécification se trouve sur github.com/paseto-standard/paseto-spec), et les bibliothèques, l’outillage et la prise en charge par les fournisseurs d’identité sont moins fournis que pour JWT. Un JWT vérifié avec un algorithme fixé, conformément à la RFC 8725, offre l’essentiel des mêmes garanties. Le décodeur PASETO analyse les jetons en local.