Je ressens le besoin de résumer quelques points relatifs aux champs owner_key
et old_owner_key
dans le genesis v2.
Ajout de la fonctionnalité de changement de clé
Dans Duniter v1, une clé = une identité. Si la clé est compromise, il faut révoquer l’identité et créer une identité sur une nouvelle clé. Dans Duniter v2, elois a introduit (sans en discuter sur le forum sauf erreur), la possibilité de “migrer” une identité, c’est-à-dire changer la clé qui “gère” l’identité.
- Migrate identity (identity.changeOwnerKey()) (lors de l’implémentation dans Ǧecko)
Une des raisons principales pour motiver cette fonctionnalité est que dans Duniter v1 les clés utilisées était en Ed25519 et que dans Duniter v2, même si ces clés sont compatibles côté blockchain, certaines parties de l’écosystème client fonctionnent uniquement avec des clés Sr25519 (polkadotjs app par exemple).
Pour éviter le “vol” d’identité, l’ancienne clé a toujours la possibilité de révoquer l’identité pendant un certain délai après le changement de clé (6 mois il me semble).
Ce changement de clé n’est pas possible pour les identités forgeron.
Format des clés dans le genesis
Au début de la migration des données v1 vers v2, les adresses étaient directement écrites au format SS58 dans le genesis par py-g1-migrator, avec un préfixe choisi à ce moment. Cgeek a corrigé ce problème et a remplacé ce champ par owner_pubkey
dans le fichier g1-data.json
en écrivant directement la clé publique en base58 (donc sans préfixe et sans checksum).
Migration d’identités forgeron au genesis
Pour les forgerons, et en particulier les forgerons du genesis, il est pratique d’avoir accès à l’app polkadot js nativement, et donc d’avoir des clés Sr25519. C’est pourquoi Poka avait introduit le changement de clé dès le genesis dans PyG1Migrator.
Le travail de Cgeek a permis de dissocier les données v1 (g1-data.json
) des aspects spécifiques à la v2 (toile forgeron) qui sont dans un fichier dédié (gdev.json
ou gtest.json
). C’est ainsi beaucoup plus clair de savoir ce qui vient d’où, et la lecture de ces données est faite par duniter v2 au lancement (commande build-spec
par exemple).
Méthode de génération des clés
Une des différences importantes entre les clés v1 et v2 est la méthode par défaut utilisée pour les générer. En v1, la plupart des clés étaient “compatibles Cesium” et donc utilisaient un couple de paramètres pour scrypt. L’écosystème v2 incite plutôt à générer les clés avec une seed / mnemonic tiré au hasard.
C’est une différence purement client (invisible côté blockchain) mais ça a des conséquences pratiques pour l’utilisateur et en termes de sécurité.
Une idée de “migration douce” / “smooth migration” avait été lancée pour habituer les utilisateurs à la “nouvelle” méthode de génération des clés avant le lancement de la v2 et de leur permettre de migrer leur identité dès le genesis.
Une des idées était que l’utilisateur gère ses clés de manière robuste (méthode de génération) et pratique (uniformisation des interfaces). Mais cette idée ne fait pas consensus et les efforts en ce sens sont à l’arrêt.
Reste à décider si on ajoute la fonctionnalité de migration d’identité au genesis v2 pour permettre au moins aux forgerons d’avoir des clés Sr25519 dès le début de la Ğ1v2.
@cgeek je veux bien ton avis là-dessus