Le protocole
Cette section est la pièce maîtresse de la documentation. Agreely est un véritable protocole, et non un format propriétaire : chaque reçu, chaque demande et chaque document DID est bâti à partir de normes publiées (DID et justificatifs vérifiables du W3C, canonicalisation JSON RFC 8785, keccak256 d'Ethereum, preuves de Merkle d'OpenZeppelin, EdDSA et WebAuthn) câblées ensemble de sorte qu'un auditeur muni des artéfacts et de ces règles puisse vérifier un octroi sans faire confiance à Agreely.
Chaque page explique non seulement ce qu'est la construction mais pourquoi cette norme précise a été choisie. Commencez ici par l'identité, puis lisez canonicalisation et hachage, signatures et clés d'accès, le registre sur la chaîne et l'intégrité du document sur IPFS.
Deux sortes d'identité
Agreely a deux sujets d'identité distincts, et ils utilisent des méthodes DID différentes à dessein. Ne les confondez pas :
- Les entreprises sont
did:web:agreely.ca:c:{slug}. Agreely héberge le document DID de l'entreprise, lié au domaine réel et vérifié de l'entreprise. - Les citoyens sont
did:agreely:citizen:{opaque}. Une méthode conçue sur mesure, opaque et ancrée.
La méthode entreprise est traitée sous signatures et clés d'accès et documents DID. Cette page porte sur la méthode citoyen.
did:agreely:citizen
Le format du DID citoyen est :
did:agreely:citizen:<26-char Crockford base32 of 16 random bytes>
Le suffixe est entièrement opaque. Il n'encode aucune identité réelle,
seulement 128 bits d'aléa rendus en base32 Crockford (chiffres et lettres
majuscules, à l'exclusion de I, L, O et U afin que la poignée soit sans
ambiguïté lue à voix haute). Seize octets aléatoires s'encodent en exactement 26
caractères. Un exemple :
did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B
Le DID est la seule clé sur laquelle est indexée la couche citoyen; il est sans
locataire. Chaque clé d'accès, clé de récupération et ligne d'historique de clés
se joint par le DID, jamais par une entreprise. C'est la moitié de ce qui donne à
Agreely sa non-corrélation : le côté
citoyen ne sait rien du customerId d'une entreprise.
did:agreely:citizen garde l'identifiant stable et opaque pendant que les clés
sous-jacentes tournent librement. L'identifiant est ancré sur la chaîne comme un
engagement sans arête (un événement de création ou de rotation qui ne renvoie à
aucun consentement), de sorte que son existence est à l'épreuve de la
falsification sans rien exposer.
L'historique des clés garde valides les anciens reçus
Les clés d'un DID changent au fil du temps, mais un reçu signé l'an dernier doit
toujours se vérifier cette année. Le document DID citoyen est assemblé à partir de
l'historique complet des clés, et chaque méthode de vérification porte une
fenêtre d'autorité [validFrom, validUntil] :
{
"id": "did:agreely:citizen:9F8K...#passkey-1",
"controller": "did:agreely:citizen:9F8K...",
"type": "WebAuthnAuthenticationKey2024",
"publicKeyCose": "0x...",
"validFrom": "2026-01-10T14:00:00Z",
"validUntil": null
}
Une signature faite au temps T se résout vers la clé qui faisait autorité à T,
même après que cette clé a été retirée par rotation. validUntil est présent même
lorsqu'il vaut null, afin qu'un vérificateur puisse distinguer « encore valide »
(null) de « expirée à » (un horodatage). Les clés de récupération sont exposées
en tant que Ed25519VerificationKey2020 et sont autorisées uniquement pour la
rotation du DID (capabilityInvocation), jamais pour signer un consentement.
Voir la forme complète dans documents DID.