Chapitre 4 : Justificatifs et Cycle de Vie

Ce chapitre décrit comment les quatre catégories de justificatifs du système FayID sont produits, les règles de leur validité, les mécanismes de rotation et la sémantique de la révocation.


Vue d'ensemble des justificatifs

Le système FayID comporte quatre catégories de justificatifs, chacune servant un objectif distinct :

JustificatifObjectifCaractéristiques du cycle de vie
MnemonicSauvegarde lisible par l'humain de la clé privée d'un Human IDRenvoyé une seule fois à la génération ; jamais persisté
Dynamic CodeSubstitut d'un Human ID dans les échanges publicsÀ durée limitée ; rotation à expiration
Verification CodeVérifie l'authenticité d'un détenteur de coFay IDRotation possible par le propriétaire
Authorization GrantJustificatif d'accès obtenu après échange d'un justificatif d'authentification traditionnel via FayIDÀ durée limitée ; prend en charge la révocation active

Mnemonic

Génération

  • Lorsqu'une personne physique crée un Human ID, l'Issuer génère simultanément un Mnemonic
  • Le Mnemonic est renvoyé à la personne physique une seule fois, au moment de la génération
  • L'Issuer ne persiste jamais le Mnemonic en clair dans aucun stockage

Dérivation déterministe

  • Lorsque le même Mnemonic est ressaisi, le système doit dériver un Human ID identique à l'original
  • C'est le seul chemin de récupération d'un Human ID

Contraintes de sécurité

  • Le Mnemonic ne doit pas apparaître dans un quelconque journal, sortie d'audit ou payload sortant
  • La dérivation d'un Dynamic Code n'exige pas que le détenteur présente le Mnemonic en clair

Le Mnemonic est le matériel secret le plus sensible du système FayID. Une fois perdu, le Human ID ne peut plus être récupéré.


Dynamic Code

Génération

  • Sur requête du détenteur d'un Human ID, l'Issuer dérive un Dynamic Code en clair à partir du Human ID
  • Chaque Dynamic Code porte un délai d'expiration explicite (expiresAt)
  • La dérivation n'exige pas de Mnemonic en clair ; seule une preuve de propriété est nécessaire

Validité et résolution

  • Tant qu'il est valide, le Resolver peut résoudre un Dynamic Code vers l'unique Human ID correspondant
  • Après expiration, le Resolver refuse la résolution et renvoie DYNAMIC_CODE_EXPIRED

Rotation

  • Chaque Dynamic Code nouvellement généré diffère du précédent (sans collision)
  • Les Dynamic Codes générés à différents moments ne peuvent pas être corrélés — un observateur extérieur ne peut pas dire si deux Dynamic Codes proviennent du même Human ID

Propriétés de sécurité

  • La valeur littérale d'un Dynamic Code ne peut pas être utilisée pour récupérer la clé privée ou le Mnemonic du Human ID
  • Un Dynamic Code peut être enregistré dans des journaux (contrairement à un Human ID en clair)

Diagramme d'état

stateDiagram-v2
  [*] --> ACTIVE : Issuer.issueDynamicCode()
  ACTIVE --> EXPIRED : now > expiresAt
  EXPIRED --> [*]

Un Dynamic Code n'a que deux états : ACTIVE et EXPIRED. Il n'y a pas de transition inverse.


Verification Code

Génération

  • Lorsqu'un coFay ID est créé avec succès, l'Issuer émet un Verification Code apparié un-à-un avec ce coFay ID

Vérification

  • Le vérificateur soumet une paire (coFay ID, Verification Code) et le Resolver renvoie succès ou échec
  • Après des échecs répétés de vérification, le Resolver applique une limitation de débit aux requêtes de vérification pour ce coFay ID (VERIFICATION_RATE_LIMITED)

Rotation

  • Le propriétaire du coFay ID peut demander la rotation du Verification Code
  • Après rotation, l'ancien Verification Code devient invalide immédiatement
  • Les numéros de version augmentent de manière monotone ; le Resolver n'accepte que la version la plus récente

Évolution des versions

stateDiagram-v2
  [*] --> v1 : Issuer.createCoFayID()
  v1 --> v2 : rotateVerificationCode()
  v2 --> v3 : rotateVerificationCode()
  v3 --> vN : ...

La rotation est instantanée : la nouvelle version prend effet au même moment où l'ancienne version est rejetée par le Resolver.


Authorization Grant

Génération

  • L'utilisateur soumet un justificatif d'authentification traditionnel ainsi qu'un FayID cible (un iFay ID ou un Human ID) à l'Auth Exchange
  • Une fois le justificatif traditionnel vérifié, l'Auth Exchange émet un Authorization Grant pour le FayID cible
  • Le Grant porte un délai d'expiration explicite (expiresAt)

Validité

  • Tant qu'il est valide, présenter le Grant équivaut à présenter le justificatif d'authentification traditionnel d'origine
  • Après expiration, l'Auth Exchange rejette le Grant (GRANT_EXPIRED)

Révocation

  • Le détenteur du Grant peut le révoquer à tout moment
  • Après révocation, l'Auth Exchange rejette immédiatement le Grant lors des vérifications ultérieures (GRANT_REVOKED)
  • La révocation est un état terminal et ne peut être annulée

Interaction avec les identités révoquées

  • Si le FayID cible (iFay ID ou coFay ID) a été révoqué, l'Auth Exchange refuse d'émettre un nouveau Grant à son intention (IDENTITY_REVOKED)

Diagramme d'état

stateDiagram-v2
  [*] --> ACTIVE : Auth_Exchange.exchangeLegacyForGrant()
  ACTIVE --> EXPIRED : now > expiresAt
  ACTIVE --> REVOKED : Auth_Exchange.revokeGrant()
  EXPIRED --> [*]
  REVOKED --> [*]

EXPIRED et REVOKED sont tous deux des états terminaux. Une fois qu'un Grant entre dans un état terminal, il ne revient jamais à ACTIVE.


Cycle de vie de l'identité (iFay ID / coFay ID)

Les iFay IDs et coFay IDs partagent le même modèle de cycle de vie :

stateDiagram-v2
  [*] --> ACTIVE : Issuer.create*ID()
  ACTIVE --> REVOKED : Issuer.revoke*ID()
  REVOKED --> [*]

Règles clés :

  • La révocation est irréversible : une fois marquée REVOKED, la « dé-révocation » n'est pas prise en charge
  • Effets de la révocation : le Resolver renvoie un drapeau revoked aux côtés des résultats de résolution ; l'Auth Exchange refuse d'émettre de nouveaux Grants pour un ID révoqué
  • Les Human IDs ne sont pas révoqués : à la couche de protocole actuelle, un Human ID n'entre pas dans l'état REVOKED (le chemin de récupération après compromission du Mnemonic est une question ouverte)

La révocation est une opération monotone. Toute « récupération » doit se faire en émettant une nouvelle entité, et non en inversant l'état d'une ancienne.