# Revocation mechanics

**URL:** https://forum.duniter.org/t/revocation-mechanics/9412
**Category:** Ğ1v2 protocol
**Tags:** revocation
**Created:** [2 June 2022 18:15 UTC](https://forum.duniter.org/t/revocation-mechanics/9412 "2022-06-02T18:15:37Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [2 June 2022 18:15 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/1 "2022-06-02T18:15:37Z")

</div>

Je viens de tester la révocation explicite, vu qu’aucun wallet ne permet encore de générer le document de révocation, je l’ai généré “à la main” avec un peu de code Rust.

Le document de révocation est **extrêmement simple** , c’est **la concaténation de la clé publique et du genesis hash** , cela permet déjà d’identifier de manière unique une identité dans tout l’univers, pas besoin de plus.

Une fois la signature générée, il suffit de conserver précieusement cette signature et c’est suffisant, la clé publique et le genesis hash pouvant être retrouvés aisément.

Ensuite, n’importe-qui en possession de la signature peut révoquer l’identité via le call suivant:

 ![image](https://forum.duniter.org/uploads/default/original/2X/2/2f7d3fa70c8328e91d1283711e527882befbd7d2.png)

Et ça fonctionne, mon 2ème compte membre `Elois2` à bien été révoqué 😃 :

 ![image](https://forum.duniter.org/uploads/default/original/2X/0/0e0dd31b7787ec6d68ae07e8d5fcb55cf8931bd5.png)

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [2 June 2022 18:37 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/2 "2022-06-02T18:37:30Z")

</div>

> [@elois](#):
>
> Le document de révocation est **extrêmement simple** , c’est **la concaténation de la clé publique et du genesis hash** , cela permet déjà d’identifier de manière unique une identité dans tout l’univers, pas besoin de plus.

Du moins, c’est suffisant pour fournir l’équivalent de ce que fournissait duniter v1, mais je pense qu’il nous faut plus:

La possibilité de rendre invalide une signature de révocation. En effet, c’est une donnée qu’on est censé conserver toute sa vie, donc qui peut se retrouver exposée/divulguée par erreur à certains moments de la vie, ça peut être bien de pouvoir “modifier” cette signature de révocation de temps à autre.

Il suffirait de rajouter un “revocation nonce” dans la payload à signer, ainsi que dans le storage onchain (par identité), et créer un call pour l’incrémenter.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [2 June 2022 19:31 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/3 "2022-06-02T19:31:06Z")

</div>

> [@elois](#):
>
> ça peut être bien de pouvoir « modifier » cette signature de révocation de temps à autre

Oui bonne idée, il faut quand même que le “temps à autre” soit suffisamment grand pour être assuré qu’en cas de vol de la clé privée l’on puisse quand même révoquer le compte (changer le nonce et balancer la révocation dans la foulée), il ne faudrait pas que le voleur puisse empêcher la révocation en “contrant” rapidement le changement de nonce.

---

<div class="post-metadata">

### Author: ![Maaltir](https://forum.duniter.org/user_avatar/forum.duniter.org/maaltir/32/5039_2.png) [@Maaltir](https://forum.duniter.org/u/Maaltir)
#### Post date: [2 June 2022 19:37 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/4 "2022-06-02T19:37:14Z")

</div>

Dans cesium V1, on peut révoquer son compte en utilisant son identifiant et mot de passe.  
Je suppose qu’il en sera de même avec les wallets de Duniter V2.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [2 June 2022 21:26 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/5 "2022-06-02T21:26:09Z")

</div>

> [@cgeek](#):
>
> il faut quand même que le « temps à autre » soit suffisamment grand pour être assuré qu’en cas de vol de la clé privée l’on puisse quand même révoquer le compte (changer le nonce et balancer la révocation dans la foulée),

Tu sous-entends une règle côté protocole qui imposerait un délai minimal entre deux incréments du “revocation nonce”, je pense qu’il n’y en a pas besoin, on devrait d’ailleurs supprimer toutes les autres règles du même type (délai minimum entre deux renouvellements d’adhésion ou de certifs), car ces règles servent uniquement d’anti-spam, mais ne servent à rien, car un spammeur va juste spammer un call qui n’est pas limité par ces règles la (comme `balances.transfer`).

Je me rends compte que j’ai reproduit bêtement ces deux règles (RenewablePeriod et CertRenewablePeriod) alors qu’elles ne servent à rien, j’ouvre urne issue pour les supprimer: [Remove useless rules RenewablePeriod and CertRenewablePeriod (#56) · Issues · nodes / rust / Duniter v2S · GitLab](https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/56)

Le spam de call on doit s’en protéger par des frais adaptés (ce que est possible grâce au système de `weights`), et des quotas gratuit pour les membres certifiées (en nombre de poids par période de temps), ça permet en plus d’avoir une seule logique à un seul endroit pour tous les call, et pas plein de règles complexes en plus pour certains calls.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [2 June 2022 21:26 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/6 "2022-06-02T21:26:49Z")

</div>

> [@Maaltir](#):
>
> Je suppose qu’il en sera de même avec les wallets de Duniter V2.

Évidemment

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [3 June 2022 07:58 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/7 "2022-06-03T07:58:33Z")

</div>

> [@elois](#):
>
> Tu sous-entends une règle côté protocole qui imposerait un délai minimal entre deux incréments du « revocation nonce », je pense qu’il n’y en a pas besoin

Oui c’est ça. Je pense qu’il y en a besoin dans le cas précis de la révocation pour assurer à tout membre (passé, présent ou en devenir) qu’un vol de sa clé privée ne l’empêchera pas de révoquer son identité.

Car si l’attaquant vole la clé privée et peut spammer lui aussi l’évolution du revocation nonce, alors l’utilisateur honnête pourrait ne pas être en mesure de publier sa révocation dans le cas où l’attaquant répondrait automatiquement à l’incrémentation du revocation nonce par une autre incrémentation. C’est facile avec un bot.

Si la seule contrainte sont les frais, alors il suffit de monnaie pour nuire à quelqu’un une fois la clé privée dérobée. Ce peut être un investissement rentable si le voleur réalise un chantage économique pour arrêter d’incrémenter le revocation nonce. C’est assez proche du squatting DNS.

C’est peut-être un cas à la marge, mais quand même, on parle d’usurpation d’identité, ça me semble important.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [3 June 2022 07:58 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/8 "2022-06-03T07:58:59Z")

</div>

> [@elois](#):
>
> Je me rends compte que j’ai reproduit bêtement ces deux règles (RenewablePeriod et CertRenewablePeriod) alors qu’elles ne servent à rien

Oui pour ces paramètres, en effet.

---

<div class="post-metadata">

### Author: ![Maaltir](https://forum.duniter.org/user_avatar/forum.duniter.org/maaltir/32/5039_2.png) [@Maaltir](https://forum.duniter.org/u/Maaltir)
#### Post date: [3 June 2022 08:18 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/9 "2022-06-03T08:18:07Z")

</div>

> [@cgeek](#):
>
> Car si l’attaquant vole la clé privée et peut spammer lui aussi l’évolution du révocation nonce,

J’avoue que j’ai un peu de mal à comprendre ce problème.  
En cas de vol d’identité, l’utilisateur à toujours accès à son compte avec son mot de passe, cela suffit pour révoquer son compte sans avoir besoin de générer un nouveau fichier de révocation.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [3 June 2022 08:21 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/10 "2022-06-03T08:21:17Z")

</div>

Pas avec le système de «&nbsp;revocation nonce&nbsp;» proposé par Eloïs ci-dessus.

---

<div class="post-metadata">

### Author: ![Maaltir](https://forum.duniter.org/user_avatar/forum.duniter.org/maaltir/32/5039_2.png) [@Maaltir](https://forum.duniter.org/u/Maaltir)
#### Post date: [3 June 2022 08:26 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/11 "2022-06-03T08:26:53Z")

</div>

Alors cela ne correspond pas avec ce que j’avais compris ici :

> [@Lancement de la blockchain ĞDev le 27 mai 2022 (runtime-100)](https://forum.duniter.org/t/lancement-de-la-blockchain-gdev-le-27-mai-2022-runtime-100/9314/80):
>
> > [@Maaltir](#):
> >
> > Je suppose qu’il en sera de même avec les wallets de Duniter V2.
> 
> Évidemment

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [3 June 2022 08:35 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/12 "2022-06-03T08:35:53Z")

</div>

C’est parce que sa réponse suppose que l’attaque je décris, utilisant le revocation nonce, n’est pas possible ou négligeable. Dans ce cas en effet, identifiant + mdp suffisent.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [3 June 2022 09:12 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/13 "2022-06-03T09:12:36Z")

</div>

> [@cgeek](#):
>
> Car si l’attaquant vole la clé privée et peut spammer lui aussi l’évolution du revocation nonce, alors l’utilisateur honnête pourrait ne pas être en mesure de publier sa révocation dans le cas où l’attaquant répondrait automatiquement à l’incrémentation du revocation nonce par une autre incrémentation. C’est facile avec un bot.

Il suffit de permettre la révocation du compte de manière “directe”, sans revocation nonce, comme actuellement en fait.  
Le “revocation nonce” servira uniquement pour générer une signature de révocation « périssable » si besoin, mais il restera possible de générer une signature de révocation éternelle comme actuellement (à ne faire que pour révoquer le compte directement).

> [@Lancement de la blockchain ĞDev le 27 mai 2022 (runtime-100)](https://forum.duniter.org/t/lancement-de-la-blockchain-gdev-le-27-mai-2022-runtime-100/9314/86):
>
> C’est parce que sa réponse suppose que l’attaque je décris, utilisant le revocation nonce, n’est pas possible

Oui en effet, elle n’est pas possible car il n’est pas obligatoire de passer par le revocation nonce.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [3 June 2022 09:28 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/14 "2022-06-03T09:28:57Z")

</div>

> [@elois](#):
>
> il n’est pas obligatoire de passer par le revocation nonce.

Ah bah oui avec ce détail, ça change tout 🙂 OK pour moi, ça tient bien la route, c’est même une bonne idée.

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [3 June 2022 10:32 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/15 "2022-06-03T10:32:12Z")

</div>

Je ne saisis pas bien toute la discussion sur le document de révocation. Si on suppose que l’utilisateur peut perdre son mnemonic, pourquoi ne pourrait-il pas perdre également son fichier de révocation? En quoi serait-il plus simple pour un utilisateur lambda de conserver une signature générée une fois à la création de son compte et jamais utilisée que son mnemonic ?

> [@elois](#):
>
> Le document de révocation est **extrêmement simple** , c’est **la concaténation de la clé publique et du genesis hash** , cela permet déjà d’identifier de manière unique une identité dans tout l’univers, pas besoin de plus.

Je serais plus pour rester sur cette solution extrêmement simple quitte à implémenter du sharding pour permettre à un utilisateur de récupérer sa clé grâce à des proches. @poka avait de bons arguments pour cette option.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [3 June 2022 10:37 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/16 "2022-06-03T10:37:19Z")

</div>

> [@HugoTrentesaux](#):
>
> Si on suppose que l’utilisateur peut perdre son mnemonic, pourquoi ne pourrait-il pas perdre également son fichier de révocation?

Il peut le perdre aussi, mais le fichier de révocation peut être possédé par un proche (famille ou meilleur ami) .

> [@HugoTrentesaux](#):
>
> Je serais plus pour rester sur cette solution extrêmement simple

Et moi non, ne pas pouvoir “invalider” mon document de révocation me pose vraiment problème.

> [@HugoTrentesaux](#):
>
> quitte à implémenter du sharding pour permettre à un utilisateur de récupérer sa clé grâce à des proches.

C’est une autre feature qui apporte d’autres intérêts, on à besoin des deux, pour moi c’est un autre sujet 🙂

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [3 June 2022 10:42 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/17 "2022-06-03T10:42:15Z")

</div>

J’ai bougé cette partie de la discussion pour ne pas la perdre parce qu’elle me semble intéressante.

---

<div class="post-metadata">

### Author: ![ManUtopiK](https://forum.duniter.org/user_avatar/forum.duniter.org/manutopik/32/29_2.png) [@ManUtopiK](https://forum.duniter.org/u/ManUtopiK)
#### Post date: [7 June 2022 20:59 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/18 "2022-06-07T20:59:52Z")

</div>

Il y a 2 events dans ce bloc 91662:

- membership.MembershipRevoked
- identity.IdtyRemoved

Quel conséquence ont ces 2 events à part ne plus obtenir de DU ?  
Est-ce que toutes les certifications sont supprimées ?  
Un compte révoqué est-il définitivement fermé et irrécupérable ?  
J’imagine que le compte est toujours là. Est-ce que l’on peut refaire un `membership.RequestMembership` ou carrément `membership.forceRequestMembership` pour récupérer le compte ? (Et quel différence avec `membership.claimMembership` ?)

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [7 June 2022 22:09 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/19 "2022-06-07T22:09:50Z")

</div>

> [@ManUtopiK](#):
>
> Quel conséquence ont ces 2 events à part ne plus obtenir de DU ?

- La suppression de l’identité, donc la perte de tout les droits associés, donc également droit de certifier, droit de créer une identité, et tout éventuel droit de vote dans une future gouvernance on-chain.
- La suppression du compte s’il n’a plus de monnaie, donc la suppression du nonce, donc attaque par rejeu possible si le compte est réalimenté plus tard.

> [@ManUtopiK](#):
>
> Est-ce que toutes les certifications sont supprimées ?

Non, comme dans la Ğ1 actuellement, les certifications restent actives jusqu’à leur expiration, pour évitier un effondrement de la toile de confiance en cascade.

Attention toutefois, si l’identité n’était pas encore validée, mais juste créée ou confirmée, les certifications reçues sont supprimées.

> [@ManUtopiK](#):
>
> Un compte révoqué est-il définitivement fermé et irrécupérable ?

Il ne pourra plus jamais y avoir d’identité attachée à ce compte. Il reste utilisable en simple portefeuille, à condition qu’il ne soit pas vide (qu’il y ai des Ğ1 dessus).

> [@ManUtopiK](#):
>
> Est-ce que l’on peut refaire un `membership.RequestMembership` ou carrément `membership.forceRequestMembership`

Non on ne peut pas.

> [@ManUtopiK](#):
>
> Et quel différence avec `membership.claimMembership` ?

C’est un call interne, il ne peut pas être appelé par l’utilisateur.

---

<div class="post-metadata">

### Author: ![ManUtopiK](https://forum.duniter.org/user_avatar/forum.duniter.org/manutopik/32/29_2.png) [@ManUtopiK](https://forum.duniter.org/u/ManUtopiK)
#### Post date: [8 June 2022 12:53 UTC](https://forum.duniter.org/t/revocation-mechanics/9412/20 "2022-06-08T12:53:00Z")

</div>

> [@elois](#):
>
> Attention toutefois, si l’identité n’était pas encore validée, mais juste créée ou confirmée, les certifications reçues sont supprimées.

Ça émet des calls quand les certifs sont supprimées ? Dans la palet `cert` je vois seulement `addCert`.

Aussi, quel est l’implication de `system.KilledAccount` ?

[Next page](https://forum.duniter.org/t/revocation-mechanics/9412.md?page=2)
