Documents DID
Un vérificateur résout deux documents DID pour contrôler un reçu : le document de
l'entreprise pour companySig, et le document du citoyen pour l'assertion
WebAuthn. Ils utilisent des méthodes DID différentes et exposent les clés
différemment.
Le document DID de l'entreprise
Résolu depuis did:web:agreely.ca:c:{slug} à
https://agreely.ca/c/{slug}/did.json. Il ne se résout que lorsque l'entreprise a
un domaine vérifié et une clé de signature active.
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/data-integrity/v2"
],
"id": "did:web:agreely.ca:c:acme",
"alsoKnownAs": ["did:web:acme.com"],
"verificationMethod": [
{
"id": "did:web:agreely.ca:c:acme#kms-1",
"type": "Multikey",
"controller": "did:web:agreely.ca:c:acme",
"publicKeyMultibase": "z6Mk...base58btc..."
}
],
"assertionMethod": ["did:web:agreely.ca:c:acme#kms-1"],
"authentication": ["did:web:agreely.ca:c:acme#kms-1"]
}
| Champ | Signification |
|---|---|
id |
Le DID d'entreprise hébergé par Agreely. |
alsoKnownAs |
Le DID du domaine réel et vérifié de l'entreprise, la liaison qui prouve que l'identifiant hébergé par Agreely appartient à l'organisation réelle. |
verificationMethod[].type |
Multikey. |
verificationMethod[].publicKeyMultibase |
La clé publique Ed25519 en base58btc préfixée par z de `(ed25519-pub multicodec 0xed01 |
assertionMethod / authentication |
Référencent le fragment de la clé de signature. |
Le document DID du citoyen
Résolu depuis did:agreely:citizen:.... Il est public, non authentifié et sans
locataire par conception (tout vérificateur peut le résoudre). Il est assemblé à
partir de l'historique complet des clés, de sorte que chaque clé que le DID a
détenue apparaît avec sa fenêtre d'autorité.
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B",
"verificationMethod": [
{
"id": "did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B#passkey-1",
"controller": "did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B",
"validFrom": "2026-01-10T14:00:00Z",
"validUntil": null,
"type": "WebAuthnAuthenticationKey2024",
"publicKeyCose": "0xa5010203262001..."
},
{
"id": "did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B#recovery-1",
"controller": "did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B",
"validFrom": "2026-01-10T14:00:00Z",
"validUntil": null,
"type": "Ed25519VerificationKey2020",
"publicKeyMultibase": "z6Mk...base58btc..."
}
],
"authentication": [
"did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B#passkey-1"
],
"capabilityInvocation": [
"did:agreely:citizen:9F8K2M4P7Q1R3T5V8W0X2Y4Z6B#recovery-1"
]
}
| Champ | Signification |
|---|---|
validFrom / validUntil |
La fenêtre d'autorité de la clé. validUntil est présent même lorsqu'il vaut null, afin qu'un vérificateur distingue « encore valide » de « expirée à T ». Un reçu signé au temps T se résout vers la clé qui faisait autorité à T. |
WebAuthnAuthenticationKey2024 |
Une clé d'accès. Son publicKeyCose est la clé publique encodée en COSE sous forme 0x-hex; vérifiez-en l'assertion WebAuthn du reçu. |
Ed25519VerificationKey2020 |
Une clé de récupération, exposée comme publicKeyMultibase. |
authentication |
Fragments de clés d'accès (autorisés à signer un consentement). |
capabilityInvocation |
Fragments de clés de récupération, autorisés uniquement pour la rotation du DID, jamais pour signer un consentement. |
La fenêtre est ce qui garde valides les anciens reçus
Lorsque vous vérifiez proof[1] d'un reçu, prenez son fragment verificationMethod, trouvez cette méthode dans le document citoyen, et confirmez que sa fenêtre [validFrom, validUntil] contient le grantedAt du reçu. Vérifiez ensuite l'assertion par rapport à la clé COSE de cette méthode. Une clé retirée par rotation vérifie toujours ses reçus historiques.
Ensuite
- Vérifier un reçu lie les deux documents dans la recette à quatre contrôles.